The designed Settings screen, with §36's sections #33

Closed
opened 2026-08-18 20:37:15 -05:00 by null · 1 comment
Owner

Settings is currently one screen of notification toggles that labels itself a stand-in, and it is the surface every other Batch 06 deliverable hangs off. It goes first.

What is true now

The Settings tab routes to NotificationSettingsScreenapp/src/main/kotlin/dev/privacyllc/period/navigation/PeriodApp.kt wires SETTINGS.route to it directly. Its first line reads "Batch 05 · working surface — the designed Settings screen is Batch 06", which is honest and is also the whole of the current design.

PRODUCT_PLAN.md §36 specifies six sections: Cycle, Notifications, Privacy & Security, Appearance, Premium, About.

What it costs

App lock, export, delete and the privacy promise are all §36 Privacy & Security rows. Each of them needs somewhere to live, and building four screens that each invent their own entry point is how a settings tree ends up with two ways to reach the same thing.

What to do

Build the screen as §36 structures it, with the rows for unbuilt features absent rather than disabled. A greyed-out "Export My Data" is a promise with no delivery date; a row that is not there yet is simply not there yet.

The notification rows already exist and work — move them under the Notifications section rather than rewriting them.

Traps

  • Appearance's Light/Dark/System control is Batch 08, not this batch, and the launcher-icon row under it is #31. Leave both out; §36 lists the whole tree, not this batch's slice of it.
  • Premium is Batch 07. Same reasoning.
  • The screen is reached from a bottom navigation tab, so it is a root destination — back from a sub-screen must return here rather than exiting the app.
  • Every row added here is a row TalkBack has to read in a sensible order, and TalkBack has still never been run on this app.

Why filed and not fixed

It is the first deliverable of the batch rather than a defect. Filed so the ordering is explicit: three of the issues below assume this exists.

Verify: The Settings tab shows §36's Cycle, Notifications, Privacy & Security and About sections, the existing notification toggles still work from their new home, and no row is present for a feature that is not built.

Settings is currently one screen of notification toggles that labels itself a stand-in, and it is the surface every other Batch 06 deliverable hangs off. It goes first. ## What is true now The Settings tab routes to `NotificationSettingsScreen` — `app/src/main/kotlin/dev/privacyllc/period/navigation/PeriodApp.kt` wires `SETTINGS.route` to it directly. Its first line reads *"Batch 05 · working surface — the designed Settings screen is Batch 06"*, which is honest and is also the whole of the current design. `PRODUCT_PLAN.md` §36 specifies six sections: Cycle, Notifications, Privacy & Security, Appearance, Premium, About. ## What it costs App lock, export, delete and the privacy promise are all §36 *Privacy & Security* rows. Each of them needs somewhere to live, and building four screens that each invent their own entry point is how a settings tree ends up with two ways to reach the same thing. ## What to do Build the screen as §36 structures it, with the rows for unbuilt features **absent rather than disabled**. A greyed-out "Export My Data" is a promise with no delivery date; a row that is not there yet is simply not there yet. The notification rows already exist and work — move them under the Notifications section rather than rewriting them. ## Traps - **Appearance's Light/Dark/System control is Batch 08**, not this batch, and the launcher-icon row under it is #31. Leave both out; §36 lists the whole tree, not this batch's slice of it. - **Premium is Batch 07.** Same reasoning. - The screen is reached from a bottom navigation tab, so it is a root destination — back from a sub-screen must return here rather than exiting the app. - Every row added here is a row TalkBack has to read in a sensible order, and TalkBack has still never been run on this app. ## Why filed and not fixed It is the first deliverable of the batch rather than a defect. Filed so the ordering is explicit: three of the issues below assume this exists. Verify: The Settings tab shows §36's Cycle, Notifications, Privacy & Security and About sections, the existing notification toggles still work from their new home, and no row is present for a feature that is not built.
null added this to the Batch 06 — Privacy and Security milestone 2026-08-18 20:37:15 -05:00
null added the
P1
label 2026-08-18 20:37:15 -05:00
null closed this issue 2026-08-18 20:44:18 -05:00
Author
Owner

Shipped in f43e1c2. SettingsScreen.kt is the §36 root with Notifications and About; NotificationSettingsScreen is now a child at route settings/notifications and its 'working surface' banner is gone. Driven on PeriodMinSdk26: rows expand in place, the child opens, and back returns to the root rather than exiting. Rows for unbuilt features are absent rather than disabled — the reasoning is recorded in docs/design/README.md. Also extracted the fertility disclaimer to one string resource read by Today, Calendar and About. ./gradlew check passes.

Shipped in f43e1c2. SettingsScreen.kt is the §36 root with Notifications and About; NotificationSettingsScreen is now a child at route settings/notifications and its 'working surface' banner is gone. Driven on PeriodMinSdk26: rows expand in place, the child opens, and back returns to the root rather than exiting. Rows for unbuilt features are absent rather than disabled — the reasoning is recorded in docs/design/README.md. Also extracted the fertility disclaimer to one string resource read by Today, Calendar and About. ./gradlew check passes.
Sign in to join this conversation.
No Label
P0
P1
P2
release-blocker
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: null/Privacy-Period-Tracker#33
No description provided.