Show two mobile account tel: URIs if different SIM is in use for calls and messages

This commit is contained in:
Juha Heinanen
2026-05-29 12:07:23 +03:00
parent 27f0bdf1a0
commit 4a388345b2
6 changed files with 125 additions and 65 deletions
+27 -17
View File
@@ -1374,35 +1374,45 @@ object Utils {
}
}
@RequiresApi(29)
@SuppressLint("HardwareIds")
fun getLine1Number(ctx: Context): String? {
fun getLine1Number(ctx: Context, subscriptionId: Int = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID): String? {
try {
if (Build.VERSION.SDK_INT >= 33) {
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)
PackageManager.PERMISSION_GRANTED
) {
val sm =
ctx.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
val number = sm.getPhoneNumber(subscriptionId)
if (number != "") {
Log.d(TAG, "Retrieved SIM number $number via SubscriptionManager")
Log.d(TAG, "Retrieved SIM number $number via SubscriptionManager for $subscriptionId")
return number
}
else
Log.d(TAG, "Did not get SIM number via SubscriptionManager")
}
else
} else
Log.d(TAG, "Did not get SIM number via SubscriptionManager for $subscriptionId")
} else
Log.d(TAG, "No READ_PHONE_NUMBERS permission")
} else {
if (checkPermissions(ctx, arrayOf(Manifest.permission.READ_PHONE_NUMBERS,
Manifest.permission.READ_PHONE_STATE))) {
if (checkPermissions(
ctx, arrayOf(
Manifest.permission.READ_PHONE_NUMBERS,
Manifest.permission.READ_PHONE_STATE
)
)
) {
val tm = ctx.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val targetTm = if (subscriptionId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)
tm
else
tm.createForSubscriptionId(subscriptionId)
@Suppress("DEPRECATION")
val number = tm.line1Number
if (number != null) {
Log.d(TAG, "Retrieved SIM number $number via TelephonyManager")
val number = targetTm.line1Number
if (number != null && number != "") {
Log.d(TAG, "Retrieved SIM number $number via TelephonyManager for $subscriptionId")
return number
}
}
else
} else
Log.d(TAG, "No READ_PHONE_NUMBERS and/or READ_PHONE_STATE permissions")
}
} catch (e: Exception) {