package com.dmc.callcrm.data import android.Manifest import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.os.Build import android.telephony.SubscriptionManager import androidx.core.content.ContextCompat data class SimInfo( val slotIndex: Int, val subscriptionId: Int, val carrier: String, val number: String? // often null on modern Android; user types it manually ) object SimHelper { private fun hasPhonePerm(ctx: Context) = ContextCompat.checkSelfPermission(ctx, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED @SuppressLint("MissingPermission") fun listSims(ctx: Context): List { if (!hasPhonePerm(ctx)) return emptyList() val sm = ContextCompat.getSystemService(ctx, SubscriptionManager::class.java) ?: return emptyList() val subs = try { sm.activeSubscriptionInfoList } catch (e: SecurityException) { null } ?: return emptyList() return subs.map { s -> val number = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // getNumber may still be empty depending on carrier try { s.number } catch (e: Exception) { null } } else { @Suppress("DEPRECATION") s.number } SimInfo( slotIndex = s.simSlotIndex, subscriptionId = s.subscriptionId, carrier = s.carrierName?.toString() ?: "SIM ${s.simSlotIndex + 1}", number = number?.ifBlank { null } ) }.sortedBy { it.slotIndex } } }