diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt index 2a1ef1ec0..ac36474f1 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -243,94 +243,22 @@ class FileDatabaseSelectActivity : SpecialModeActivity(), } private fun launchPasswordActivity(databaseUri: Uri, keyFile: Uri?) { - EntrySelectionHelper.doSpecialAction(intent, - { searchInfo -> // Default Action - try { - PasswordActivity.launch(this@FileDatabaseSelectActivity, - databaseUri, keyFile, - searchInfo) - // Remove the search info from intent - if (searchInfo != null) { - finish() - } - } catch (e: FileNotFoundException) { - fileNoFoundAction(e) - } + PasswordActivity.launch(this, + databaseUri, + keyFile, + { exception -> + fileNoFoundAction(exception) }, - { searchInfo -> // Keyboard Selection Action - try { - PasswordActivity.launchForKeyboardResult(this@FileDatabaseSelectActivity, - databaseUri, keyFile, - searchInfo) - onLaunchActivitySpecialMode() - } catch (e: FileNotFoundException) { - fileNoFoundAction(e) - } - }, - { searchInfo, assistStructure -> // Autofill Selection Action - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - try { - PasswordActivity.launchForAutofillResult(this@FileDatabaseSelectActivity, - databaseUri, keyFile, - assistStructure, - searchInfo) - onLaunchActivitySpecialMode() - } catch (e: FileNotFoundException) { - fileNoFoundAction(e) - } - } else { - onCancelSpecialMode() - } - }, - { searchInfo -> // Registration Action - try { - PasswordActivity.launchForRegistration(this@FileDatabaseSelectActivity, - databaseUri, keyFile, - searchInfo) - onLaunchActivitySpecialMode() - } catch (e: FileNotFoundException) { - fileNoFoundAction(e) - } - }) + { onCancelSpecialMode() }, + { onLaunchActivitySpecialMode() }) } private fun launchGroupActivity(database: Database) { - val readOnly = database.isReadOnly - EntrySelectionHelper.doSpecialAction(intent, - { searchInfo -> - GroupActivity.launch(this@FileDatabaseSelectActivity, - false, - searchInfo, - readOnly) - if (searchInfo != null) { - finish() - } - }, - { searchInfo -> - GroupActivity.launchForKeyboardSelectionResult(this@FileDatabaseSelectActivity, - false, - searchInfo, - readOnly) - // Do not keep history - onLaunchActivitySpecialMode() - }, - { searchInfo, assistStructure -> - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - GroupActivity.launchForAutofillResult(this@FileDatabaseSelectActivity, - assistStructure, - false, - searchInfo, - readOnly) - onLaunchActivitySpecialMode() - } else { - onCancelSpecialMode() - } - }, - { searchInfo -> - GroupActivity.launchForRegistration(this@FileDatabaseSelectActivity, - searchInfo) - onLaunchActivitySpecialMode() - }) + GroupActivity.launch(this, + database.isReadOnly, + { onValidateSpecialMode() }, + { onCancelSpecialMode() }, + { onLaunchActivitySpecialMode() }) } override fun onCancelSpecialMode() { 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 526e26377..28b60f430 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -60,6 +60,7 @@ import com.kunzisoft.keepass.database.element.icon.IconImage import com.kunzisoft.keepass.database.element.node.Node import com.kunzisoft.keepass.database.element.node.NodeId import com.kunzisoft.keepass.database.element.node.Type +import com.kunzisoft.keepass.database.search.SearchHelper import com.kunzisoft.keepass.education.GroupActivityEducation import com.kunzisoft.keepass.icons.assignDatabaseIcon import com.kunzisoft.keepass.model.RegisterInfo @@ -1248,5 +1249,111 @@ class GroupActivity : LockingActivity(), registerInfo) } } + + /* + * ------------------------- + * Global Launch + * ------------------------- + */ + fun launch(activity: Activity, + readOnly: Boolean, + onValidateSpecialMode: () -> Unit, + onCancelSpecialMode: () -> Unit, + onLaunchActivitySpecialMode: () -> Unit) { + EntrySelectionHelper.doSpecialAction(activity.intent, + { searchInfo -> + GroupActivity.launch(activity, + true, + searchInfo, + readOnly) + // Finish activity if no search info + if (searchInfo != null) { + activity.finish() + } + }, + { searchInfo -> + SearchHelper.checkAutoSearchInfo(activity, + Database.getInstance(), + searchInfo, + { items -> + // Response is build + if (items.size == 1) { + populateKeyboardAndMoveAppToBackground(activity, + items[0], + activity.intent) + onValidateSpecialMode() + } else { + // Select the one we want + GroupActivity.launchForKeyboardSelectionResult(activity, + true, + searchInfo) + onLaunchActivitySpecialMode() + } + }, + { + // Here no search info found, disable auto search + GroupActivity.launchForKeyboardSelectionResult(activity, + false, + searchInfo, + readOnly) + onLaunchActivitySpecialMode() + }, + { + // Simply close if database not opened, normally not happened + onCancelSpecialMode() + } + ) + }, + { searchInfo, assistStructure -> + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + SearchHelper.checkAutoSearchInfo(activity, + Database.getInstance(), + searchInfo, + { items -> + // Response is build + AutofillHelper.buildResponse(activity, items) + onValidateSpecialMode() + }, + { + // Here no search info found, disable auto search + GroupActivity.launchForAutofillResult(activity, + assistStructure, + false, + searchInfo, + readOnly) + onLaunchActivitySpecialMode() + }, + { + // Simply close if database not opened, normally not happened + onCancelSpecialMode() + } + ) + } else { + onCancelSpecialMode() + } + }, + { registerInfo -> + SearchHelper.checkAutoSearchInfo(activity, + Database.getInstance(), + registerInfo?.searchInfo, + { _ -> + // No auto search, it's a registration + GroupActivity.launchForRegistration(activity, + registerInfo) + onLaunchActivitySpecialMode() + }, + { + // Here no search info found, disable auto search + GroupActivity.launchForRegistration(activity, + registerInfo) + onLaunchActivitySpecialMode() + }, + { + // Simply close if database not opened, normally not happened + 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 1bad5d5e9..709b02af2 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt @@ -56,7 +56,6 @@ import com.kunzisoft.keepass.biometric.BiometricUnlockDatabaseHelper import com.kunzisoft.keepass.database.action.ProgressDatabaseTaskProvider import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.exception.DuplicateUuidDatabaseException -import com.kunzisoft.keepass.database.search.SearchHelper import com.kunzisoft.keepass.education.PasswordActivityEducation import com.kunzisoft.keepass.model.RegisterInfo import com.kunzisoft.keepass.model.SearchInfo @@ -286,100 +285,12 @@ open class PasswordActivity : SpecialModeActivity() { } private fun launchGroupActivity() { - EntrySelectionHelper.doSpecialAction(intent, - { searchInfo -> - GroupActivity.launch(this@PasswordActivity, - true, - searchInfo, - readOnly) - // Finish activity if no search info - if (searchInfo != null) { - finish() - } - }, - { searchInfo -> - SearchHelper.checkAutoSearchInfo(this, - Database.getInstance(), - searchInfo, - { items -> - // Response is build - if (items.size == 1) { - populateKeyboardAndMoveAppToBackground(this@PasswordActivity, - items[0], - intent) - onValidateSpecialMode() - } else { - // Select the one we want - GroupActivity.launchForKeyboardSelectionResult(this, - true, - searchInfo) - onLaunchActivitySpecialMode() - } - }, - { - // Here no search info found, disable auto search - GroupActivity.launchForKeyboardSelectionResult(this@PasswordActivity, - false, - searchInfo, - readOnly) - onLaunchActivitySpecialMode() - }, - { - // Simply close if database not opened, normally not happened - onCancelSpecialMode() - } - ) - }, - { searchInfo, assistStructure -> - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - SearchHelper.checkAutoSearchInfo(this, - Database.getInstance(), - searchInfo, - { items -> - // Response is build - AutofillHelper.buildResponse(this, items) - onValidateSpecialMode() - }, - { - // Here no search info found, disable auto search - GroupActivity.launchForAutofillResult(this@PasswordActivity, - assistStructure, - false, - searchInfo, - readOnly) - onLaunchActivitySpecialMode() - }, - { - // Simply close if database not opened, normally not happened - onCancelSpecialMode() - } - ) - } else { - onCancelSpecialMode() - } - }, - { registerInfo -> - SearchHelper.checkAutoSearchInfo(this, - Database.getInstance(), - registerInfo?.searchInfo, - { _ -> - // No auto search, it's a registration - GroupActivity.launchForRegistration(this, - registerInfo) - onLaunchActivitySpecialMode() - }, - { - // Here no search info found, disable auto search - GroupActivity.launchForRegistration(this@PasswordActivity, - registerInfo) - onLaunchActivitySpecialMode() - }, - { - // Simply close if database not opened, normally not happened - onCancelSpecialMode() - } - ) - }) + GroupActivity.launch(this, + readOnly, + { onValidateSpecialMode() }, + { onCancelSpecialMode() }, + { onLaunchActivitySpecialMode() } + ) } override fun onValidateSpecialMode() { @@ -918,5 +829,67 @@ open class PasswordActivity : SpecialModeActivity() { registerInfo) } } + + /* + * ------------------------- + * Global Launch + * ------------------------- + */ + fun launch(activity: Activity, + databaseUri: Uri, + keyFile: Uri?, + fileNoFoundAction: (exception: FileNotFoundException) -> Unit, + onCancelSpecialMode: () -> Unit, + onLaunchActivitySpecialMode: () -> Unit) { + EntrySelectionHelper.doSpecialAction(activity.intent, + { searchInfo -> // Default Action + try { + PasswordActivity.launch(activity, + databaseUri, keyFile, + searchInfo) + // Remove the search info from intent + if (searchInfo != null) { + activity.finish() + } + } catch (e: FileNotFoundException) { + fileNoFoundAction(e) + } + }, + { searchInfo -> // Keyboard Selection Action + try { + PasswordActivity.launchForKeyboardResult(activity, + databaseUri, keyFile, + searchInfo) + onLaunchActivitySpecialMode() + } catch (e: FileNotFoundException) { + fileNoFoundAction(e) + } + }, + { searchInfo, assistStructure -> // Autofill Selection Action + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + try { + PasswordActivity.launchForAutofillResult(activity, + databaseUri, keyFile, + assistStructure, + searchInfo) + onLaunchActivitySpecialMode() + } catch (e: FileNotFoundException) { + fileNoFoundAction(e) + } + } else { + onCancelSpecialMode() + } + }, + { searchInfo -> // Registration Action + try { + PasswordActivity.launchForRegistration(activity, + databaseUri, keyFile, + searchInfo) + onLaunchActivitySpecialMode() + } catch (e: FileNotFoundException) { + fileNoFoundAction(e) + } + }) + } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/helpers/EntrySelectionHelper.kt b/app/src/main/java/com/kunzisoft/keepass/activities/helpers/EntrySelectionHelper.kt index 4d2d4bf97..d4420d03a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/helpers/EntrySelectionHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/helpers/EntrySelectionHelper.kt @@ -41,6 +41,7 @@ object EntrySelectionHelper { addSpecialModeInIntent(intent, SpecialMode.SELECTION) addTypeModeInIntent(intent, TypeMode.MAGIKEYBOARD) addSearchInfoInIntent(intent, searchInfo) + intent.flags = intent.flags or Intent.FLAG_ACTIVITY_CLEAR_TASK context.startActivity(intent) }