Improved accessing SIM card phone number

This commit is contained in:
Juha Heinanen
2026-05-12 16:39:37 +03:00
parent fbeebed119
commit d3ffd26d20
3 changed files with 37 additions and 11 deletions

View File

@ -236,7 +236,7 @@ private fun AccountContent(
if (ua.account.aor == "sip:mobile@pstn") if (ua.account.aor == "sip:mobile@pstn")
stringResource(R.string.not_available) stringResource(R.string.not_available)
else else
ua.account.aor "tel:${Utils.uriUserPart(ua.account.aor)}"
} else } else
ua.account.luri ua.account.luri

View File

@ -1026,12 +1026,29 @@ private fun SettingsContent(
) )
val defaultDialer by viewModel.defaultDialer.collectAsState() val defaultDialer by viewModel.defaultDialer.collectAsState()
val roleManager = ctx.getSystemService(ROLE_SERVICE) as RoleManager 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( val dialerRoleRequest = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult() contract = ActivityResultContracts.StartActivityForResult()
) { result -> ) { _ ->
Log.d(TAG, "dialerRoleRequest result: $result") val isHeld = roleManager.isRoleHeld(RoleManager.ROLE_DIALER)
viewModel.defaultDialer.value = roleManager.isRoleHeld(RoleManager.ROLE_DIALER) viewModel.defaultDialer.value = isHeld
BaresipService.instance?.addMobileUserAgent() 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( Switch(
checked = defaultDialer, checked = defaultDialer,

View File

@ -1357,33 +1357,42 @@ object Utils {
else else
null null
} }
else else {
Log.d(TAG, "READ_PHONE_STATE permission not granted")
return null return null
}
} }
@SuppressLint("HardwareIds") @SuppressLint("HardwareIds")
fun getLine1Number(ctx: Context): String? { fun getLine1Number(ctx: Context): String? {
try { try {
if (Build.VERSION.SDK_INT >= 33) { 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 sm = ctx.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
val number = sm.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) val number = sm.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)
if (number != "") { if (number != "") {
Log.i(TAG, "Retrieved SIM number via SubscriptionManager") Log.d(TAG, "Retrieved SIM number $number via SubscriptionManager")
return number return number
} }
else
Log.d(TAG, "Did not get SIM number via SubscriptionManager")
} }
else
Log.d(TAG, "No READ_PHONE_NUMBERS permission")
} else { } else {
if (ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_NUMBERS) == PackageManager.PERMISSION_GRANTED || if (checkPermissions(ctx, arrayOf(Manifest.permission.READ_PHONE_NUMBERS,
ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { Manifest.permission.READ_PHONE_STATE))) {
val tm = ctx.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager val tm = ctx.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
val number = tm.line1Number val number = tm.line1Number
if (number != null) { if (number != null) {
Log.i(TAG, "Retrieved SIM number via TelephonyManager") Log.d(TAG, "Retrieved SIM number $number via TelephonyManager")
return number return number
} }
} }
else
Log.d(TAG, "No READ_PHONE_NUMBERS and/or READ_PHONE_STATE permissions")
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.w(TAG, "getLine1Number failed: ${e.message}") Log.w(TAG, "getLine1Number failed: ${e.message}")