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")
|
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
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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}")
|
||||||
|
|||||||
Reference in New Issue
Block a user