Improved accessing SIM card phone number
This commit is contained in:
@ -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
|
||||
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user