aboutsummaryrefslogtreecommitdiffstats
path: root/format/common
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-11-04 18:51:35 +0100
committerDanilo M. <danix@danix.xyz>2026-11-04 18:51:35 +0100
commitba2a60a14717fd7c82cd2c4b1778673d1bb6388f (patch)
tree45fc389cbafedcfef0f88ae8b7e789af39690c84 /format/common
parent0ad0b1ca6a7f7fa814a92dd6eaf9da88948ee377 (diff)
parent136ee43d6080da288afae8ec133727962ea60640 (diff)
downloadHardenedPass-ba2a60a14717fd7c82cd2c4b1778673d1bb6388f.tar.gz
HardenedPass-ba2a60a14717fd7c82cd2c4b1778673d1bb6388f.zip
Merge branch 'compose': Compose UI overhaul
Every screen moves from XML layouts, Views and Fragments to Jetpack Compose with Material 3, in one MainActivity with a NavHost: the list with breadcrumbs, search, pull to sync and multi-select; the entry view with OTP countdown; the editor with generator sheet and folder picker; setup (welcome, git server and clone, SSH key, PGP keys); settings, git config, commit log and proxy; and the autofill picker, publisher warning and decryption prompts. LaunchActivity stays the only exported activity. Fixes found on the way reach master with it, among them symlink-safe deletes, the proxy user name, screen lock gated switches, the Android 14 app lock and screen lock prompts, and the autofill passphrase cache rule. The View-era dependencies and view binding are gone; Material Components (Views) stays for the git dialogs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'format/common')
-rw-r--r--format/common/src/main/kotlin/app/passwordstore/data/passfile/PasswordEntry.kt2
-rw-r--r--format/common/src/main/kotlin/app/passwordstore/data/passfile/Totp.kt8
-rw-r--r--format/common/src/test/kotlin/app/passwordstore/data/passfile/PasswordEntryTest.kt1
3 files changed, 8 insertions, 3 deletions
diff --git a/format/common/src/main/kotlin/app/passwordstore/data/passfile/PasswordEntry.kt b/format/common/src/main/kotlin/app/passwordstore/data/passfile/PasswordEntry.kt
index f0009dcf..1995342e 100644
--- a/format/common/src/main/kotlin/app/passwordstore/data/passfile/PasswordEntry.kt
+++ b/format/common/src/main/kotlin/app/passwordstore/data/passfile/PasswordEntry.kt
@@ -224,7 +224,7 @@ constructor(
digits,
issuer,
)
- .mapBoth({ code -> Ok(Totp(code, remainingTime)) }, ::Err)
+ .mapBoth({ code -> Ok(Totp(code, remainingTime, totpPeriod.seconds)) }, ::Err)
}
@AssistedFactory
diff --git a/format/common/src/main/kotlin/app/passwordstore/data/passfile/Totp.kt b/format/common/src/main/kotlin/app/passwordstore/data/passfile/Totp.kt
index 5e98ecd4..a26f03d9 100644
--- a/format/common/src/main/kotlin/app/passwordstore/data/passfile/Totp.kt
+++ b/format/common/src/main/kotlin/app/passwordstore/data/passfile/Totp.kt
@@ -7,5 +7,9 @@ package app.passwordstore.data.passfile
import kotlin.time.Duration
-/** Holder for a TOTP secret and the duration for which it is valid. */
-public data class Totp(public val value: String, public val remainingTime: Duration)
+/** A TOTP code, how long it stays valid, and the full period it was generated for. */
+public data class Totp(
+ public val value: String,
+ public val remainingTime: Duration,
+ public val period: Duration,
+)
diff --git a/format/common/src/test/kotlin/app/passwordstore/data/passfile/PasswordEntryTest.kt b/format/common/src/test/kotlin/app/passwordstore/data/passfile/PasswordEntryTest.kt
index 4efb140b..b7d41fd1 100644
--- a/format/common/src/test/kotlin/app/passwordstore/data/passfile/PasswordEntryTest.kt
+++ b/format/common/src/test/kotlin/app/passwordstore/data/passfile/PasswordEntryTest.kt
@@ -134,6 +134,7 @@ class PasswordEntryTest {
val otp = expectMostRecentItem()
assertEquals("818800", otp.value)
assertEquals(30.seconds, otp.remainingTime)
+ assertEquals(30.seconds, otp.period)
cancelAndIgnoreRemainingEvents()
}
}