diff --git a/CHANGELOG b/CHANGELOG index bf730d2e2..d2b8abcb5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ KeePassDX(3.0.0) * Add / Manage dynamic templates #191 * Manually select RecycleBin group and Templates group #191 * Small changes #1035 + * Fix timeout in dialogs #716 KeePassDX(2.10.5) * Increase the saving speed of database #1028 diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/AssignMasterKeyDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/AssignMasterKeyDialogFragment.kt index 44c9f482e..13c3a9d60 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/AssignMasterKeyDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/AssignMasterKeyDialogFragment.kt @@ -32,7 +32,6 @@ import android.view.View import android.widget.CompoundButton import android.widget.TextView import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment import com.google.android.material.textfield.TextInputLayout import com.kunzisoft.keepass.R import com.kunzisoft.keepass.activities.helpers.ExternalFileHelper @@ -41,7 +40,7 @@ import com.kunzisoft.keepass.model.MainCredential import com.kunzisoft.keepass.utils.UriUtil import com.kunzisoft.keepass.view.KeyFileSelectionView -class AssignMasterKeyDialogFragment : DialogFragment() { +class AssignMasterKeyDialogFragment : DatabaseDialogFragment() { private var mMasterPassword: String? = null private var mKeyFile: Uri? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatabaseChangedDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatabaseChangedDialogFragment.kt index 6a83f0df7..e4bb7915c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatabaseChangedDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatabaseChangedDialogFragment.kt @@ -23,12 +23,11 @@ import android.app.Dialog import android.os.Bundle import android.text.SpannableStringBuilder import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment import com.kunzisoft.keepass.R import com.kunzisoft.keepass.model.SnapFileDatabaseInfo -class DatabaseChangedDialogFragment : DialogFragment() { +class DatabaseChangedDialogFragment : DatabaseDialogFragment() { var actionDatabaseListener: ActionDatabaseChangedListener? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/DatabaseDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatabaseDialogFragment.kt similarity index 61% rename from app/src/main/java/com/kunzisoft/keepass/activities/fragments/DatabaseDialogFragment.kt rename to app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatabaseDialogFragment.kt index 3936d6a0c..9aad54e1e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/DatabaseDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatabaseDialogFragment.kt @@ -1,7 +1,6 @@ -package com.kunzisoft.keepass.activities.fragments +package com.kunzisoft.keepass.activities.dialogs import android.os.Bundle -import android.view.View import androidx.fragment.app.DialogFragment import androidx.fragment.app.activityViewModels import com.kunzisoft.keepass.activities.DatabaseRetrieval @@ -20,14 +19,23 @@ abstract class DatabaseDialogFragment : DialogFragment(), DatabaseRetrieval { mDatabaseViewModel.database.observe(this) { database -> this.mDatabase = database + resetAppTimeoutWhenViewFocusedOrChanged() onDatabaseRetrieved(database) } + + mDatabaseViewModel.actionFinished.observe(this) { result -> + onDatabaseActionFinished(result.database, result.actionTask, result.result) + } } - protected fun resetAppTimeoutWhenViewFocusedOrChanged(view: View?) { - context?.let { - view?.resetAppTimeoutWhenViewFocusedOrChanged(it, mDatabase?.loaded) - } + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + + resetAppTimeoutWhenViewFocusedOrChanged() + } + + override fun onDatabaseRetrieved(database: Database?) { + // Can be overridden by a subclass } override fun onDatabaseActionFinished( @@ -37,4 +45,10 @@ abstract class DatabaseDialogFragment : DialogFragment(), DatabaseRetrieval { ) { // Can be overridden by a subclass } + + private fun resetAppTimeoutWhenViewFocusedOrChanged() { + context?.let { + dialog?.window?.decorView?.resetAppTimeoutWhenViewFocusedOrChanged(it, mDatabase?.loaded) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatePickerFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatePickerFragment.kt index 99abb4434..0581932ac 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatePickerFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DatePickerFragment.kt @@ -4,9 +4,8 @@ import android.app.DatePickerDialog import android.app.Dialog import android.content.Context import android.os.Bundle -import androidx.fragment.app.DialogFragment -class DatePickerFragment : DialogFragment() { +class DatePickerFragment : DatabaseDialogFragment() { private var mDefaultYear: Int = 2000 private var mDefaultMonth: Int = 1 diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt index 077271fe8..2c03c412a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/DeleteNodesDialogFragment.kt @@ -22,13 +22,12 @@ package com.kunzisoft.keepass.activities.dialogs import android.app.Dialog import android.os.Bundle import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment import androidx.fragment.app.activityViewModels import com.kunzisoft.keepass.R import com.kunzisoft.keepass.database.element.node.Node import com.kunzisoft.keepass.viewmodels.NodesViewModel -class DeleteNodesDialogFragment : DialogFragment() { +class DeleteNodesDialogFragment : DatabaseDialogFragment() { private var mNodesToDelete: List = listOf() private val mNodesViewModel: NodesViewModel by activityViewModels() diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/EntryCustomFieldDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/EntryCustomFieldDialogFragment.kt index 1b9516d54..af186073c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/EntryCustomFieldDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/EntryCustomFieldDialogFragment.kt @@ -31,14 +31,13 @@ import android.widget.ImageView import android.widget.TextView import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment import com.google.android.material.textfield.TextInputLayout import com.kunzisoft.keepass.R -import com.kunzisoft.keepass.database.element.security.ProtectedString import com.kunzisoft.keepass.database.element.Field +import com.kunzisoft.keepass.database.element.security.ProtectedString -class EntryCustomFieldDialogFragment: DialogFragment() { +class EntryCustomFieldDialogFragment: DatabaseDialogFragment() { private var oldField: Field? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GeneratePasswordDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GeneratePasswordDialogFragment.kt index 7d0109853..1114827d8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GeneratePasswordDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GeneratePasswordDialogFragment.kt @@ -25,7 +25,6 @@ import android.os.Bundle import android.view.View import android.widget.* import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment import com.google.android.material.textfield.TextInputLayout import com.kunzisoft.keepass.R import com.kunzisoft.keepass.database.element.Field @@ -34,7 +33,7 @@ import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.timeout.ClipboardHelper import com.kunzisoft.keepass.view.applyFontVisibility -class GeneratePasswordDialogFragment : DialogFragment() { +class GeneratePasswordDialogFragment : DatabaseDialogFragment() { private var mListener: GeneratePasswordListener? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GroupEditDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GroupEditDialogFragment.kt index 08b330e0a..bb3ffe39c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GroupEditDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/GroupEditDialogFragment.kt @@ -31,7 +31,6 @@ import androidx.fragment.app.activityViewModels import com.google.android.material.textfield.TextInputLayout import com.kunzisoft.keepass.R import com.kunzisoft.keepass.activities.dialogs.GroupEditDialogFragment.EditGroupDialogAction.* -import com.kunzisoft.keepass.activities.fragments.DatabaseDialogFragment import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.DateInstant import com.kunzisoft.keepass.database.element.icon.IconImage @@ -107,6 +106,7 @@ class GroupEditDialogFragment : DatabaseDialogFragment() { } override fun onDatabaseRetrieved(database: Database?) { + super.onDatabaseRetrieved(database) mPopulateIconMethod = { imageView, icon -> database?.iconDrawableFactory?.assignDatabaseIcon(imageView, icon, mIconColor) } @@ -128,8 +128,6 @@ class GroupEditDialogFragment : DatabaseDialogFragment() { mIconColor = ta.getColor(0, Color.WHITE) ta.recycle() - resetAppTimeoutWhenViewFocusedOrChanged(root) - if (savedInstanceState != null && savedInstanceState.containsKey(KEY_ACTION_ID) && savedInstanceState.containsKey(KEY_GROUP_INFO)) { diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt index 0c6625409..82208a213 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/ReplaceAttachmentDialogFragment.kt @@ -25,14 +25,13 @@ import android.net.Uri import android.os.Bundle import android.text.SpannableStringBuilder import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment import com.kunzisoft.keepass.R import com.kunzisoft.keepass.database.element.Attachment /** * Custom Dialog to confirm big file to upload */ -class ReplaceFileDialogFragment : DialogFragment() { +class ReplaceFileDialogFragment : DatabaseDialogFragment() { private var mActionChooseListener: ActionChooseListener? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SetOTPDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SetOTPDialogFragment.kt index eb31824e8..25d4de6bb 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SetOTPDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SetOTPDialogFragment.kt @@ -31,7 +31,6 @@ import android.view.ViewGroup import android.view.inputmethod.EditorInfo import android.widget.* import androidx.appcompat.app.AlertDialog -import androidx.fragment.app.DialogFragment import com.google.android.material.textfield.TextInputLayout import com.kunzisoft.keepass.BuildConfig import com.kunzisoft.keepass.R @@ -49,7 +48,7 @@ import com.kunzisoft.keepass.otp.TokenCalculator import com.kunzisoft.keepass.utils.UriUtil import java.util.* -class SetOTPDialogFragment : DialogFragment() { +class SetOTPDialogFragment : DatabaseDialogFragment() { private var mCreateOTPElementListener: CreateOtpListener? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SortDialogFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SortDialogFragment.kt index 970af8249..45cbb9db1 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SortDialogFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/SortDialogFragment.kt @@ -22,16 +22,15 @@ package com.kunzisoft.keepass.activities.dialogs import android.app.Dialog import android.content.Context import android.os.Bundle -import androidx.annotation.IdRes -import androidx.fragment.app.DialogFragment -import androidx.appcompat.app.AlertDialog import android.view.View import android.widget.CompoundButton import android.widget.RadioGroup +import androidx.annotation.IdRes +import androidx.appcompat.app.AlertDialog import com.kunzisoft.keepass.R import com.kunzisoft.keepass.database.element.SortNodeEnum -class SortDialogFragment : DialogFragment() { +class SortDialogFragment : DatabaseDialogFragment() { private var mListener: SortSelectionListener? = null diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/TimePickerFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/TimePickerFragment.kt index 935d3f3b0..698ccd319 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/TimePickerFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/dialogs/TimePickerFragment.kt @@ -6,9 +6,8 @@ import android.app.TimePickerDialog import android.content.Context import android.os.Bundle import android.text.format.DateFormat -import androidx.fragment.app.DialogFragment -class TimePickerFragment : DialogFragment() { +class TimePickerFragment : DatabaseDialogFragment() { private var defaultHour: Int = 0 private var defaultMinute: Int = 0 diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/LockingActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/LockingActivity.kt index 5f24be153..f1e16cc9d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/legacy/LockingActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/legacy/LockingActivity.kt @@ -378,10 +378,11 @@ abstract class LockingActivity : SpecialModeActivity(), */ @SuppressLint("ClickableViewAccessibility") fun View.resetAppTimeoutWhenViewFocusedOrChanged(context: Context, databaseLoaded: Boolean?) { + // Log.d(LockingActivity.TAG, "View prepared to reset app timeout") setOnTouchListener { _, event -> when (event.action) { MotionEvent.ACTION_DOWN -> { - Log.d(LockingActivity.TAG, "View touched, try to reset app timeout") + // Log.d(LockingActivity.TAG, "View touched, try to reset app timeout") TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(context, databaseLoaded ?: false) } @@ -389,7 +390,7 @@ fun View.resetAppTimeoutWhenViewFocusedOrChanged(context: Context, databaseLoade false } setOnFocusChangeListener { _, _ -> - Log.d(LockingActivity.TAG, "View focused, try to reset app timeout") + // Log.d(LockingActivity.TAG, "View focused, try to reset app timeout") TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(context, databaseLoaded ?: false) } diff --git a/fastlane/metadata/android/en-US/changelogs/84.txt b/fastlane/metadata/android/en-US/changelogs/84.txt index 2c2fbaaab..b2bd51e0a 100644 --- a/fastlane/metadata/android/en-US/changelogs/84.txt +++ b/fastlane/metadata/android/en-US/changelogs/84.txt @@ -1,3 +1,4 @@ * Add / Manage dynamic templates #191 * Allow to manually select RecycleBin group and Templates group #191 - * Small changes #1035 \ No newline at end of file + * Small changes #1035 + * Fix timeout in dialogs #716 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/84.txt b/fastlane/metadata/android/fr-FR/changelogs/84.txt index 804f0382c..3823173c8 100644 --- a/fastlane/metadata/android/fr-FR/changelogs/84.txt +++ b/fastlane/metadata/android/fr-FR/changelogs/84.txt @@ -1,3 +1,4 @@ * Ajout / Gestion dynamique des templates #191 * Sélection manuelle des groupes de la corbeille et des templates #191 - * Petits changements #1035 \ No newline at end of file + * Petits changements #1035 + * Correction du délai d'expiration dans les dialogues #716 \ No newline at end of file