diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index 4fd397798..d5f1ab961 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -315,7 +315,7 @@ class EntryEditActivity : LockingActivity(), entryValidatedForAutofillSelection(entry) }, { - entryValidatedForRegistration() + onValidateSpecialMode() } ) } @@ -330,6 +330,12 @@ class EntryEditActivity : LockingActivity(), } } + override fun onValidateSpecialMode() { + super.onValidateSpecialMode() + // Don't keep activity history for entry edition + finish() + } + private fun entryValidatedForKeyboardSelection(entry: Entry) { // Populate Magikeyboard with entry mDatabase?.let { database -> @@ -337,8 +343,7 @@ class EntryEditActivity : LockingActivity(), entry.getEntryInfo(database), intent) } - super.onCancelSpecialMode() - finish() + onValidateSpecialMode() } private fun entryValidatedForAutofillSelection(entry: Entry) { @@ -349,14 +354,7 @@ class EntryEditActivity : LockingActivity(), entry.getEntryInfo(database)) } } - super.onCancelSpecialMode() - super.finish() - } - - private fun entryValidatedForRegistration() { - // Entry registered, finish naturally - super.onCancelSpecialMode() - finish() + onValidateSpecialMode() } override fun onResume() { @@ -742,7 +740,6 @@ class EntryEditActivity : LockingActivity(), override fun onCancelSpecialMode() { onApprovedBackPressed { super.onCancelSpecialMode() - finish() } } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt index dbb282a56..cb6babc47 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -219,17 +219,14 @@ class GroupActivity : LockingActivity(), } }, { searchInfo -> - if (PreferencesUtil.isKeyboardSaveSearchInfoEnable(this@GroupActivity)) { - mCurrentGroup?.let { currentGroup -> - EntryEditActivity.launchForKeyboardSelectionResult(this@GroupActivity, - currentGroup, searchInfo) - } + mCurrentGroup?.let { currentGroup -> + EntryEditActivity.launchForKeyboardSelectionResult(this@GroupActivity, + currentGroup, searchInfo) } }, { searchInfo, assistStructure -> var finishActivity = true - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O - && PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity)) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mCurrentGroup?.let { currentGroup -> assistStructure?.let { autofillStructure -> finishActivity = false @@ -582,14 +579,14 @@ class GroupActivity : LockingActivity(), EntryActivity.launch(this@GroupActivity, entryVersioned, mReadOnly) }, { searchInfo -> - if (PreferencesUtil.isKeyboardSaveSearchInfoEnable(this@GroupActivity)) { + if (!mReadOnly && PreferencesUtil.isKeyboardSaveSearchInfoEnable(this@GroupActivity)) { updateEntryWithSearchInfo(entryVersioned, searchInfo) } else { entrySelectedForKeyboardSelection(entryVersioned) } }, { searchInfo, _ -> - if (PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity)) { + if (!mReadOnly && PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity)) { updateEntryWithSearchInfo(entryVersioned, searchInfo) } else { entrySelectedForAutofillSelection(entryVersioned) @@ -612,7 +609,7 @@ class GroupActivity : LockingActivity(), entry.getEntryInfo(database), intent) } - super.onCancelSpecialMode() + onValidateSpecialMode() } private fun entrySelectedForAutofillSelection(entry: Entry) { @@ -623,7 +620,7 @@ class GroupActivity : LockingActivity(), entry.getEntryInfo(database)) } } - super.onCancelSpecialMode() + onValidateSpecialMode() } private fun entrySelectedForRegistration(entry: Entry, registerInfo: RegisterInfo?) { @@ -632,8 +629,7 @@ class GroupActivity : LockingActivity(), // TODO box update confirmation EntryEditActivity.launchForRegistration(this@GroupActivity, entry, registerInfo) - super.onCancelSpecialMode() - finish() + onValidateSpecialMode() } private fun updateEntryWithSearchInfo(entry: Entry, searchInfo: SearchInfo?) { @@ -1121,7 +1117,7 @@ class GroupActivity : LockingActivity(), } } - override fun onCancelSpecialMode() { + private fun removeFragmentHistory() { val fragmentManager = supportFragmentManager if (mSelectionModeCountBackStack > 0) { for (selectionMode in 0 .. mSelectionModeCountBackStack) { @@ -1130,6 +1126,15 @@ class GroupActivity : LockingActivity(), } // Reinit the counter for navigation history mSelectionModeCountBackStack = 0 + } + + override fun onValidateSpecialMode() { + removeFragmentHistory() + super.onValidateSpecialMode() + } + + override fun onCancelSpecialMode() { + removeFragmentHistory() super.onCancelSpecialMode() } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt index a127250f4..63d9e9f0f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt @@ -632,7 +632,7 @@ open class PasswordActivity : SpecialModeActivity() { val inflater = menuInflater // Read menu inflater.inflate(R.menu.open_file, menu) - if (mSpecialMode != SpecialMode.DEFAULT || mForceReadOnly) { + if (mForceReadOnly) { menu.removeItem(R.id.menu_open_file_read_mode_key) } else { changeOpenFileReadIcon(menu.findItem(R.id.menu_open_file_read_mode_key)) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/selection/SpecialModeActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/selection/SpecialModeActivity.kt index 00ac246d5..281138532 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/selection/SpecialModeActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/selection/SpecialModeActivity.kt @@ -47,12 +47,30 @@ abstract class SpecialModeActivity : StylishActivity() { && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) } - open fun onCancelSpecialMode() { - if (!isIntentSender()) { + open fun onValidateSpecialMode() { + if (isIntentSender()) { + super.finish() + } else { EntrySelectionHelper.removeModesFromIntent(intent) EntrySelectionHelper.removeInfoFromIntent(intent) - if (mSpecialMode != SpecialMode.DEFAULT) - backToTheAppCaller() + if (mSpecialMode != SpecialMode.DEFAULT) { + // To move the app in background + moveTaskToBack(true) + } + } + } + + open fun onCancelSpecialMode() { + if (isIntentSender()) { + // To get the app caller, only for IntentSender + super.onBackPressed() + } else { + EntrySelectionHelper.removeModesFromIntent(intent) + EntrySelectionHelper.removeInfoFromIntent(intent) + if (mSpecialMode != SpecialMode.DEFAULT) { + // To move the app in background + moveTaskToBack(true) + } } }