From 76c20263f7240346f8fe06bb8ed066930b03d6fd Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 25 Sep 2025 20:50:14 +0200 Subject: [PATCH] fix: Refactoring type mode call --- .../keepass/activities/EntryEditActivity.kt | 69 +-- .../activities/FileDatabaseSelectActivity.kt | 61 +-- .../keepass/activities/GroupActivity.kt | 455 ++++++------------ .../EntrySelectionHelper.kt | 75 +-- .../keepass/credentialprovider/TypeMode.kt | 2 +- 5 files changed, 235 insertions(+), 427 deletions(-) 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 f0c2ef9ec..ab2d1580c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -378,21 +378,26 @@ class EntryEditActivity : DatabaseLockActivity(), intent = intent, defaultAction = {}, searchAction = {}, - registrationAction = {}, - keyboardSelectionAction = { - entryValidatedForKeyboardSelection(database, entrySave.newEntry) + selectionAction = { intentSender, typeMode, searchInfo, autofillComponent -> + when(typeMode) { + TypeMode.DEFAULT -> {} + TypeMode.MAGIKEYBOARD -> + entryValidatedForKeyboardSelection(database, entrySave.newEntry) + TypeMode.PASSKEY -> + entryValidatedForPasskeySelection(database, entrySave.newEntry) + TypeMode.AUTOFILL -> + entryValidatedForAutofillSelection(database, entrySave.newEntry) + } }, - autofillSelectionAction = { _, _ -> - entryValidatedForAutofillSelection(database, entrySave.newEntry) - }, - autofillRegistrationAction = { - entryValidatedForAutofillRegistration(entrySave.newEntry) - }, - passkeySelectionAction = { - entryValidatedForPasskeySelection(database, entrySave.newEntry) - }, - passkeyRegistrationAction = { - entryValidatedForPasskeyRegistration(database, entrySave.newEntry) + registrationAction = { intentSender, typeMode, registerInfo -> + when(typeMode) { + TypeMode.DEFAULT -> {} + TypeMode.MAGIKEYBOARD -> {} + TypeMode.PASSKEY -> + entryValidatedForPasskeyRegistration(database, entrySave.newEntry) + TypeMode.AUTOFILL -> + entryValidatedForAutofillRegistration(entrySave.newEntry) + } } ) } @@ -439,23 +444,27 @@ class EntryEditActivity : DatabaseLockActivity(), searchAction = { // Nothing when search retrieved }, - registrationAction = { - entryValidatedForSave(entry) + selectionAction = { intentSender, typeMode, searchInfo, autofillComponent -> + when(typeMode) { + TypeMode.DEFAULT -> {} + TypeMode.MAGIKEYBOARD -> + entryValidatedForKeyboardSelection(database, entry) + TypeMode.PASSKEY -> + entryValidatedForPasskeySelection(database, entry) + TypeMode.AUTOFILL -> + entryValidatedForAutofillSelection(database, entry) + } }, - keyboardSelectionAction = { - entryValidatedForKeyboardSelection(database, entry) - }, - autofillSelectionAction = { _, _ -> - entryValidatedForAutofillSelection(database, entry) - }, - autofillRegistrationAction = { - entryValidatedForAutofillRegistration(entry) - }, - passkeySelectionAction = { - entryValidatedForPasskeySelection(database, entry) - }, - passkeyRegistrationAction = { - entryValidatedForPasskeyRegistration(database, entry) + registrationAction = { _, typeMode, _ -> + when(typeMode) { + TypeMode.DEFAULT -> + entryValidatedForSave(entry) + TypeMode.MAGIKEYBOARD -> {} + TypeMode.PASSKEY -> + entryValidatedForPasskeyRegistration(database, entry) + TypeMode.AUTOFILL -> + entryValidatedForAutofillRegistration(entry) + } } ) } 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 a304fbf47..26a6da6b6 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -303,74 +303,29 @@ class FileDatabaseSelectActivity : DatabaseModeActivity(), ) onLaunchActivitySpecialMode() }, - registrationAction = { registerInfo -> - MainCredentialActivity.launchForRegistration( - activity = this, - activityResultLauncher = mCredentialActivityResultLauncher, - databaseFile = databaseUri, - keyFile = keyFile, - hardwareKey = hardwareKey, - typeMode = TypeMode.DEFAULT, - registerInfo = registerInfo - ) - onLaunchActivitySpecialMode() - }, - keyboardSelectionAction = { searchInfo -> + selectionAction = { intentSenderMode, typeMode, searchInfo, autofillComponent -> MainCredentialActivity.launchForSelection( activity = this, + activityResultLauncher = if (intentSenderMode) + mCredentialActivityResultLauncher else null, databaseFile = databaseUri, keyFile = keyFile, hardwareKey = hardwareKey, - typeMode = TypeMode.MAGIKEYBOARD, - searchInfo = searchInfo - ) - onLaunchActivitySpecialMode() - }, - autofillSelectionAction = { searchInfo, autofillComponent -> - MainCredentialActivity.launchForSelection( - activity = this, - activityResultLauncher = mCredentialActivityResultLauncher, - databaseFile = databaseUri, - keyFile = keyFile, - hardwareKey = hardwareKey, - typeMode = TypeMode.AUTOFILL, + typeMode = typeMode, searchInfo = searchInfo, autofillComponent = autofillComponent, ) onLaunchActivitySpecialMode() }, - autofillRegistrationAction = { registerInfo -> + registrationAction = { intentSenderMode, typeMode, registerInfo -> MainCredentialActivity.launchForRegistration( activity = this, - activityResultLauncher = mCredentialActivityResultLauncher, + activityResultLauncher = if (intentSenderMode) + mCredentialActivityResultLauncher else null, databaseFile = databaseUri, keyFile = keyFile, hardwareKey = hardwareKey, - typeMode = TypeMode.AUTOFILL, - registerInfo = registerInfo - ) - onLaunchActivitySpecialMode() - }, - passkeySelectionAction = { searchInfo -> - MainCredentialActivity.launchForSelection( - activity = this, - activityResultLauncher = mCredentialActivityResultLauncher, - databaseFile = databaseUri, - keyFile = keyFile, - hardwareKey = hardwareKey, - typeMode = TypeMode.PASSKEY, - searchInfo = searchInfo - ) - onLaunchActivitySpecialMode() - }, - passkeyRegistrationAction = { registerInfo -> - MainCredentialActivity.launchForRegistration( - activity = this, - activityResultLauncher = mCredentialActivityResultLauncher, - databaseFile = databaseUri, - keyFile = keyFile, - hardwareKey = hardwareKey, - typeMode = TypeMode.PASSKEY, + typeMode = typeMode, registerInfo = registerInfo ) onLaunchActivitySpecialMode() 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 9c39a0f99..aa38522b9 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -18,7 +18,6 @@ */ package com.kunzisoft.keepass.activities -import android.app.Activity import android.app.SearchManager import android.content.ComponentName import android.content.Context @@ -496,70 +495,29 @@ class GroupActivity : DatabaseLockActivity(), searchAction = { // Search not used }, - registrationAction = { registerInfo -> - EntryEditActivity.launchForRegistration( - context = this@GroupActivity, - database = database, - nodeId = currentGroup.nodeId, - registerInfo = registerInfo, - typeMode = TypeMode.DEFAULT, - registrationType = EntryEditActivity.RegistrationType.CREATE - ) - onLaunchActivitySpecialMode() - }, - keyboardSelectionAction = { searchInfo -> + selectionAction = { intentSenderMode, typeMode, searchInfo, autofillComponent -> EntryEditActivity.launchForSelection( context = this@GroupActivity, database = database, - typeMode = TypeMode.MAGIKEYBOARD, - groupId = currentGroup.nodeId, - searchInfo = searchInfo - ) - onLaunchActivitySpecialMode() - }, - autofillSelectionAction = { searchInfo, autofillComponent -> - EntryEditActivity.launchForSelection( - context = this@GroupActivity, - database = database, - typeMode = TypeMode.AUTOFILL, + typeMode = typeMode, groupId = currentGroup.nodeId, searchInfo = searchInfo, autofillComponent = autofillComponent, - activityResultLauncher = mCredentialActivityResultLauncher + activityResultLauncher = if (intentSenderMode) + mCredentialActivityResultLauncher else null ) onLaunchActivitySpecialMode() }, - autofillRegistrationAction = { registerInfo -> + registrationAction = { intentSenderMode, typeMode, registerInfo -> EntryEditActivity.launchForRegistration( context = this@GroupActivity, database = database, nodeId = currentGroup.nodeId, registerInfo = registerInfo, - typeMode = TypeMode.AUTOFILL, - registrationType = EntryEditActivity.RegistrationType.CREATE - ) - onLaunchActivitySpecialMode() - }, - passkeySelectionAction = { searchInfo -> - EntryEditActivity.launchForSelection( - context = this@GroupActivity, - database = database, - typeMode = TypeMode.PASSKEY, - groupId = currentGroup.nodeId, - searchInfo = searchInfo, - activityResultLauncher = mCredentialActivityResultLauncher - ) - onLaunchActivitySpecialMode() - }, - passkeyRegistrationAction = { registerInfo -> - EntryEditActivity.launchForRegistration( - context = this@GroupActivity, - database = database, - activityResultLauncher = mCredentialActivityResultLauncher, - nodeId = currentGroup.nodeId, - registerInfo = registerInfo, - typeMode = TypeMode.PASSKEY, - registrationType = EntryEditActivity.RegistrationType.CREATE + typeMode = typeMode, + registrationType = EntryEditActivity.RegistrationType.CREATE, + activityResultLauncher = if (intentSenderMode) + mCredentialActivityResultLauncher else null ) onLaunchActivitySpecialMode() } @@ -708,32 +666,22 @@ class GroupActivity : DatabaseLockActivity(), searchAction = { // Search not used }, - registrationAction = { + selectionAction = { intentSenderMode, typeMode, searchInfo, autofillComponent -> + when (typeMode) { + TypeMode.DEFAULT -> {} + TypeMode.MAGIKEYBOARD -> entry?.let { + entrySelectedForKeyboardSelection(database, it) + } + TypeMode.PASSKEY -> entry?.let { + entrySelectedForPasskeySelection(database, it) + } + TypeMode.AUTOFILL -> entry?.let { + entrySelectedForAutofillSelection(database, it) + } + } + }, + registrationAction = { intentSenderMode, typeMode, searchInfo -> // Save not used - }, - keyboardSelectionAction = { - // Keyboard selection - entry?.let { - entrySelectedForKeyboardSelection(database, it) - } - }, - autofillSelectionAction = { _, _ -> - // Autofill selection - entry?.let { - entrySelectedForAutofillSelection(database, it) - } - }, - autofillRegistrationAction = { - // Not use - }, - passkeySelectionAction = { - // Passkey selection - entry?.let { - entrySelectedForPasskeySelection(database, it) - } - }, - passkeyRegistrationAction = { - // Not use } ) } @@ -892,73 +840,51 @@ class GroupActivity : DatabaseLockActivity(), searchAction = { // Nothing here, a search is simply performed }, - registrationAction = { registerInfo -> - if (!database.isReadOnly) { - entrySelectedForRegistration( - database = database, - entry = entryVersioned, - activityResultLauncher = null, - registerInfo = registerInfo, - typeMode = TypeMode.DEFAULT - ) - loadGroup() - } else - finish() - }, - keyboardSelectionAction = { searchInfo -> - if (!database.isReadOnly - && searchInfo != null - && PreferencesUtil.isKeyboardSaveSearchInfoEnable(this@GroupActivity) - ) { - updateEntryWithRegisterInfo( - database, - entryVersioned, - searchInfo.toRegisterInfo() - ) + selectionAction = { intentSenderMode, typeMode, searchInfo, autofillComponent -> + when (typeMode) { + TypeMode.DEFAULT -> {} + TypeMode.MAGIKEYBOARD -> { + if (!database.isReadOnly + && searchInfo != null + && PreferencesUtil.isKeyboardSaveSearchInfoEnable(this@GroupActivity) + ) { + updateEntryWithRegisterInfo( + database, + entryVersioned, + searchInfo.toRegisterInfo() + ) + } + entrySelectedForKeyboardSelection(database, entryVersioned) + } + TypeMode.PASSKEY -> { + entrySelectedForPasskeySelection(database, entryVersioned) + } + TypeMode.AUTOFILL -> { + if (!database.isReadOnly + && searchInfo != null + && PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity) + ) { + updateEntryWithRegisterInfo( + database, + entryVersioned, + searchInfo.toRegisterInfo() + ) + } + entrySelectedForAutofillSelection(database, entryVersioned) + } } - entrySelectedForKeyboardSelection(database, entryVersioned) loadGroup() }, - autofillSelectionAction = { searchInfo, _ -> - if (!database.isReadOnly - && searchInfo != null - && PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity) - ) { - updateEntryWithRegisterInfo( - database, - entryVersioned, - searchInfo.toRegisterInfo() - ) - } - entrySelectedForAutofillSelection(database, entryVersioned) - loadGroup() - }, - autofillRegistrationAction = { registerInfo -> + registrationAction = { intentSenderMode, typeMode, registerInfo -> if (!database.isReadOnly) { + // TODO Ask to overwrite data entrySelectedForRegistration( database = database, entry = entryVersioned, registerInfo = registerInfo, - typeMode = TypeMode.AUTOFILL, - activityResultLauncher = null // TODO Result launcher autofill #765 - ) - loadGroup() - } else - finish() - }, - passkeySelectionAction = { searchInfo -> - entrySelectedForPasskeySelection(database, entryVersioned) - loadGroup() - }, - passkeyRegistrationAction = { registerInfo -> - if (!database.isReadOnly) { - // TODO Passkey setting && PreferencesUtil.isAutofillOverwriteEnable(this@GroupActivity) - entrySelectedForRegistration( - database = database, - entry = entryVersioned, - registerInfo = registerInfo, - typeMode = TypeMode.PASSKEY, - activityResultLauncher = mCredentialActivityResultLauncher + typeMode = typeMode, + activityResultLauncher = if (intentSenderMode) + mCredentialActivityResultLauncher else null ) loadGroup() } else @@ -1682,196 +1608,103 @@ class GroupActivity : DatabaseLockActivity(), onCancelSpecialMode() } }, - registrationAction = { registerInfo -> + selectionAction = { intentSenderMode, typeMode, searchInfo, autofillComponent -> + SearchHelper.checkAutoSearchInfo( + context = activity, + database = database, + searchInfo = searchInfo, + onItemsFound = { openedDatabase, items -> + when (typeMode) { + TypeMode.DEFAULT -> {} + TypeMode.MAGIKEYBOARD -> { + MagikeyboardService.performSelection( + items = items, + actionPopulateKeyboard = { entryInfo -> + // Keyboard populated + MagikeyboardService.populateKeyboardAndMoveAppToBackground( + activity, + entryInfo + ) + onValidateSpecialMode() + }, + actionEntrySelection = { autoSearch -> + launchForSelection( + context = activity, + database = database, + typeMode = TypeMode.MAGIKEYBOARD, + searchInfo = searchInfo, + autoSearch = autoSearch + ) + onLaunchActivitySpecialMode() + } + ) + } + TypeMode.PASSKEY -> { + // Response is build + EntrySelectionHelper.performSelection( + items = items, + actionPopulateCredentialProvider = { entryInfo -> + activity.buildPasskeyResponseAndSetResult(entryInfo) + onValidateSpecialMode() + }, + actionEntrySelection = { + launchForSelection( + context = activity, + database = database, + typeMode = TypeMode.PASSKEY, + searchInfo = searchInfo, + activityResultLauncher = activityResultLauncher, + autoSearch = true + ) + onLaunchActivitySpecialMode() + } + ) + } + TypeMode.AUTOFILL -> { + // Response is build + AutofillHelper.buildResponseAndSetResult(activity, openedDatabase, items) + onValidateSpecialMode() + } + } + }, + onItemNotFound = { + // Here no search info found, disable auto search + launchForSelection( + context = activity, + database = database, + typeMode = typeMode, + searchInfo = searchInfo, + autoSearch = false, + autofillComponent = autofillComponent, + activityResultLauncher = if (intentSenderMode) + activityResultLauncher else null + ) + onLaunchActivitySpecialMode() + }, + onDatabaseClosed = { + // Simply close if database not opened, normally not happened + onCancelSpecialMode() + } + ) + }, + registrationAction = { intentSenderMode, typeMode, registerInfo -> // Save info if (database.loaded) { if (!database.isReadOnly) { launchForRegistration( context = activity, - activityResultLauncher = null, database = database, registerInfo = registerInfo, - typeMode = TypeMode.DEFAULT + typeMode = typeMode, + activityResultLauncher = if (intentSenderMode) + activityResultLauncher else null ) onLaunchActivitySpecialMode() } else { activity.toastError(RegisterInReadOnlyDatabaseException()) onCancelSpecialMode() } - } - }, - keyboardSelectionAction = { searchInfo -> - // Keyboard selection - SearchHelper.checkAutoSearchInfo( - context = activity, - database = database, - searchInfo = searchInfo, - onItemsFound = { _, items -> - MagikeyboardService.performSelection( - items, - { entryInfo -> - // Keyboard populated - MagikeyboardService.populateKeyboardAndMoveAppToBackground( - activity, - entryInfo - ) - onValidateSpecialMode() - }, - { autoSearch -> - launchForSelection( - context = activity, - database = database, - typeMode = TypeMode.MAGIKEYBOARD, - searchInfo = searchInfo, - autoSearch = autoSearch - ) - onLaunchActivitySpecialMode() - } - ) - }, - onItemNotFound = { - // Here no search info found, disable auto search - launchForSelection( - context = activity, - database = database, - typeMode = TypeMode.MAGIKEYBOARD, - searchInfo = searchInfo, - autoSearch = false - ) - onLaunchActivitySpecialMode() - }, - onDatabaseClosed = { - // Simply close if database not opened, normally not happened - onCancelSpecialMode() - } - ) - }, - autofillSelectionAction = { searchInfo, autofillComponent -> - // Autofill selection - SearchHelper.checkAutoSearchInfo( - context = activity, - database = database, - searchInfo = searchInfo, - onItemsFound = { openedDatabase, items -> - // Response is build - AutofillHelper.buildResponseAndSetResult(activity, openedDatabase, items) - onValidateSpecialMode() - }, - onItemNotFound = { - // Here no search info found, disable auto search - launchForSelection( - context = activity, - database = database, - typeMode = TypeMode.AUTOFILL, - searchInfo = searchInfo, - autoSearch = false, - autofillComponent = autofillComponent, - activityResultLauncher = activityResultLauncher - ) - onLaunchActivitySpecialMode() - }, - onDatabaseClosed = { - // Simply close if database not opened, normally not happened - onCancelSpecialMode() - } - ) - }, - autofillRegistrationAction = { registerInfo -> - // Autofill registration - if (!database.isReadOnly) { - SearchHelper.checkAutoSearchInfo( - context = activity, - database = database, - searchInfo = registerInfo?.searchInfo, - onItemsFound = { _, _ -> - // No auto search, it's a registration - launchForRegistration( - context = activity, - activityResultLauncher = null, // TODO Autofill result Launcher #765 - database = database, - registerInfo = registerInfo, - typeMode = TypeMode.AUTOFILL - ) - onLaunchActivitySpecialMode() - }, - onItemNotFound = { - // Here no search info found, disable auto search - launchForRegistration( - context = activity, - activityResultLauncher = null, // TODO Autofill result Launcher #765 - database = database, - registerInfo = registerInfo, - typeMode = TypeMode.AUTOFILL - ) - onLaunchActivitySpecialMode() - }, - onDatabaseClosed = { - // Simply close if database not opened, normally not happened - onCancelSpecialMode() - } - ) } else { - activity.toastError(RegisterInReadOnlyDatabaseException()) - onCancelSpecialMode() - } - }, - passkeySelectionAction = { searchInfo -> - // Passkey selection - SearchHelper.checkAutoSearchInfo( - context = activity, - database = database, - searchInfo = searchInfo, - onItemsFound = { _, items -> - // Response is build - EntrySelectionHelper.performSelection( - items = items, - actionPopulateCredentialProvider = { entryInfo -> - activity.buildPasskeyResponseAndSetResult(entryInfo) - onValidateSpecialMode() - }, - actionEntrySelection = { - launchForSelection( - context = activity, - database = database, - typeMode = TypeMode.PASSKEY, - searchInfo = searchInfo, - activityResultLauncher = activityResultLauncher, - autoSearch = true - ) - onLaunchActivitySpecialMode() - } - ) - }, - onItemNotFound = { - // Here no search info found, disable auto search - launchForSelection( - context = activity, - database = database, - typeMode = TypeMode.PASSKEY, - searchInfo = searchInfo, - activityResultLauncher = activityResultLauncher - ) - onLaunchActivitySpecialMode() - }, - onDatabaseClosed = { - // Simply close if database not opened, normally not happened - onCancelSpecialMode() - } - ) - }, - passkeyRegistrationAction = { registerInfo -> - // Passkey registration - if (!database.isReadOnly) { - launchForRegistration( - context = activity, - activityResultLauncher = activityResultLauncher, - database = database, - registerInfo = registerInfo, - typeMode = TypeMode.PASSKEY - ) - onLaunchActivitySpecialMode() - } else { - activity.toastError(RegisterInReadOnlyDatabaseException()) onCancelSpecialMode() } } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt index e63c13829..897b0d251 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/EntrySelectionHelper.kt @@ -74,9 +74,9 @@ object EntrySelectionHelper { TypeMode.DEFAULT -> // Close the database this.sendBroadcast(Intent(LOCK_ACTION)) TypeMode.MAGIKEYBOARD -> { } + TypeMode.PASSKEY -> { } TypeMode.AUTOFILL -> if (PreferencesUtil.isAutofillCloseDatabaseEnable(this)) this.sendBroadcast(Intent(LOCK_ACTION)) - TypeMode.PASSKEY -> { } } } } @@ -230,16 +230,19 @@ object EntrySelectionHelper { intent: Intent, defaultAction: () -> Unit, searchAction: (searchInfo: SearchInfo) -> Unit, - registrationAction: (registerInfo: RegisterInfo?) -> Unit, - keyboardSelectionAction: (searchInfo: SearchInfo?) -> Unit, - autofillSelectionAction: (searchInfo: SearchInfo?, - autofillComponent: AutofillComponent) -> Unit, - autofillRegistrationAction: (registerInfo: RegisterInfo?) -> Unit, - passkeySelectionAction: (searchInfo: SearchInfo?) -> Unit, - passkeyRegistrationAction: (registerInfo: RegisterInfo?) -> Unit + selectionAction: ( + intentSenderMode: Boolean, + typeMode: TypeMode, + searchInfo: SearchInfo?, + autofillComponent: AutofillComponent? + ) -> Unit, + registrationAction: ( + intentSenderMode: Boolean, + typeMode: TypeMode, + registerInfo: RegisterInfo? + ) -> Unit ) { - - when (retrieveSpecialModeFromIntent(intent)) { + when (val specialMode = retrieveSpecialModeFromIntent(intent)) { SpecialMode.DEFAULT -> { removeModesFromIntent(intent) removeInfoFromIntent(intent) @@ -260,13 +263,18 @@ object EntrySelectionHelper { var autofillComponentInit = false if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { AutofillHelper.retrieveAutofillComponent(intent)?.let { autofillComponent -> - autofillSelectionAction.invoke(searchInfo, autofillComponent) + selectionAction.invoke( + isIntentSenderMode(specialMode, TypeMode.AUTOFILL), + TypeMode.AUTOFILL, + searchInfo, + autofillComponent + ) autofillComponentInit = true } } if (!autofillComponentInit) { if (intent.getEnumExtra(KEY_SPECIAL_MODE) != null) { - when (retrieveTypeModeFromIntent(intent)) { + when (val typeMode = retrieveTypeModeFromIntent(intent)) { TypeMode.DEFAULT -> { removeModesFromIntent(intent) if (searchInfo != null) @@ -274,10 +282,20 @@ object EntrySelectionHelper { else defaultAction.invoke() } - TypeMode.MAGIKEYBOARD -> keyboardSelectionAction.invoke(searchInfo) + TypeMode.MAGIKEYBOARD -> selectionAction.invoke( + isIntentSenderMode(specialMode, typeMode), + typeMode, + searchInfo, + null + ) TypeMode.PASSKEY -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { - passkeySelectionAction.invoke(searchInfo) + selectionAction.invoke( + isIntentSenderMode(specialMode, typeMode), + typeMode, + searchInfo, + null + ) } else defaultAction.invoke() else -> { @@ -296,27 +314,20 @@ object EntrySelectionHelper { } SpecialMode.REGISTRATION -> { val registerInfo: RegisterInfo? = retrieveRegisterInfoFromIntent(intent) - if (!isIntentSenderMode( - specialMode = retrieveSpecialModeFromIntent(intent), - typeMode = retrieveTypeModeFromIntent(intent)) - ) { + val typeMode = retrieveTypeModeFromIntent(intent) + val intentSenderMode = isIntentSenderMode(specialMode, typeMode) + if (!intentSenderMode) { removeModesFromIntent(intent) removeInfoFromIntent(intent) } - when (retrieveTypeModeFromIntent(intent)) { - TypeMode.AUTOFILL -> { - autofillRegistrationAction.invoke(registerInfo) - } - TypeMode.PASSKEY -> { - passkeyRegistrationAction.invoke(registerInfo) - } - else -> { - if (registerInfo != null) - registrationAction.invoke(registerInfo) - else { - defaultAction.invoke() - } - } + if (registerInfo != null) + registrationAction.invoke( + intentSenderMode, + typeMode, + registerInfo + ) + else { + defaultAction.invoke() } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/TypeMode.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/TypeMode.kt index 6dc5a443c..55b28e31c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/TypeMode.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/TypeMode.kt @@ -1,5 +1,5 @@ package com.kunzisoft.keepass.credentialprovider enum class TypeMode { - DEFAULT, MAGIKEYBOARD, AUTOFILL, PASSKEY + DEFAULT, MAGIKEYBOARD, PASSKEY, AUTOFILL } \ No newline at end of file