From 13882537569bf017d81054b4b2dda0c6755f9f3d Mon Sep 17 00:00:00 2001 From: Bruno Martins Date: Mon, 27 Oct 2025 01:50:16 +0000 Subject: [PATCH] network: Link to custom eSIM settings Change-Id: I48cab34d1bb2d7784a4471f17620bc9e8f243bf4 Signed-off-by: Pranav Vashi --- res/values/cm_strings.xml | 3 ++ src/com/android/settings/Utils.java | 2 + .../settings/spa/network/SimsSection.kt | 42 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml index 7279997da00..d5ddb0154c3 100644 --- a/res/values/cm_strings.xml +++ b/res/values/cm_strings.xml @@ -191,4 +191,7 @@ Maximum capacity %1$d mAh (%2$d%%) @string/battery_cycle_count_not_available + + + eSIM settings diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 756d5213ff0..12ef1268358 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -156,6 +156,8 @@ public final class Utils extends com.android.settingslib.Utils { public static final String PHONE_PACKAGE_NAME = "com.android.phone"; + public static final String ESIM_SETTINGS_PACKAGE_NAME = "org.lineageos.settings.esimswitcher"; + public static final String OS_PKG = "os"; /** diff --git a/src/com/android/settings/spa/network/SimsSection.kt b/src/com/android/settings/spa/network/SimsSection.kt index d98129f6ab2..c3bbb24bd40 100644 --- a/src/com/android/settings/spa/network/SimsSection.kt +++ b/src/com/android/settings/spa/network/SimsSection.kt @@ -23,6 +23,7 @@ import android.telephony.SubscriptionInfo import android.telephony.euicc.EuiccManager import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.SettingsApplications import androidx.compose.material.icons.outlined.SimCard import androidx.compose.material.icons.outlined.SimCardDownload import androidx.compose.runtime.Composable @@ -62,6 +63,7 @@ fun SimsSection(subscriptionInfoList: List) { SimPreference(subInfo) } + EsimSettings() AddSim() } } @@ -156,6 +158,46 @@ fun getAddSimIntent() = Intent(EuiccManager.ACTION_PROVISION_EMBEDDED_SUBSCRIPTI putExtra(EuiccManager.EXTRA_FORCE_PROVISION, true) } +@Composable +private fun EsimSettings() { + val context = LocalContext.current + + val hasEsimSettingsPackage = remember { + try { + context.packageManager.getPackageInfo(Utils.ESIM_SETTINGS_PACKAGE_NAME, 0) + true + } catch (_: Exception) { + false + } + } + + val res = context.resources + val euiccSlotsArrayId = remember { + res.getIdentifier("non_removable_euicc_slots", "array", "android") + } + val hasNonRemovableEuicc = remember { + euiccSlotsArrayId > 0 && (res.getIntArray(euiccSlotsArrayId)?.isNotEmpty() == true) + } + + if (hasEsimSettingsPackage && hasNonRemovableEuicc) { + RestrictedPreference( + model = + object : PreferenceModel { + override val title = stringResource(id = R.string.esim_settings_title) + override val icon = @Composable { SettingsIcon(Icons.Outlined.SettingsApplications) } + override val onClick = { startEsimSettingsFlow(context) } + }, + restrictions = Restrictions(keys = listOf(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)), + ) + } +} + +fun startEsimSettingsFlow(context: Context) = context.startActivity(getEsimSettingsIntent()) + +fun getEsimSettingsIntent() = Intent("org.lineageos.settings.device.ESIM_SETTINGS").apply { + setPackage(Utils.ESIM_SETTINGS_PACKAGE_NAME) +} + fun startSatelliteWarningDialogFlow(context: Context) = context.startActivity(getSatelliteWarningDialogIntent(context)) fun getSatelliteWarningDialogIntent(context: Context) = Intent(context,