diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt index b817e9f59..04f611939 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt @@ -70,6 +70,13 @@ class Database { val drawFactory = IconDrawableFactory() var loaded = false + set(value) { + field = value + loadTimestamp = if (field) System.currentTimeMillis() else null + } + + var loadTimestamp: Long? = null + private set val iconFactory: IconImageFactory get() { diff --git a/app/src/main/java/com/kunzisoft/keepass/magikeyboard/MagikIME.kt b/app/src/main/java/com/kunzisoft/keepass/magikeyboard/MagikIME.kt index 2eabbca78..e639e2621 100644 --- a/app/src/main/java/com/kunzisoft/keepass/magikeyboard/MagikIME.kt +++ b/app/src/main/java/com/kunzisoft/keepass/magikeyboard/MagikIME.kt @@ -108,8 +108,17 @@ class MagikIME : InputMethodService(), KeyboardView.OnKeyboardActionListener { val closeView = popupFieldsView.findViewById(R.id.keyboard_popup_close) closeView.setOnClickListener { popupCustomKeys?.dismiss() } - if (!Database.getInstance().loaded) + // Remove entry info if the database is not loaded + // or if entry info timestamp is before database loaded timestamp + val database = Database.getInstance() + val databaseTime = database.loadTimestamp + val entryTime = entryInfoTimestamp + if (!database.loaded + || databaseTime == null + || entryTime == null + || entryTime < databaseTime) { removeEntryInfo() + } assignKeyboardView() keyboardView?.setOnKeyboardActionListener(this) keyboardView?.isPreviewEnabled = false @@ -321,10 +330,13 @@ class MagikIME : InputMethodService(), KeyboardView.OnKeyboardActionListener { private const val KEY_URL = 520 private const val KEY_FIELDS = 530 + // TODO Retrieve entry info from id and service when database is open private var entryInfoKey: EntryInfo? = null + private var entryInfoTimestamp: Long? = null private fun removeEntryInfo() { entryInfoKey = null + entryInfoTimestamp = null } fun removeEntry(context: Context) { @@ -334,6 +346,7 @@ class MagikIME : InputMethodService(), KeyboardView.OnKeyboardActionListener { fun addEntryAndLaunchNotificationIfAllowed(context: Context, entry: EntryInfo, toast: Boolean = false) { // Add a new entry entryInfoKey = entry + entryInfoTimestamp = System.currentTimeMillis() // Launch notification if allowed KeyboardEntryNotificationService.launchNotificationIfAllowed(context, entry, toast) }