# Tasks: Call recording unlock + FLAG_SECURE override (`008`/`009`) **Input**: Design docs from `/specs/008-call-rec-flag-secure/` **Prerequisites**: `plan.md`, `spec.md`, `research.md`, `data-model.md`, `contracts/`, `quickstart.md`; constitution native-ROM rules; **AXP GOLDEN / EXTENDROM call-rec model** (not Magisk modules) **Primary oracle (call-rec)**: AXP/EXTENDROM native stack — same Secure key already observed on GOLDEN LAB dump (`.local-artifacts/002-golden/…/settings/secure-*.txt` → `extendrom_call_recording=1`): | Piece | Host reference | |-------|----------------| | Apply logic | `/srv/rom/references/extendrom/er.sh` (`F_CALLREC` / unrestricted call recording) | | DO controllers | `/srv/rom/references/extendrom/config/call-rec/…/CallRecPreferenceController.java` (+ Info) | | Strings / Dialer config overlay | `/srv/rom/references/extendrom/overlays/call-rec/` | | Docs | `/srv/rom/references/axp/archive/…/knowledge/callrec/` | **FLAG_SECURE**: project-specific native DO (not AXP Pro catalog). Magisk modules are **agent-only mental aids** if ever consulted — **never** ship, install, or task-move zips into the tree. **Organization**: US1 call-rec (GOLDEN model) → US2 FLAG_SECURE → US3 packaging. **Out of scope**: Magisk/Zygisk runtime; static Dialer RRO product; per-app FLAG_SECURE lists (not planned); full AXP auto-record policy UI; `007`; GOLDEN flash; commit/MR. ## Format: `[ID] [P?] [Story] Description` - **[P]**: Can run in parallel (different files, no incomplete deps) - **[Story]**: US1…US3 from `spec.md` ## Path conventions - Meta repo: `vendor/sunfish-a16/`, `docs/`, `specs/008-call-rec-flag-secure/` - Build host: `/srv/rom/src/lineage/`, `/srv/rom/references/extendrom/`, `/srv/rom/artifacts/008-call-rec-flag-secure/` - GOLDEN settings sample (read-only): `.local-artifacts/002-golden/` --- ## Phase 1: Setup (Shared Infrastructure) **Purpose**: Artifact dirs + patch scaffolding; **no Magisk zip handling** - [x] T001 [P] Create host dirs `/srv/rom/artifacts/008-call-rec-flag-secure/` (`call-rec/`, `flag-secure/`) and `/srv/rom/logs/008-build/` (android-build writable) - [x] T002 [P] Add stub `docs/008-call-rec-flag-secure-runbook.md` (GOLDEN/ EXTENDROM call-rec map, Secure keys, LAB serial, apply order) - [x] T003 [P] Create `vendor/sunfish-a16/patches/008-call-rec-flag-secure/README.md` (idempotent apply like `005-sigspoof`; attribute EXTENDROM/`er.sh` F_CALLREC; FLAG_SECURE as native project patch) **Checkpoint**: Dirs + stubs exist --- ## Phase 2: Foundational (Blocking Prerequisites) **Purpose**: Port map from GOLDEN/EXTENDROM onto LOS 23.2 paths; Secure key plumbing; **no bacon yet** **⚠️ CRITICAL**: Blocks all user stories - [x] T004 Extract F_CALLREC steps from `/srv/rom/references/extendrom/er.sh` into a checklist in `docs/008-call-rec-flag-secure-runbook.md` (Settings controllers, Secure `ER_ALLOW_ANY_CALL_REC` = `"extendrom_call_recording"`, DO XML, Dialer `CallRecorder.canRecordInCurrentCountry` early-return, Dialer `config.xml` overlay) - [x] T005 [P] Confirm LOS 23.2 Dialer still uses `/srv/rom/src/lineage/packages/apps/Dialer/java/com/android/incallui/call/CallRecorder.java` and that stock `call_recording_enabled` / audio source match or need EXTENDROM overlay (`call_recording_enabled=true`, `call_recording_audio_source=4`) - [x] T006 [P] Inventory A16 `FLAG_SECURE` / screenshot / screen-record sites under `/srv/rom/src/lineage/frameworks/base/` (+ SystemUI); list candidates in the runbook (native source patches only) - [x] T007 [P] Locate Settings development dashboard + `development_settings.xml` paths on LOS 23.2 (same family as `005`) - [x] T008 Scaffold idempotent `vendor/sunfish-a16/patches/008-call-rec-flag-secure/apply_008_call_rec_flag_secure.py` (dry-run + markers; body filled by story tasks) **Checkpoint**: Foundation ready — US1/US2 can proceed in parallel --- ## Phase 3: User Story 1 — Call recording (GOLDEN / EXTENDROM model) (P1) 🎯 MVP **Goal**: Native DO **Disable call recording restrictions** writing Secure `extendrom_call_recording` (GOLDEN-compatible); Dialer allows any country when `1` **Independent Test**: `adb shell settings get secure extendrom_call_recording`; toggle; record call per `quickstart.md` and `contracts/call-recording-surface.md` ### Implementation for User Story 1 - [x] T009 [P] [US1] Port EXTENDROM strings + DO category/switch/info into `/srv/rom/src/lineage/packages/apps/Settings/` (keys `extendrom_call_recording*`, legal details text from EXTENDROM overlay) - [x] T010 [P] [US1] Add `ER_CallRecPreferenceController` + `ER_CallRecInfo` (or equivalent names) under Settings development; wire into `DevelopmentSettingsDashboardFragment`; reset Secure to `0` when DO master disabled - [x] T011 [US1] Add `Settings.Secure.ER_ALLOW_ANY_CALL_REC = "extendrom_call_recording"` in `/srv/rom/src/lineage/frameworks/base/core/java/android/provider/Settings.java` - [x] T012 [US1] Patch `CallRecorder.canRecordInCurrentCountry()` to early-return `true` when `Settings.Secure.getInt(…, "extendrom_call_recording", 0) == 1` (same injection as `er.sh` F_CALLREC) - [x] T013 [P] [US1] Ensure Dialer call-rec config enabled for sunfish (EXTENDROM overlay values) under Dialer `callrecord/res/values/config.xml` or product overlay - [x] T014 [US1] Encode US1 changes into `vendor/sunfish-a16/patches/008-call-rec-flag-secure/apply_008_call_rec_flag_secure.py` with EXTENDROM/`er.sh` attribution - [ ] T015 [US1] LAB validate *(blocked: wait 008-bacon + Magisk-free flash)* on `11231JEC207477`; evidence under `/srv/rom/artifacts/008-call-rec-flag-secure/call-rec/` **Checkpoint**: US1 independently testable (MVP) --- ## Phase 4: User Story 2 — Global FLAG_SECURE override (P1) **Goal**: DO **Allow screenshots of secure windows** → Secure `allow_flag_secure_override`; native capture paths honour it globally **Independent Test**: Secure window OFF fail / ON success; `settings get secure allow_flag_secure_override`; `quickstart.md` §FLAG_SECURE ### Implementation for User Story 2 - [x] T016 [P] [US2] Settings strings + switch for FLAG_SECURE override under `/srv/rom/src/lineage/packages/apps/Settings/` - [x] T017 [P] [US2] Preference controller for `Settings.Secure.allow_flag_secure_override` with DO-master reset to `0` - [x] T018 [US2] Implement override in inventoried frameworks/SystemUI paths (T006) — **source only**, no jar binary patchers - [x] T019 [US2] Encode US2 into `vendor/sunfish-a16/patches/008-call-rec-flag-secure/apply_008_call_rec_flag_secure.py` - [ ] T020 [US2] LAB validate *(blocked: wait 008-bacon + Magisk-free flash)*; evidence under `/srv/rom/artifacts/008-call-rec-flag-secure/flag-secure/`; note any remaining DRM blocks in the runbook **Checkpoint**: US1 + US2 both work --- ## Phase 5: User Story 3 — Native attributable packaging (P2) **Goal**: Idempotent `vendor/sunfish-a16` apply; Magisk-free image **Independent Test**: Apply dry-run twice; feature works without Magisk (SC-005) - [x] T021 [US3] Finish apply script (idempotent, backups, clear missing-path errors); README lists every touched path - [ ] T022 [US3] Apply on `rom-dev01`, bacon detached *(apply done; bacon session `008-bacon` running)* via `/srv/rom/artifacts/bin/rom-detach`, flash LAB **without** Magisk modules for this feature - [ ] T023 [US3] Record Magisk-free PASS *(blocked: post-flash)* under `/srv/rom/artifacts/008-call-rec-flag-secure/` + runbook **Checkpoint**: Packaging complete --- ## Phase 6: Polish & Cross-Cutting - [x] T024 [P] Sync `docs/008-009-design.md`, `research.md`, contracts, and GOLDEN inventory note (`extendrom_call_recording` on GOLDEN) with final A16 paths - [x] T025 [P] Verify DO master-off resets **both** Secure keys to `0` - [ ] T026 Run full `quickstart.md` *(blocked: post-flash)* checklist; evidence index README under `/srv/rom/artifacts/008-call-rec-flag-secure/` - [x] T027 [P] Document `user` vs `userdebug` DO availability (same caution as `005`) --- ## Dependencies & Execution Order - **Setup → Foundational → US1 ∥ US2 → US3 → Polish** - **US1** after Phase 2; no dep on US2 - **US2** after Phase 2; no dep on US1 (coordinate Settings XML) - **US3** after US1+US2 encoded in apply script ### Parallel opportunities - T001 ∥ T002 ∥ T003 - T004 then T005 ∥ T006 ∥ T007 - After Phase 2: US1 track (T009–T013) ∥ US2 track (T016–T018) - T024 ∥ T025 ∥ T027 --- ## Implementation Strategy ### MVP 1. Setup + Foundational (esp. T004/T005 from `er.sh`) 2. US1 GOLDEN call-rec → LAB evidence 3. Then US2 FLAG_SECURE 4. US3 packaging + Magisk-free proof ### Suggested MVP scope **US1 only** (native EXTENDROM/GOLDEN call-rec). US2 still required before calling roadmap `008`+`009` done. --- ## Notes - Product is **native ROM** patches. Magisk zips are not part of the feature. - Prefer Secure-setting Dialer gate (GOLDEN) over always-on country XML RRO. - Prefer frameworks source patches over `services.jar` binary patching. - LAB only: `11231JEC207477`. Owner handles commit/MR.