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
↓ peach-android-fb95dc62.tar.gzatlas at this save
files changed8 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 −0app/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 }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 }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() }) {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)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 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()) {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