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")
stringResource(R.string.not_available)
else
ua.account.aor
"tel:${Utils.uriUserPart(ua.account.aor)}"
} else
ua.account.luri

View File

@ -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,

View File

@ -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}")