diff --git a/telefon/app/build.gradle.kts b/telefon/app/build.gradle.kts index e944d5e..5dac34d 100644 --- a/telefon/app/build.gradle.kts +++ b/telefon/app/build.gradle.kts @@ -16,8 +16,8 @@ android { applicationId = "app.telefon" minSdk = 29 targetSdk = 36 - versionCode = 1 - versionName = "0.1.0" + versionCode = 2 + versionName = "0.1.1" } // Release key lives outside the repo; without it, release builds fall back to the debug key (local only). diff --git a/telefon/app/src/main/java/app/telefon/MainActivity.kt b/telefon/app/src/main/java/app/telefon/MainActivity.kt index 569507a..b3da625 100644 --- a/telefon/app/src/main/java/app/telefon/MainActivity.kt +++ b/telefon/app/src/main/java/app/telefon/MainActivity.kt @@ -102,14 +102,36 @@ private fun PhoneApp(dialRequest: String?, onDialHandled: () -> Unit) { val roleLauncher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { isDefault = role.isRoleHeld(RoleManager.ROLE_DIALER); granted = hasCore(ctx) } + var askedRole by rememberSaveable { mutableStateOf(false) } + // first start: ask for the role right away; the dialog grants the phone permissions too LaunchedEffect(Unit) { + if (!isDefault && !askedRole && role.isRoleAvailable(RoleManager.ROLE_DIALER)) { + askedRole = true + roleLauncher.launch(role.createRequestRoleIntent(RoleManager.ROLE_DIALER)) + return@LaunchedEffect + } if (!granted) perms.launch(arrayOf(Manifest.permission.READ_CALL_LOG, Manifest.permission.READ_CONTACTS, Manifest.permission.CALL_PHONE, Manifest.permission.READ_PHONE_STATE, Manifest.permission.POST_NOTIFICATIONS)) } val log by remember(granted) { Contacts.callLog(ctx) }.collectAsState(initial = emptyList()) val people by remember(granted) { Contacts.people(ctx) }.collectAsState(initial = emptyList()) - val call: (String) -> Unit = { n -> placeCall(ctx, n) } + var pendingNumber by remember { mutableStateOf(null) } + // without the role Android shows the call in the system phone app: say so instead of jumping away + val call: (String) -> Unit = { n -> if (isDefault) placeCall(ctx, n) else pendingNumber = n } + pendingNumber?.let { n -> + androidx.compose.material3.AlertDialog( + onDismissRequest = { pendingNumber = null }, + title = { Text(stringResource(R.string.default_title)) }, + text = { Text(stringResource(R.string.not_default_call)) }, + confirmButton = { + androidx.compose.material3.TextButton(onClick = { pendingNumber = null; roleLauncher.launch(role.createRequestRoleIntent(RoleManager.ROLE_DIALER)) }) { + Text(stringResource(R.string.make_default)) + } + }, + dismissButton = { androidx.compose.material3.TextButton(onClick = { pendingNumber = null; placeCall(ctx, n) }) { Text(stringResource(R.string.call_anyway)) } }, + ) + } screen?.let { s -> BackHandler { screen = null } diff --git a/telefon/app/src/main/res/values/strings.xml b/telefon/app/src/main/res/values/strings.xml index bac295f..074937b 100644 --- a/telefon/app/src/main/res/values/strings.xml +++ b/telefon/app/src/main/res/values/strings.xml @@ -36,6 +36,9 @@ Als Standard-Telefon-App festlegen Nur dann kann diese App Anrufe annehmen und anzeigen. Du kannst das jederzeit in den Android-Einstellungen ändern. + Diese App ist noch nicht deine Standard-Telefon-App. Android zeigt den Anruf deshalb in der System-Telefon-App an. + Als Standard festlegen + Trotzdem anrufen Eingehender Anruf Wird angerufen … Gehalten