fix(call): make full-screen incoming call UI work on Android 14+ - #859
Open
glowinthedark wants to merge 1 commit into
Open
fix(call): make full-screen incoming call UI work on Android 14+#859glowinthedark wants to merge 1 commit into
glowinthedark wants to merge 1 commit into
Conversation
- update permission manifests - re-ask for USE_FULL_SCREEN_INTENT after the dialer role is granted (previously onCreate-only, so a first-run grant went unasked until the next cold start — the actual cause of missing FSI on Android 14+). - Add first-launch Permissions & access screen listing every permission and special access with live granted state and per-item grant flows, including Restricted Settings guidance for sideloaded installs (Android 15 CDD 9.8 restricts the dialer role and overlay permission). - Cache caller lookup (was a full contacts-DB scan per call-state change), dedupe the two notification builders, fix deprecated APIs, CI workflow (standalone) - Makefile (runs `make help` by default)
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.
Scope
update permission manifests
re-ask for USE_FULL_SCREEN_INTENT after the dialer role is granted (previously onCreate-only, so a first-run grant went unasked until the next cold start — the actual cause of missing FSI on Android 14+).
Add first-launch Permissions & access screen listing every permission and special access with live granted state and per-item grant flows, including Restricted Settings guidance for sideloaded installs (Android 15 CDD 9.8 restricts the dialer role and overlay permission).
Cache caller lookup (was a full contacts-DB scan per call-state change), dedupe the two notification builders, fix deprecated APIs, CI workflow (standalone)
add
Makefile(runsmake helpby default)Details
Root cause of the missing full-screen UI
USE_FULL_SCREEN_INTENTis revoked by on Android 14+. The permission promptran only in
MainActivity.onCreateinside theisDefaultDialer()branch, while theelsebranch launched the dialer prompt — so a user granting the dialer role fromthat same launch was never asked,
canUseFullScreenIntent()stayed false, and thestartActivityfallback was silently blocked by BAL. ExtractedonDefaultDialerReady()and invoked it from both
onCreateandonActivityResult.initFragments()moved out of the contacts-permission callback (it only wires theViewPager and must not be gated on a permission result).
Permissions & access screen
First-launch screen (also under Settings), 8 entries in Required/Recommended with
icon, rationale, live granted state, and the correct grant flow per item:
dialer role,
RequestMultiplePermissions,ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT,ACTION_MANAGE_OVERLAY_PERMISSION,ROLE_CALL_SCREENING.Entries absent on the running OS are filtered (notifications <33, FSI <34,
screening <29). State re-read in
onResume— special accesses return no result.Restricted Settings guidance
Android 15 CDD imposes Restricted Settings for the Dialer role and
Display over other apps — the two toggles this app needs. For dideloaded
installs users see them greyed out and are stuck with an "unsafe app" warning. Not OEM-specific (Android 15+), but naming differs: stock says Allow restricted
settings, ColorOS/OxygenOS say Allow restricted permission.
Collapsible notice with the 5-step unblock flow, an Open app info deep link, and a
Learn more link. Shown only when
API ≥33, a restricted-listed entry is ungranted, and the installer is not an exempt
store.
EnhancedConfirmationManageris@SystemApi, so state is inferred from installsource
Performance
getCallContactloaded the entire contacts DB on every call-state change(
onStateChanged+onDetailsChanged). Now cached per handle, bounded, cleared onlast call removal.
numbersToContactIDMap.getCallContactAvataralready crops).
getMyContactsCursormoved off the calling (main) thread.Cosmetic fixes
FLAG_KEEP_SCREEN_ONwasonly in the API-26 branch;
setShowWhenLocked/setTurnScreenOndon't cover it.installDebug/installReleasedon't exist with product flavors;now flavor-qualified + cross-platform JDK discovery (JAVA_HOME →
java_home→/usr/lib/jvmprobe → PATH), floor of JDK 17,helpgoal.Handler(), 2× single-arggetColor/getDrawable,AudioRoute.values().Type of change(s)
What changed and why
Checklist