00d727da4137

test: Pin secure secret surfaces (v2.3.53)

- Apply SecureFlagEffect to entry creation/editing - Add static coverage for known FLAG_SECURE secret surfaces - Document remaining device screenshot QA

time
2026-06-26 14:24 UTC · 4 months ago
machine
koh2
parent
cfd8359d1612
3 files app/build.gradle+2 −2app/src/main/java/com/peachpasswords/ui/vault/EntryEditScreen.kt+2 −0app/src/test/java/com/peachpasswords/security/SecureFlagCoverageTest.kt+28 −0
app/build.gradle+2 −2
@@ -16,8 +16,8 @@1616         applicationId "com.peachpasswords"1717         minSdk 261818         targetSdk 3519-        versionCode 23520020-        versionName "2.3.52"19+        versionCode 23530020+        versionName "2.3.53"2121 2222         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"2323         vectorDrawables {

view file

app/src/main/java/com/peachpasswords/ui/vault/EntryEditScreen.kt+2 −0
@@ -45,6 +45,7 @@4545 import androidx.compose.runtime.collectAsState4646 import androidx.hilt.navigation.compose.hiltViewModel4747 import com.peachpasswords.ui.components.CopyButton48+import com.peachpasswords.ui.components.SecureFlagEffect4849 import com.peachpasswords.ui.theme.LocalPeachAccent4950 import com.peachpasswords.ui.theme.peachColors5051 import com.peachpasswords.ui.theme.PeachMotion@@ -59,6 +60,7 @@5960     onOpenNote: (String) -> Unit = {},6061     vm: EntryEditViewModel = hiltViewModel(),6162 ) {63+    SecureFlagEffect()6264     val f by vm.form.collectAsState()6365     val usernameSuggestions by vm.usernameSuggestions.collectAsState()6466     val emailSuggestions by vm.emailSuggestions.collectAsState()

view file

app/src/test/java/com/peachpasswords/security/SecureFlagCoverageTest.kt+28 −0
@@ -0,0 +1,28 @@1+package com.peachpasswords.security2+3+import java.io.File4+import org.junit.Assert.assertTrue5+import org.junit.Test6+7+class SecureFlagCoverageTest {8+    @Test fun secret_surfaces_keep_flag_secure_coverage() {9+        val protectedScreens = listOf(10+            "app/src/main/java/com/peachpasswords/ui/vault/EntryDetailScreen.kt",11+            "app/src/main/java/com/peachpasswords/ui/vault/EntryEditScreen.kt",12+            "app/src/main/java/com/peachpasswords/ui/vault/NotesModeScreen.kt",13+            "app/src/main/java/com/peachpasswords/ui/vault/ExportScreen.kt",14+            "app/src/main/java/com/peachpasswords/ui/vault/RecoveryWordsScreen.kt",15+            "app/src/main/java/com/peachpasswords/ui/recovery/RecoveryWordEntryScreen.kt",16+            "app/src/main/java/com/peachpasswords/ui/codex/CodexGenerateScreen.kt",17+        )18+19+        protectedScreens.forEach { relativePath ->20+            val file = File(relativePath).takeIf { it.exists() } ?: File("../$relativePath")21+            val source = file.readText()22+            assertTrue(23+                "$relativePath must protect screenshots while visible",24+                source.contains("SecureFlagEffect()") || source.contains("WindowManager.LayoutParams.FLAG_SECURE"),25+            )26+        }27+    }28+}

view file