|
| 1 | +# Issue #436: In-App Privacy Policy Link Plan |
| 2 | + |
| 3 | +## Status |
| 4 | + |
| 5 | +Externally blocked as of 2026-05-10. |
| 6 | + |
| 7 | +Issue #436 requires the final hosted privacy policy HTTPS URL. That URL is owned |
| 8 | +by prerequisite issue #435, which is still open and depends on approved privacy |
| 9 | +policy text from #434. #434 depends on backend deletion and retention truth from |
| 10 | +#439. Do not implement a placeholder URL or close #436 until those prerequisites |
| 11 | +are complete. |
| 12 | + |
| 13 | +## Parent Track Context |
| 14 | + |
| 15 | +Parent issue #464 orders the privacy/account-deletion work as: |
| 16 | + |
| 17 | +1. #438 - in-app account deletion flow: closed. |
| 18 | +2. #439 - backend account and data deletion behavior: open, manual. |
| 19 | +3. #434 - draft and approve the privacy policy: open, manual. |
| 20 | +4. #435 - host the privacy policy on a public HTTPS URL: open, manual. |
| 21 | +5. #436 - add an in-app privacy policy link: open, blocked. |
| 22 | + |
| 23 | +The next action for the track is to complete #439, then #434, then #435. Once |
| 24 | +#435 records the final URL, #436 can be implemented and verified. |
| 25 | + |
| 26 | +## Existing Repo Context |
| 27 | + |
| 28 | +- My Page/settings UI lives in `lib/presentation/my_page/my_page_screen.dart`. |
| 29 | +- The screen already has an app settings section with `_SettingTile` rows. |
| 30 | +- `url_launcher` is already declared in `pubspec.yaml`. |
| 31 | +- Localization source files are `lib/l10n/app_en.arb` and |
| 32 | + `lib/l10n/app_ko.arb`; generated files are committed under `lib/l10n/`. |
| 33 | +- Existing My Page coverage is currently focused on account deletion modal tests |
| 34 | + in `test/presentation/my_page/delete_user_modal_test.dart`; there is no full |
| 35 | + `MyPageScreen` widget test yet. |
| 36 | + |
| 37 | +## Decision-Complete Implementation Plan |
| 38 | + |
| 39 | +Use this plan after #435 provides the final public HTTPS URL: |
| 40 | + |
| 41 | +1. Add a single source of truth for the URL. |
| 42 | + - Preferred location: a small constant near other app constants, for example |
| 43 | + `lib/core/constants/legal_urls.dart`. |
| 44 | + - Store only the final `https://...` URL from #435. |
| 45 | + - Do not use staging, draft, document-edit, PDF, login-gated, or placeholder |
| 46 | + URLs. |
| 47 | + |
| 48 | +2. Add localized labels. |
| 49 | + - Add `privacyPolicy` to `lib/l10n/app_en.arb` with value |
| 50 | + `Privacy Policy`. |
| 51 | + - Add `privacyPolicy` to `lib/l10n/app_ko.arb` with value |
| 52 | + `개인정보 처리방침`. |
| 53 | + - Run `flutter gen-l10n` so `app_localizations.dart`, |
| 54 | + `app_localizations_en.dart`, and `app_localizations_ko.dart` stay in sync. |
| 55 | + |
| 56 | +3. Add the visible My Page entry. |
| 57 | + - In `lib/presentation/my_page/my_page_screen.dart`, add a `_SettingTile` |
| 58 | + for `AppLocalizations.of(context)!.privacyPolicy`. |
| 59 | + - Place it in the App Settings section unless product/design says it belongs |
| 60 | + under Account Settings. |
| 61 | + - Use `url_launcher` with `LaunchMode.externalApplication` so the link opens |
| 62 | + in a browser or system handler. |
| 63 | + - Fail gracefully if launch returns false or throws; do not crash the screen. |
| 64 | + |
| 65 | +4. Add or update widget coverage. |
| 66 | + - Add a My Page widget test if practical, or a focused testable helper if the |
| 67 | + current screen dependencies make full pumping brittle. |
| 68 | + - Verify the localized entry is visible in Korean and English. |
| 69 | + - Verify tapping the entry attempts to launch exactly the final HTTPS URL. |
| 70 | + |
| 71 | +5. Verify Android release behavior. |
| 72 | + - Run `flutter analyze`. |
| 73 | + - Run the new or updated widget test. |
| 74 | + - On an Android release-equivalent build, tap the My Page privacy policy |
| 75 | + entry and confirm it opens the final public HTTPS URL. |
| 76 | + |
| 77 | +## Acceptance Evidence To Attach To #436 Or PR |
| 78 | + |
| 79 | +- Final URL from #435. |
| 80 | +- Screenshot or recording of the My Page entry. |
| 81 | +- Android release-build result showing the URL opens. |
| 82 | +- Test command output for analyzer and relevant widget tests. |
0 commit comments