Autofill during save

This commit is contained in:
J-Jamet
2021-08-23 18:15:58 +02:00
parent 56f0f8a299
commit ae0b8db0b0
7 changed files with 38 additions and 31 deletions

View File

@@ -3,7 +3,7 @@ KeePassDX(3.0.0)
* Manually select RecycleBin group and Templates group #191 * Manually select RecycleBin group and Templates group #191
* Fix timeout in dialogs #716 * Fix timeout in dialogs #716
* Check URI permissions #626 * Check URI permissions #626
* Small changes #1035 #1043 * Small changes #1035 #1043 #942
KeePassDX(2.10.5) KeePassDX(2.10.5)
* Increase the saving speed of database #1028 * Increase the saving speed of database #1028

View File

@@ -424,7 +424,7 @@ class EntryActivity : DatabaseLockActivity() {
// Transit data in previous Activity after an update // Transit data in previous Activity after an update
Intent().apply { Intent().apply {
putExtra(EntryEditActivity.ADD_OR_UPDATE_ENTRY_KEY, mMainEntryId) putExtra(EntryEditActivity.ADD_OR_UPDATE_ENTRY_KEY, mMainEntryId)
setResult(EntryEditActivity.UPDATE_ENTRY_RESULT_CODE, this) setResult(EntryEditActivity.ADD_OR_UPDATE_ENTRY_RESULT_CODE, this)
} }
super.finish() super.finish()
} }

View File

