diff options
author | Aditya Wasan <adityawasan55@gmail.com> | 2022-09-07 17:49:08 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-07 21:49:08 +0000 |
commit | 244fd92f8b59aeca608253e87bb7a7076ca4a960 (patch) | |
tree | 6861ca2fcc466983600cd296ae6096eca70e1e87 | |
parent | e5f02a3aca3d85035b80047021a4e0ee0691d3fc (diff) |
Use `GENERAL_SHOW_TIME` for decryption screen timeout (#2107)
* feat(app): use `GENERAL_SHOW_TIME` for decryption screen as well
Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
* feat: update timeout to 60 seconds
Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
* refactor(app): use constant instead of using a magic number
Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
* Add changelog entry
Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | app/src/main/java/app/passwordstore/ui/crypto/BasePgpActivity.kt | 5 | ||||
-rw-r--r-- | app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt | 15 | ||||
-rw-r--r-- | app/src/main/java/app/passwordstore/util/settings/Constants.kt | 5 | ||||
-rw-r--r-- | detekt-baselines/app.xml | 1 | ||||
-rw-r--r-- | detekt-baselines/crypto-pgpainless.xml | 1 |
6 files changed, 21 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index a75848bb..dd0a5d68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ All notable changes to this project will be documented in this file. - Add the ability to run garbage collection on the internal Git repository - Introduce crash reporting backed by Sentry - TOTP field now shows the remaining time for which it is valid +- Allow customizing the timeout for decrypted password screen ### Fixed diff --git a/app/src/main/java/app/passwordstore/ui/crypto/BasePgpActivity.kt b/app/src/main/java/app/passwordstore/ui/crypto/BasePgpActivity.kt index c769e334..f2778e2d 100644 --- a/app/src/main/java/app/passwordstore/ui/crypto/BasePgpActivity.kt +++ b/app/src/main/java/app/passwordstore/ui/crypto/BasePgpActivity.kt @@ -22,6 +22,7 @@ import app.passwordstore.util.extensions.getString import app.passwordstore.util.extensions.snackbar import app.passwordstore.util.extensions.unsafeLazy import app.passwordstore.util.services.ClipboardService +import app.passwordstore.util.settings.Constants import app.passwordstore.util.settings.PreferenceKeys import com.google.android.material.snackbar.Snackbar import dagger.hilt.android.AndroidEntryPoint @@ -87,7 +88,9 @@ open class BasePgpActivity : AppCompatActivity() { fun copyPasswordToClipboard(password: String?) { copyTextToClipboard(password) - val clearAfter = settings.getString(PreferenceKeys.GENERAL_SHOW_TIME)?.toIntOrNull() ?: 45 + val clearAfter = + settings.getString(PreferenceKeys.GENERAL_SHOW_TIME)?.toIntOrNull() + ?: Constants.DEFAULT_DECRYPTION_TIMEOUT if (clearAfter != 0) { val service = diff --git a/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt b/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt index fa37f501..dfe9f8bc 100644 --- a/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt +++ b/app/src/main/java/app/passwordstore/ui/crypto/DecryptActivity.kt @@ -16,9 +16,11 @@ import app.passwordstore.data.passfile.PasswordEntry import app.passwordstore.data.password.FieldItem import app.passwordstore.databinding.DecryptLayoutBinding import app.passwordstore.ui.adapters.FieldItemAdapter +import app.passwordstore.util.extensions.getString import app.passwordstore.util.extensions.isErr import app.passwordstore.util.extensions.unsafeLazy import app.passwordstore.util.extensions.viewBinding +import app.passwordstore.util.settings.Constants import app.passwordstore.util.settings.PreferenceKeys import com.github.michaelbull.result.runCatching import com.github.michaelbull.result.unwrapError @@ -91,13 +93,18 @@ class DecryptActivity : BasePgpActivity() { } /** - * Automatically finishes the activity 60 seconds after decryption succeeded to prevent - * information leaks from stale activities. + * Automatically finishes the activity after [PreferenceKeys.GENERAL_SHOW_TIME] seconds decryption + * succeeded to prevent information leaks from stale activities. */ private fun startAutoDismissTimer() { lifecycleScope.launch { - delay(60.seconds) - finish() + val timeout = + settings.getString(PreferenceKeys.GENERAL_SHOW_TIME)?.toIntOrNull() + ?: Constants.DEFAULT_DECRYPTION_TIMEOUT + if (timeout != 0) { + delay(timeout.seconds) + finish() + } } } diff --git a/app/src/main/java/app/passwordstore/util/settings/Constants.kt b/app/src/main/java/app/passwordstore/util/settings/Constants.kt new file mode 100644 index 00000000..d843500f --- /dev/null +++ b/app/src/main/java/app/passwordstore/util/settings/Constants.kt @@ -0,0 +1,5 @@ +package app.passwordstore.util.settings + +object Constants { + const val DEFAULT_DECRYPTION_TIMEOUT = 60 +} diff --git a/detekt-baselines/app.xml b/detekt-baselines/app.xml index a82c325e..cbbe4a17 100644 --- a/detekt-baselines/app.xml +++ b/detekt-baselines/app.xml @@ -35,7 +35,6 @@ <ID>LongMethod:RepositorySettings.kt$RepositorySettings$override fun provideSettings(builder: PreferenceScreen.Builder)</ID> <ID>LoopWithTooManyJumpStatements:AutofillMatcher.kt$AutofillMatcher.Companion$for ((key, value) in prefs.all) { if (!key.startsWith(PREFERENCE_PREFIX_MATCHES)) continue // We know that preferences starting with `PREFERENCE_PREFIX_MATCHES` were // created with `putStringSet`. @Suppress("UNCHECKED_CAST") val oldMatches = value as? Set<String> if (oldMatches == null) { logcat(WARN) { "Failed to read matches for $key" } continue } // Delete all matches for file locations that are going to be overwritten, then // transfer matches over to the files at their new locations. val newMatches = oldMatches .asSequence() .minus(deletePathList) .minus(oldNewPathMap.values) .map { match -> val newPath = oldNewPathMap[match] ?: return@map match logcat { "Updating match for $key: $match --> $newPath" } newPath } .toSet() if (newMatches != oldMatches) prefs.edit { putStringSet(key, newMatches) } }</ID> <ID>LoopWithTooManyJumpStatements:ErrorMessages.kt$ErrorMessages$while (cause.cause != null) { if (cause is GitException) break val nextCause = cause.cause!! if (nextCause is RemoteException) break cause = nextCause }</ID> - <ID>MagicNumber:BasePgpActivity.kt$BasePgpActivity$45</ID> <ID>MagicNumber:ClipboardService.kt$ClipboardService$1000</ID> <ID>MagicNumber:ClipboardService.kt$ClipboardService$1000L</ID> <ID>MagicNumber:ClipboardService.kt$ClipboardService$45</ID> diff --git a/detekt-baselines/crypto-pgpainless.xml b/detekt-baselines/crypto-pgpainless.xml index 5f6cad27..0276df1b 100644 --- a/detekt-baselines/crypto-pgpainless.xml +++ b/detekt-baselines/crypto-pgpainless.xml @@ -10,6 +10,5 @@ <ID>MagicNumber:GpgIdentifier.kt$GpgIdentifier.KeyId$8</ID> <ID>NestedBlockDepth:GpgIdentifier.kt$GpgIdentifier.Companion$private fun splitUserId(userId: String): String?</ID> <ID>ReturnCount:GpgIdentifier.kt$GpgIdentifier.Companion$public fun fromString(identifier: String): GpgIdentifier?</ID> - <ID>ReturnCount:KeyUtils.kt$KeyUtils$public fun tryParseKeyring(key: PGPKey): PGPKeyRing?</ID> </CurrentIssues> </SmellBaseline> |