Merge "The pages of sim onboarding flow is wrong." into main
diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt
index 481dc20..3a21049 100644
--- a/src/com/android/settings/network/SimOnboardingActivity.kt
+++ b/src/com/android/settings/network/SimOnboardingActivity.kt
@@ -401,6 +401,11 @@
Log.d(TAG, "startSimSwitching:")
var targetSubInfo = onboardingService.targetSubInfo
+ if(onboardingService.doesTargetSimActive) {
+ Log.d(TAG, "target subInfo is already active")
+ callbackListener(CallbackType.CALLBACK_SETUP_NAME)
+ return
+ }
targetSubInfo?.let {
var removedSubInfo = onboardingService.getRemovedSim()
if (targetSubInfo.isEmbedded) {
diff --git a/src/com/android/settings/network/SimOnboardingService.kt b/src/com/android/settings/network/SimOnboardingService.kt
index b7df754..f6c6065 100644
--- a/src/com/android/settings/network/SimOnboardingService.kt
+++ b/src/com/android/settings/network/SimOnboardingService.kt
@@ -16,6 +16,9 @@
package com.android.settings.network
+import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
+import android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX
+
import android.content.Context
import android.telephony.SubscriptionInfo
import android.telephony.SubscriptionManager
@@ -40,26 +43,26 @@
var subscriptionManager:SubscriptionManager? = null
var telephonyManager:TelephonyManager? = null
- var targetSubId: Int = INVALID
+ var targetSubId: Int = INVALID_SUBSCRIPTION_ID
var targetSubInfo: SubscriptionInfo? = null
var availableSubInfoList: List<SubscriptionInfo> = listOf()
var activeSubInfoList: List<SubscriptionInfo> = listOf()
var slotInfoList: List<UiccSlotInfo> = listOf()
var uiccCardInfoList: List<UiccCardInfo> = listOf()
- var targetPrimarySimCalls: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
- var targetPrimarySimTexts: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
- var targetPrimarySimMobileData: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+ var targetPrimarySimCalls: Int = INVALID_SUBSCRIPTION_ID
+ var targetPrimarySimTexts: Int = INVALID_SUBSCRIPTION_ID
+ var targetPrimarySimMobileData: Int = INVALID_SUBSCRIPTION_ID
val targetPrimarySimAutoDataSwitch = MutableStateFlow(false)
- var targetNonDds: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+ var targetNonDds: Int = INVALID_SUBSCRIPTION_ID
get() {
- if(targetPrimarySimMobileData == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ if(targetPrimarySimMobileData == INVALID_SUBSCRIPTION_ID) {
Log.w(TAG, "No DDS")
- return SubscriptionManager.INVALID_SUBSCRIPTION_ID
+ return INVALID_SUBSCRIPTION_ID
}
return userSelectedSubInfoList
.filter { info -> info.subscriptionId != targetPrimarySimMobileData }
.map { it.subscriptionId }
- .firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID
+ .firstOrNull() ?: INVALID_SUBSCRIPTION_ID
}
var callback: (CallbackType) -> Unit = {}
@@ -84,6 +87,11 @@
activeSubInfoList.stream().anyMatch { it.isEmbedded }
return false
}
+ var doesTargetSimActive = false
+ get() {
+ return targetSubInfo?.getSimSlotIndex() ?: INVALID_SIM_SLOT_INDEX >= 0
+ }
+
var doesTargetSimHaveEsimOperation = false
get() {
return targetSubInfo?.isEmbedded ?: false
@@ -95,7 +103,7 @@
}
var getActiveModemCount = 0
get() {
- return telephonyManager?.getActiveModemCount() ?: 0
+ return (telephonyManager?.getActiveModemCount() ?: 0)
}
var renameMutableMap : MutableMap<Int, String> = mutableMapOf()
@@ -103,16 +111,18 @@
var isSimSelectionFinished = false
get() {
- return getActiveModemCount != 0 && userSelectedSubInfoList.size == getActiveModemCount
+ val activeModem = getActiveModemCount
+ return activeModem != 0 && userSelectedSubInfoList.size == activeModem
}
var isAllOfSlotAssigned = false
get() {
- if(getActiveModemCount == 0){
+ val activeModem = getActiveModemCount
+ if(activeModem == 0){
Log.e(TAG, "isAllOfSlotAssigned: getActiveModemCount is 0")
return true
}
- return getActiveModemCount != 0 && activeSubInfoList.size == getActiveModemCount
+ return getActiveModemCount != 0 && activeSubInfoList.size == activeModem
}
var isMultiSimEnabled = false
get() {
@@ -129,7 +139,7 @@
}
fun isValid(): Boolean {
- return targetSubId != INVALID
+ return targetSubId != INVALID_SUBSCRIPTION_ID
&& targetSubInfo != null
&& activeSubInfoList.isNotEmpty()
&& slotInfoList.isNotEmpty()
@@ -156,14 +166,15 @@
fun initData(inputTargetSubId: Int,
context: Context,
callback: (CallbackType) -> Unit) {
+ clear()
this.callback = callback
targetSubId = inputTargetSubId
subscriptionManager = context.getSystemService(SubscriptionManager::class.java)
telephonyManager = context.getSystemService(TelephonyManager::class.java)
+ activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager)
Log.d(
TAG, "startInit: targetSubId:$targetSubId, activeSubInfoList: $activeSubInfoList"
)
- activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager)
ThreadUtils.postOnBackgroundThread {
availableSubInfoList = SubscriptionUtil.getAvailableSubscriptions(context)
@@ -242,14 +253,19 @@
fun addCurrentItemForSelectedSim() {
if (userSelectedSubInfoList.size < getActiveModemCount) {
- userSelectedSubInfoList.addAll(activeSubInfoList)
- Log.d(TAG, "addCurrentItemForSelectedSim: userSelectedSubInfoList:" +
- ", $userSelectedSubInfoList")
+ userSelectedSubInfoList.addAll(
+ activeSubInfoList.filter { !userSelectedSubInfoList.contains(it) }
+ )
+ Log.d(TAG,
+ "addCurrentItemForSelectedSim: userSelectedSubInfoList: $userSelectedSubInfoList"
+ )
}
}
fun addItemForSelectedSim(selectedSubInfo: SubscriptionInfo) {
- userSelectedSubInfoList.add(selectedSubInfo)
+ if (!userSelectedSubInfoList.contains(selectedSubInfo)) {
+ userSelectedSubInfoList.add(selectedSubInfo)
+ }
}
fun removeItemForSelectedSim(selectedSubInfo: SubscriptionInfo) {
@@ -370,7 +386,6 @@
companion object{
private const val TAG = "SimOnboardingService"
- private const val INVALID = SubscriptionManager.INVALID_SUBSCRIPTION_ID
const val NUM_OF_SIMS_FOR_DSDS = 2
}
}
\ No newline at end of file
diff --git a/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt b/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
index fab9c12..028b50d 100644
--- a/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
+++ b/src/com/android/settings/spa/network/SimOnboardingPageProvider.kt
@@ -107,7 +107,8 @@
composable(route = SimOnboardingScreen.LabelSim.name) {
val nextPage =
if (onboardingService.isMultipleEnabledProfilesSupported
- && onboardingService.isAllOfSlotAssigned) {
+ && onboardingService.isAllOfSlotAssigned
+ && !onboardingService.doesTargetSimActive) {
SimOnboardingScreen.SelectSim.name
} else {
LaunchedEffect(Unit) {
diff --git a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPageProviderTest.kt b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPageProviderTest.kt
index d1847c8..1395ed4 100644
--- a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPageProviderTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPageProviderTest.kt
@@ -91,6 +91,7 @@
mockSimOnboardingService.stub {
on { isMultipleEnabledProfilesSupported }.thenReturn(true)
on { isAllOfSlotAssigned }.thenReturn(true)
+ on { doesTargetSimActive }.thenReturn(false)
}
composeTestRule.setContent {