From 7bd836636be8d34fa1c689c46092e060efb01ee5 Mon Sep 17 00:00:00 2001 From: Paul Hitt Date: Wed, 9 Sep 2026 15:32:00 -0400 Subject: [PATCH] The level picker explains itself, as it does on iOS This screen showed chips and no explanation; iOS has carried one all along, under a comment claiming both apps use the same words. They now do. The last sentence is the boundary: a level decides who can open a file, not where it can be put. Neither app stops somebody filing sensitive material somewhere low, and saying so is the honest half of android#15. Also repairs a comment the emoji sweep truncated, which left the test saying 'the -property is NOT enforced'. Co-Authored-By: Claude Opus 5 --- .../io/flamenet/messenger/app/FilesScreen.kt | 14 ++++++++++++++ .../src/test/kotlin/io/flamenet/e2e/LabelTest.kt | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/io/flamenet/messenger/app/FilesScreen.kt b/app/src/main/kotlin/io/flamenet/messenger/app/FilesScreen.kt index fa49015..2627f3e 100644 --- a/app/src/main/kotlin/io/flamenet/messenger/app/FilesScreen.kt +++ b/app/src/main/kotlin/io/flamenet/messenger/app/FilesScreen.kt @@ -580,6 +580,20 @@ private fun ColumnScope.LevelPicker( ) } } + Spacer(Modifier.height(Space.xs)) + // Word for word what iOS says under its picker. The two apps must not + // describe the same rule differently, and this screen said nothing at all. + // The last sentence is the honest boundary: neither app stops somebody + // filing sensitive material somewhere low. See android#15. + Text( + "Who can open this. A folder's level doesn't limit what you put inside " + + "it, each file keeps its own. It is sealed with the label bound in, " + + "so this is chosen now rather than changed later. It decides who can " + + "open a file, not where the file can be put.", + fontSize = 12.sp, + color = Palette.SecondaryText, + modifier = Modifier.testTag("files-level-note"), + ) } // ---- Into and out of a conversation --------------------------------------. diff --git a/engine/src/test/kotlin/io/flamenet/e2e/LabelTest.kt b/engine/src/test/kotlin/io/flamenet/e2e/LabelTest.kt index 180e6e2..0b5bde3 100644 --- a/engine/src/test/kotlin/io/flamenet/e2e/LabelTest.kt +++ b/engine/src/test/kotlin/io/flamenet/e2e/LabelTest.kt @@ -133,8 +133,9 @@ class LabelTest { // ---- Writing ---------------------------------------------------------. /** - * Writing is gated by the same range check as reading, and the -property is - * NOT enforced, on either platform. + * Writing is gated by the same range check as reading, and no-write-down is + * NOT enforced, on either platform. Mirrored by ClearanceTests on the Swift + * side; the two change together or not at all. */ @Test fun `writing uses the same range check as reading, star-property not enforced`() {