Delete My Data, surfaced and irreversible #36
Labels
No Label
P0
P1
P2
release-blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: null/Privacy-Period-Tracker#36
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The deletion works and no user can reach it.
What is true now
CycleRepository.deleteAllHealthData()exists atcore/data/src/main/kotlin/dev/privacyllc/period/core/data/CycleRepository.kt:250and delegates todb.deleteEverything(). It is covered by an instrumented test incore/data/src/androidTest/.../PeriodCrudTest.kt. Nothing in the UI calls it.What it costs
§45 requires Delete My Data to be clear and irreversible after confirmation, and the milestone lands only when it "actually deletes". Most of the work is done; what is missing is the part the user touches.
What to do
A Privacy & Security row, a confirmation that states plainly what is about to happen and cannot be dismissed by accident, and then the existing call.
Traps
core/datastoreis deliberately a separate store from the cycle database precisely so that wiping health data cannot silently reset a notification-privacy setting the user chose — a person who wipes their history and then gets a Direct-mode reminder has been failed twice. Delete health data; leaveUserPreferencesalone, or ask separately.Why filed and not fixed
The data-layer half is done; the surface needs the Settings screen, and the confirmation wording is copy that
PRODUCT_PLAN.mdowns.Verify: The Privacy & Security row deletes every period, spotting and prediction record after an explicit confirmation, with no undo; the user's notification-privacy setting survives it; and re-opening the app shows the first-run empty state rather than a crash. Driven by hand, and
PeriodCrudTeststill passes.Shipped in
8807951. SettingsScreen.kt has a Privacy & Security section whose confirmation states what is erased and what is kept, with no undo; PrivacyViewModel calls the existing CycleRepository.deleteAllHealthData(). PrivacyViewModelTest covers six cases including a double-tap while a delete is running. Driven on PeriodMinSdk26: set notification privacy to Maximum, deleted, and the setting survived — which is the claim the dialog makes. Today renders its empty state afterwards without crashing. Deliberately does NOT cancel the reminder schedule: ReminderWorker maps NoData to no decision, and cancelling would leave reminders off until the user next toggled a setting. 194 tests pass, ./gradlew check clean.