diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountScreen.kt index df40a49d..a6e251a9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountScreen.kt @@ -236,7 +236,7 @@ private fun AccountContent( if (ua.account.aor == "sip:mobile@pstn") stringResource(R.string.not_available) else - ua.account.aor + "tel:${Utils.uriUserPart(ua.account.aor)}" } else ua.account.luri diff --git a/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt index 5eff76db..faad55a8 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/SettingsScreen.kt @@ -1026,12 +1026,29 @@ private fun SettingsContent( ) val defaultDialer by viewModel.defaultDialer.collectAsState() val roleManager = ctx.getSystemService(ROLE_SERVICE) as RoleManager + + val requestPermissionLauncher = rememberLauncherForActivityResult( + ActivityResultContracts.RequestPermission() + ) { isGranted -> + if (isGranted) + Log.d(TAG, "READ_PHONE_NUMBERS permission granted") + BaresipService.instance?.addMobileUserAgent() + } + val dialerRoleRequest = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartActivityForResult() - ) { result -> - Log.d(TAG, "dialerRoleRequest result: $result") - viewModel.defaultDialer.value = roleManager.isRoleHeld(RoleManager.ROLE_DIALER) - BaresipService.instance?.addMobileUserAgent() + ) { _ -> + val isHeld = roleManager.isRoleHeld(RoleManager.ROLE_DIALER) + viewModel.defaultDialer.value = isHeld + if (isHeld) { + if (Utils.checkPermissions(ctx, arrayOf(Manifest.permission.READ_PHONE_NUMBERS))) { + BaresipService.instance?.addMobileUserAgent() + } else { + requestPermissionLauncher.launch(Manifest.permission.READ_PHONE_NUMBERS) + } + } else { + BaresipService.instance?.addMobileUserAgent() + } } Switch( checked = defaultDialer, diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt index a6dbbd83..d1f0a848 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt @@ -1357,33 +1357,42 @@ object Utils { else null } - else + else { + Log.d(TAG, "READ_PHONE_STATE permission not granted") return null + } } @SuppressLint("HardwareIds") fun getLine1Number(ctx: Context): String? { try { if (Build.VERSION.SDK_INT >= 33) { - if (ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_NUMBERS) == PackageManager.PERMISSION_GRANTED) { + if (ctx.checkSelfPermission(Manifest.permission.READ_PHONE_NUMBERS) == + PackageManager.PERMISSION_GRANTED) { val sm = ctx.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager val number = sm.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) if (number != "") { - Log.i(TAG, "Retrieved SIM number via SubscriptionManager") + Log.d(TAG, "Retrieved SIM number $number via SubscriptionManager") return number } + else + Log.d(TAG, "Did not get SIM number via SubscriptionManager") } + else + Log.d(TAG, "No READ_PHONE_NUMBERS permission") } else { - if (ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_NUMBERS) == PackageManager.PERMISSION_GRANTED || - ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { + if (checkPermissions(ctx, arrayOf(Manifest.permission.READ_PHONE_NUMBERS, + Manifest.permission.READ_PHONE_STATE))) { val tm = ctx.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager @Suppress("DEPRECATION") val number = tm.line1Number if (number != null) { - Log.i(TAG, "Retrieved SIM number via TelephonyManager") + Log.d(TAG, "Retrieved SIM number $number via TelephonyManager") return number } } + else + Log.d(TAG, "No READ_PHONE_NUMBERS and/or READ_PHONE_STATE permissions") } } catch (e: Exception) { Log.w(TAG, "getLine1Number failed: ${e.message}")