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
* Fix timeout in dialogs #716
* Check URI permissions #626
* Small changes #1035 #1043
* Small changes #1035 #1043 #942
KeePassDX(2.10.5)
* Increase the saving speed of database #1028

View File

@@ -424,7 +424,7 @@ class EntryActivity : DatabaseLockActivity() {
// Transit data in previous Activity after an update
Intent().apply {
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()
}

View File

@@ -267,6 +267,24 @@ class EntryEditActivity : DatabaseLockActivity(),
} ?: run {
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,
{
// Finish naturally
finishForEntryResult(actionTask, entry)
finishForEntryResult(entry)
},
{
// Nothing when search retrieved
},
{
entryValidatedForSave(actionTask, entry)
entryValidatedForSave(entry)
},
{
entryValidatedForKeyboardSelection(database, actionTask, entry)
entryValidatedForKeyboardSelection(database, entry)
},
{ _, _ ->
entryValidatedForAutofillSelection(database, entry)
},
{
entryValidatedForAutofillRegistration(actionTask, entry)
entryValidatedForAutofillRegistration(entry)
}
)
}
@@ -405,19 +423,19 @@ class EntryEditActivity : DatabaseLockActivity(),
coordinatorLayout?.showActionErrorIfNeeded(result)
}
private fun entryValidatedForSave(actionTask: String, entry: Entry) {
private fun entryValidatedForSave(entry: Entry) {
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
populateKeyboardAndMoveAppToBackground(this,
entry.getEntryInfo(database),
intent)
onValidateSpecialMode()
// Don't keep activity history for entry edition
finishForEntryResult(actionTask, entry)
finishForEntryResult(entry)
}
private fun entryValidatedForAutofillSelection(database: Database, entry: Entry) {
@@ -430,9 +448,9 @@ class EntryEditActivity : DatabaseLockActivity(),
onValidateSpecialMode()
}
private fun entryValidatedForAutofillRegistration(actionTask: String, entry: Entry) {
private fun entryValidatedForAutofillRegistration(entry: Entry) {
onValidateSpecialMode()
finishForEntryResult(actionTask, entry)
finishForEntryResult(entry)
}
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
try {
val bundle = Bundle()
val intentEntry = Intent()
bundle.putParcelable(ADD_OR_UPDATE_ENTRY_KEY, entry.nodeId)
intentEntry.putExtras(bundle)
when (actionTask) {
ACTION_DATABASE_CREATE_ENTRY_TASK -> {
setResult(ADD_ENTRY_RESULT_CODE, intentEntry)
}
ACTION_DATABASE_UPDATE_ENTRY_TASK -> {
setResult(UPDATE_ENTRY_RESULT_CODE, intentEntry)
}
}
setResult(ADD_OR_UPDATE_ENTRY_RESULT_CODE, intentEntry)
super.finish()
} catch (e: Exception) {
// Exception when parcelable can't be done
@@ -743,8 +754,7 @@ class EntryEditActivity : DatabaseLockActivity(),
const val KEY_PARENT = "parent"
// Keys for callback
const val ADD_ENTRY_RESULT_CODE = 31
const val UPDATE_ENTRY_RESULT_CODE = 32
const val ADD_OR_UPDATE_ENTRY_RESULT_CODE = 31
const val ADD_OR_UPDATE_ENTRY_REQUEST_CODE = 7129
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)
) {
updateEntryWithSearchInfo(database, entryVersioned, searchInfo)
} else {
entrySelectedForKeyboardSelection(database, entryVersioned)
}
entrySelectedForKeyboardSelection(database, entryVersioned)
},
{
// Normally not append
@@ -639,9 +638,8 @@ class GroupActivity : DatabaseLockActivity(),
&& PreferencesUtil.isAutofillSaveSearchInfoEnable(this@GroupActivity)
) {
updateEntryWithSearchInfo(database, entryVersioned, searchInfo)
} else {
entrySelectedForAutofillSelection(database, entryVersioned)
}
entrySelectedForAutofillSelection(database, entryVersioned)
},
{ registerInfo ->
if (!database.isReadOnly)

View File

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

View File

@@ -2,4 +2,4 @@
* Allow to manually select RecycleBin group and Templates group #191
* Fix timeout in dialogs #716
* 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
* Correction du délai d'expiration dans les dialogues #716
* Vérification des permissions URI #626
* Petits changements #1035 #1043
* Petits changements #1035 #1043 #942