@@ -267,6 +267,24 @@ class EntryEditActivity : DatabaseLockActivity(),
} ?: run { } ?: run {
updateEntry(entrySave.oldEntry, entrySave.newEntry) updateEntry(entrySave.oldEntry, entrySave.newEntry)
} }
// Don't wait for saving if it's to provide autofill
mDatabase?.let { database ->
EntrySelectionHelper.doSpecialAction(intent,
{},
{},
{},
{
entryValidatedForKeyboardSelection(database, entrySave.newEntry)
},
{ _, _ ->
entryValidatedForAutofillSelection(database, entrySave.newEntry)
},
{
entryValidatedForAutofillRegistration(entrySave.newEntry)
}
)
}
} }
} }
@@ -376,22 +394,22 @@ class EntryEditActivity : DatabaseLockActivity(),
EntrySelectionHelper.doSpecialAction(intent, EntrySelectionHelper.doSpecialAction(intent,
{ {
// Finish naturally // Finish naturally
finishForEntryResult(actionTask, entry) finishForEntryResult(entry)
}, },
{ {
// Nothing when search retrieved // Nothing when search retrieved
}, },
{ {
entryValidatedForSave(actionTask, entry) entryValidatedForSave(entry)
}, },
{ {
entryValidatedForKeyboardSelection(database, actionTask, entry) entryValidatedForKeyboardSelection(database, entry)
}, },
{ _, _ -> { _, _ ->
entryValidatedForAutofillSelection(database, entry) entryValidatedForAutofillSelection(database, entry)
}, },
{ {
entryValidatedForAutofillRegistration(actionTask, entry) entryValidatedForAutofillRegistration(entry)
} }
) )
} }
@@ -405,19 +423,19 @@ class EntryEditActivity : DatabaseLockActivity(),
coordinatorLayout?.showActionErrorIfNeeded(result) coordinatorLayout?.showActionErrorIfNeeded(result)
} }
private fun entryValidatedForSave(actionTask: String, entry: Entry) { private fun entryValidatedForSave(entry: Entry) {
onValidateSpecialMode() onValidateSpecialMode()
finishForEntryResult(actionTask, entry) finishForEntryResult(entry)
} }
private fun entryValidatedForKeyboardSelection(database: Database, actionTask: String, entry: Entry) { private fun entryValidatedForKeyboardSelection(database: Database, entry: Entry) {
// Populate Magikeyboard with entry // Populate Magikeyboard with entry
populateKeyboardAndMoveAppToBackground(this, populateKeyboardAndMoveAppToBackground(this,
entry.getEntryInfo(database), entry.getEntryInfo(database),
intent) intent)
onValidateSpecialMode() onValidateSpecialMode()
// Don't keep activity history for entry edition // Don't keep activity history for entry edition
finishForEntryResult(actionTask, entry) finishForEntryResult(entry)
} }
private fun entryValidatedForAutofillSelection(database: Database, entry: Entry) { private fun entryValidatedForAutofillSelection(database: Database, entry: Entry) {
@@ -430,9 +448,9 @@ class EntryEditActivity : DatabaseLockActivity(),
onValidateSpecialMode() onValidateSpecialMode()
} }
private fun entryValidatedForAutofillRegistration(actionTask: String, entry: Entry) { private fun entryValidatedForAutofillRegistration(entry: Entry) {
onValidateSpecialMode() onValidateSpecialMode()
finishForEntryResult(actionTask, entry) finishForEntryResult(entry)
} }
override fun onResume() { override fun onResume() {
@@ -712,21 +730,14 @@ class EntryEditActivity : DatabaseLockActivity(),
} }
} }
private fun finishForEntryResult(actionTask: String, entry: Entry) { private fun finishForEntryResult(entry: Entry) {
// Assign entry callback as a result // Assign entry callback as a result
try { try {
val bundle = Bundle() val bundle = Bundle()
val intentEntry = Intent() val intentEntry = Intent()
bundle.putParcelable(ADD_OR_UPDATE_ENTRY_KEY, entry.nodeId) bundle.putParcelable(ADD_OR_UPDATE_ENTRY_KEY, entry.nodeId)
intentEntry.putExtras(bundle) intentEntry.putExtras(bundle)
when (actionTask) { setResult(ADD_OR_UPDATE_ENTRY_RESULT_CODE, intentEntry)
ACTION_DATABASE_CREATE_ENTRY_TASK -> {
setResult(ADD_ENTRY_RESULT_CODE, intentEntry)
}
ACTION_DATABASE_UPDATE_ENTRY_TASK -> {
setResult(UPDATE_ENTRY_RESULT_CODE, intentEntry)
}
}
super.finish() super.finish()
} catch (e: Exception) { } catch (e: Exception) {
// Exception when parcelable can't be done // Exception when parcelable can't be done
@@ -743,8 +754,7 @@ class EntryEditActivity : DatabaseLockActivity(),
const val KEY_PARENT = "parent" const val KEY_PARENT = "parent"
// Keys for callback // Keys for callback
const val ADD_ENTRY_RESULT_CODE = 31 const val ADD_OR_UPDATE_ENTRY_RESULT_CODE = 31
const val UPDATE_ENTRY_RESULT_CODE = 32
const val ADD_OR_UPDATE_ENTRY_REQUEST_CODE = 7129 const val ADD_OR_UPDATE_ENTRY_REQUEST_CODE = 7129
const val ADD_OR_UPDATE_ENTRY_KEY = "ADD_OR_UPDATE_ENTRY_KEY" const val ADD_OR_UPDATE_ENTRY_KEY = "ADD_OR_UPDATE_ENTRY_KEY"

View File

@@ -623,9 +623,8 @@ class GroupActivity : DatabaseLockActivity(),
&& PreferencesUtil.isKeyboardSaveSearchInfoEnable(this@GroupActivity) && PreferencesUtil.isKeyboardSaveSearchInfoEnable(this@GroupActivity)
) { ) {
updateEntryWithSearchInfo(database, entryVersioned, searchInfo) updateEntryWithSearchInfo(database, entryVersioned, searchInfo)
} else {
entrySelectedForKeyboardSelection(database, entryVersioned)
} }
entrySelectedForKeyboardSelection(database, entryVersioned)
}, },
{ {
// Normally not append // Normally not append
@@ -639,9 +638,8 @@ class GroupActivity : DatabaseLockActivity(),
&& PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity) && PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity)
) { ) {
updateEntryWithSearchInfo(database, entryVersioned, searchInfo) updateEntryWithSearchInfo(database, entryVersioned, searchInfo)
} else {
entrySelectedForAutofillSelection(database, entryVersioned)
} }
entrySelectedForAutofillSelection(database, entryVersioned)
}, },
{ registerInfo -> { registerInfo ->
if (!database.isReadOnly) if (!database.isReadOnly)

View File

@@ -406,8 +406,7 @@ class GroupFragment : DatabaseFragment(), SortDialogFragment.SortSelectionListen
when (requestCode) { when (requestCode) {
EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE -> { EntryEditActivity.ADD_OR_UPDATE_ENTRY_REQUEST_CODE -> {
if (resultCode == EntryEditActivity.ADD_ENTRY_RESULT_CODE if (resultCode == EntryEditActivity.ADD_OR_UPDATE_ENTRY_RESULT_CODE) {
|| resultCode == EntryEditActivity.UPDATE_ENTRY_RESULT_CODE) {
data?.getParcelableExtra<NodeId<UUID>>(EntryEditActivity.ADD_OR_UPDATE_ENTRY_KEY)?.let { data?.getParcelableExtra<NodeId<UUID>>(EntryEditActivity.ADD_OR_UPDATE_ENTRY_KEY)?.let {
// Simply refresh the list // Simply refresh the list
rebuildList() rebuildList()

View File

@@ -2,4 +2,4 @@
* Allow to manually select RecycleBin group and Templates group #191 * Allow to manually select RecycleBin group and Templates group #191
* Fix timeout in dialogs #716 * Fix timeout in dialogs #716
* Check URI permissions #626 * Check URI permissions #626
* Small changes #1035 #1043 * Small changes #1035 #1043 #942

View File

@@ -2,4 +2,4 @@
* Sélection manuelle des groupes de la corbeille et des templates #191 * Sélection manuelle des groupes de la corbeille et des templates #191
* Correction du délai d'expiration dans les dialogues #716 * Correction du délai d'expiration dans les dialogues #716
* Vérification des permissions URI #626 * Vérification des permissions URI #626
* Petits changements #1035 #1043 * Petits changements #1035 #1043 #942