fb95dc6219e5

fix: Honor screenshot preference and align Notes chrome (v2.14.24)

time
2026-08-14 16:54 UTC · 2 months ago
machine
koh2
agent
gpt-5.6-sol
session
screenshots and notes bar width
parent
f3653a69dc9c
8 files VERSION+1 −1app/src/main/java/com/peachpasswords/MainActivity.kt+1 −1app/src/main/java/com/peachpasswords/ui/components/SecureWindowPolicy.kt+3 −1app/src/main/java/com/peachpasswords/ui/vault/EntryDeckChrome.kt+2 −2app/src/main/java/com/peachpasswords/ui/vault/EntryDetailScreen.kt+2 −1app/src/main/java/com/peachpasswords/ui/vault/EntryEditScreen.kt+1 −1app/src/main/java/com/peachpasswords/ui/vault/NotesModeScreen.kt+15 −9app/src/test/java/com/peachpasswords/security/SecureFlagCoverageTest.kt+1 −0
VERSION+1 −1
@@ -1 +1 @@1-2.14.231+2.14.24

view file

app/src/main/java/com/peachpasswords/MainActivity.kt+1 −1
@@ -115,7 +115,7 @@115115             }116116             val accent = ACCENT_COLORS[settings.accentColor] ?: DEFAULT_ACCENT117117             SideEffect {118-                if (!BuildConfig.DEBUG) {118+                if (!(BuildConfig.DEBUG && QaFlags.disableSecureCaptureForQa)) {119119                     SecureWindowPolicy.setUserSecure(window, !settings.allowScreenshots)120120                 }121121             }

view file

app/src/main/java/com/peachpasswords/ui/components/SecureWindowPolicy.kt+3 −1
@@ -17,12 +17,13 @@1717     private data class State(1818         var leases: Int = 0,1919         var userSecure: Boolean = true,20+        var userChoiceApplied: Boolean = false,2021     )2122 2223     private val states = WeakHashMap<Window, State>()2324 2425     private fun evaluate(window: Window, state: State) {25-        if (state.userSecure || state.leases > 0) {26+        if (state.userSecure || (!state.userChoiceApplied && state.leases > 0)) {2627             window.setFlags(2728                 WindowManager.LayoutParams.FLAG_SECURE,2829                 WindowManager.LayoutParams.FLAG_SECURE,@@ -37,6 +38,7 @@3738         synchronized(states) {3839             val state = states.getOrPut(window) { State() }3940             state.userSecure = secure41+            state.userChoiceApplied = true4042             evaluate(window, state)4143         }4244     }

view file

app/src/main/java/com/peachpasswords/ui/vault/EntryDeckChrome.kt+2 −2
@@ -38,9 +38,9 @@3838 import com.peachpasswords.ui.theme.peachColors3939 4040 @Composable41-internal fun PeachVaultIdentity(section: String, onHome: () -> Unit) {41+internal fun PeachVaultIdentity(section: String, modifier: Modifier = Modifier, onHome: () -> Unit) {4242     Row(43-        Modifier.fillMaxWidth().height(64.dp),43+        modifier.fillMaxWidth().height(64.dp),4444         verticalAlignment = Alignment.CenterVertically,4545     ) {4646         Box(Modifier.clickable(onClickLabel = "Open vault") { onHome() }) {

view file

app/src/main/java/com/peachpasswords/ui/vault/EntryDetailScreen.kt+2 −1
@@ -763,10 +763,11 @@763763 @Composable764764 internal fun FieldShell(765765     label: String,766+    modifier: Modifier = Modifier,766767     content: @Composable androidx.compose.foundation.layout.RowScope.() -> Unit,767768 ) {768769     Column(769-        Modifier.fillMaxWidth()770+        modifier.fillMaxWidth()770771             .padding(vertical = PeachSpacing.xs)771772             .clip(RoundedCornerShape(PeachRadius.StackCard))772773             .background(peachColors.SurfaceCard)

view file

app/src/main/java/com/peachpasswords/ui/vault/EntryEditScreen.kt+1 −1
@@ -88,7 +88,7 @@8888                 .statusBarsPadding()8989                 .padding(horizontal = PeachSpacing.xl),9090         ) {91-            PeachVaultIdentity(editTitleBarLabel(vm.isNew, f.type), onHome)91+            PeachVaultIdentity(editTitleBarLabel(vm.isNew, f.type), onHome = onHome)9292 9393             Spacer(Modifier.height(PeachSpacing.lg))9494 

view file

app/src/main/java/com/peachpasswords/ui/vault/NotesModeScreen.kt+15 −9
@@ -141,10 +141,13 @@141141             Modifier142142                 .fillMaxSize()143143                 .statusBarsPadding()144-                .padding(horizontal = PeachSpacing.lg, vertical = PeachSpacing.md),144+                .padding(vertical = PeachSpacing.md),145145         ) {146-            PeachVaultIdentity("notes") { finishNote { onNavigate(PeachNav.VaultList) } }147-            FieldShell("title") {146+            PeachVaultIdentity(147+                "notes",148+                Modifier.padding(horizontal = PeachSpacing.lg),149+            ) { finishNote { onNavigate(PeachNav.VaultList) } }150+            FieldShell("title", Modifier.padding(horizontal = PeachSpacing.lg)) {148151                     Box(Modifier.weight(1f)) {149152                         if (title.isEmpty()) {150153                             Text(@@ -189,7 +192,7 @@189192             // as the browser's own tags, so formatting survives a phone edit.190193             if (editing) {191194                 Row(192-                    Modifier.fillMaxWidth().padding(vertical = PeachSpacing.sm),195+                    Modifier.fillMaxWidth().padding(horizontal = PeachSpacing.lg, vertical = PeachSpacing.sm),193196                     horizontalArrangement = Arrangement.spacedBy(PeachSpacing.xs),194197                     verticalAlignment = Alignment.CenterVertically,195198                 ) {@@ -209,7 +212,7 @@209212             }210213 211214             // Content area.212-            Box(Modifier.weight(1f).fillMaxWidth().padding(vertical = PeachSpacing.sm)) {215+            Box(Modifier.weight(1f).fillMaxWidth().padding(horizontal = PeachSpacing.lg, vertical = PeachSpacing.sm)) {213216                 if (body.text.isEmpty()) {214217                     Text(215218                         "Start writing…",@@ -273,7 +276,7 @@273276             Modifier274277                 .fillMaxSize()275278                 .statusBarsPadding()276-                .padding(horizontal = PeachSpacing.lg, vertical = PeachSpacing.md),279+                .padding(vertical = PeachSpacing.md),277280         ) {278281             if (isMultiSelect) {279282                 MultiSelectTopBar(@@ -284,7 +287,7 @@284287                 )285288             } else if (searchVisible) {286289                 Surface(287-                    modifier = Modifier.fillMaxWidth(),290+                    modifier = Modifier.fillMaxWidth().padding(horizontal = PeachSpacing.lg),288291                     color = peachColors.S1,289292                     shape = RoundedCornerShape(PeachSpacing.lg),290293                     tonalElevation = 1.dp,@@ -329,11 +332,14 @@329332                         )330333                     }331334                 }332-            } else PeachVaultIdentity("notes") { onNavigate(PeachNav.VaultList) }335+            } else PeachVaultIdentity(336+                "notes",337+                Modifier.padding(horizontal = PeachSpacing.lg),338+            ) { onNavigate(PeachNav.VaultList) }333339             Spacer(Modifier.size(PeachSpacing.lg))334340 335341             LazyColumn(336-                Modifier.weight(1f),342+                Modifier.weight(1f).padding(horizontal = PeachSpacing.lg),337343                 verticalArrangement = Arrangement.spacedBy(PeachSpacing.sm),338344             ) {339345                 if (filtered.isEmpty()) {

view file

app/src/test/java/com/peachpasswords/security/SecureFlagCoverageTest.kt+1 −0
@@ -78,6 +78,7 @@7878         assertTrue(source.contains("setUserSecure"))7979         assertTrue(source.contains("acquire"))8080         assertTrue(source.contains("release"))81+        assertTrue(source.contains("userChoiceApplied"))8182         assertTrue(source.contains("leases"))8283         assertTrue(source.contains("clearFlags"))8384         // MainActivity and secret activities delegate to the owner; they must

view file