Voice call history (Python-LXST-bounded rebuild) - #1081
Open
torlando-tech wants to merge 7 commits into
Open
Conversation
CallFinalOutcome (9 outcomes), CallFailureReason (7 prerequisite causes), UnconnectedOutcome scoping, immutable CallLifecycleRecorder, AcceptedCallObservation. Build fresh per reduced model (Task 5).
Add call_history + call_history_deletions via MIGRATION_4_5 (version 4->5). Reduced CallHistoryDao rejects removed outcomes (no UNANSWERED/DROPPED/media), finalizes connected as CONNECTED_ENDED, persists Columba-observed FAILED reasons, preserves deletion authority and non-resurrection. Released schemas/migrations untouched (new 5.json only). (Task 6)
…zed lifecycle\n\nIntroduce a single CallCallbackAdapter contract (incoming ringing, established,\ngeneric ended, busy, rejected, local decline, local cancel) and a\nSerializedLifecycleCallbackAdapter that routes LXST events into the shared\nAcceptedCallLifecycle owner. Identity mismatches fail closed without mutating\nhistory; busy/rejected are scoped to outgoing pre-connection attempts.\n\nWire both NativeCallManager and PythonCallManager to the same contract via the\nCallCoordinator call-state/call-ended listeners, and route hangup() to the\nlocal decline/cancel intents before the telephone hangs up.\n\nEquivalent callback APIs across both backends; symmetric tests cover established,\ngeneric ended, busy, rejected, local decline/cancel, identity-mismatch\nfail-closed, and ringing informational no-op. All flavors compile and check.
Add reduced call-history export/import to encrypted .columba migration at format version 8: CallHistoryExport/CallHistoryDeletionExport, idempotent import by attempt ID, conflict skip, transactional rollback, deletion authority with non-resurrection, and open-call recovery as INTERRUPTED. Wire exporter/importer and remove duplicate Hilt bindings so PersistenceModule is the single provider. MigrationCallHistoryImportTest (16) and MigrationCallHistoryRoundTripTest (4) cover every reduced outcome, deletion authority, rollback, and identity deletion.
Add the reduced call-history UI: Voice history cards (Chats Voice segment), Call details with Call again / View peer / block / delete, local search, date grouping, and navigation. Replace unsupported outcome copy with reduced neutral labels (Connected then ended / Not connected; no UNANSWERED/DROPPED/media), show outgoing ringing as unavailable, and preserve inferred INTERRUPTED presentation. Add identity-scoped blocking (schema v6, BlockedPeerDao/repository), blockIdentity across RnsCore/AIDL/native+python, and AnnounceRepository telephony lookup. 37 new Compose/navigation/viewmodel tests; all app/module suites green.
Contributor
Greptile SummaryThe PR adds identity-scoped Android voice-call history while limiting persisted outcomes to evidence available from the pinned LXST implementations.
Confidence Score: 5/5The PR appears safe to merge because no concrete blocking or independently actionable non-blocking defect remains after reviewing the persistence, lifecycle, migration, IPC, and presentation paths. Durable admission, terminal updates, deletion authority, migration rollback, restart reconciliation, and IPC mappings preserve their stated contracts across the changed native and Python call paths. Important Files Changed
Sequence DiagramsequenceDiagram
participant Backend as Native/Python LXST backend
participant Adapter as Serialized callback adapter
participant Lifecycle as Service call lifecycle
participant DB as Room call history
participant Repo as Call history repository
participant UI as History/details UI
Backend->>Adapter: call observation
Adapter->>Lifecycle: attempt-scoped transition
Lifecycle->>DB: persist admission/transition/outcome
DB-->>Lifecycle: durable acknowledgement
Repo->>DB: identity-scoped query
DB-->>Repo: call records
Repo-->>UI: history flow
UI->>Repo: delete finalized record
Repo->>DB: atomically add tombstone and delete record
Reviews (1): Last reviewed commit: "Port UI and navigation with honest ambig..." | Re-trigger Greptile |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Voice call history (Python-LXST-bounded rebuild)
Android voice call history rebuilt to stay strictly within unmodified Python LXST 0.5.1 facts and lifecycle behavior.
Feasibility boundary
v0.0.8; no LXST change was needed (parity proven against Python LXST).CONNECTED_ENDED,MISSED_INCOMING,DECLINED_LOCAL,REJECTED_REMOTE,BUSY_REMOTE,CANCELLED_LOCAL,NOT_CONNECTED,FAILED,INTERRUPTED.UNANSWERED,DROPPED, or media/transport terminal causes.connectedAt= established-callback observation time.Scope
Verification
Not merged. Review against the reduced feasibility boundary.