[SimUiEnhancement] Fix Automatic Data switch UI at SimOnboarding

- Automatic Data switch can't set value to framework, since
the nonDds is -1
- update the ProgressDialog as compose UI

Bug: 318310357
Bug: 298898436
Bug: 298891941
Test: Build pass
Change-Id: Ifeca38b42b3a51e8a967c0e744eeae06338f6ddc
This commit is contained in:
songferngwang
2024-02-19 02:58:43 +00:00
parent a70f208df3
commit 6d0b41af5a
6 changed files with 60 additions and 35 deletions

View File

@@ -22,19 +22,25 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.telephony.SubscriptionManager import android.telephony.SubscriptionManager
import android.util.Log import android.util.Log
import android.view.MotionEvent
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.SignalCellularAlt import androidx.compose.material.icons.outlined.SignalCellularAlt
import androidx.compose.material3.AlertDialogDefaults
import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.SheetState import androidx.compose.material3.SheetState
import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@@ -58,6 +64,7 @@ import com.android.settings.spa.network.SimOnboardingPageProvider.getRoute
import com.android.settingslib.spa.SpaBaseDialogActivity import com.android.settingslib.spa.SpaBaseDialogActivity
import com.android.settingslib.spa.framework.theme.SettingsDimension import com.android.settingslib.spa.framework.theme.SettingsDimension
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
import com.android.settingslib.spa.widget.dialog.getDialogWidth
import com.android.settingslib.spa.widget.ui.SettingsTitle import com.android.settingslib.spa.widget.ui.SettingsTitle
import com.android.settingslib.spaprivileged.framework.common.userManager import com.android.settingslib.spaprivileged.framework.common.userManager
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
@@ -193,26 +200,43 @@ class SimOnboardingActivity : SpaBaseDialogActivity() {
} }
} }
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun ProgressDialogImpl() { fun ProgressDialogImpl() {
// TODO: 1. Create the SPA's ProgressDialog and using SPA's widget if(showDialog.value) {
val dialog: ProgressDialog = object : ProgressDialog(this) { // TODO: Create the SPA's ProgressDialog and using SPA's widget
override fun onTouchEvent(event: MotionEvent): Boolean { BasicAlertDialog(
return true onDismissRequest = {},
} modifier = Modifier.width(
} getDialogWidth()
dialog.setMessage( ),
) {
Surface(
color = AlertDialogDefaults.containerColor,
shape = AlertDialogDefaults.shape
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(SettingsDimension.itemPaddingStart),
verticalAlignment = Alignment.CenterVertically
) {
CircularProgressIndicator()
Column(modifier = Modifier
.padding(start = SettingsDimension.itemPaddingStart)) {
SettingsTitle(
stringResource( stringResource(
R.string.sim_onboarding_progressbar_turning_sim_on, R.string.sim_onboarding_progressbar_turning_sim_on,
onboardingService.targetSubInfo?.displayName ?: "" onboardingService.targetSubInfo?.displayName ?: ""
) )
) )
dialog.setCancelable(false) }
}
}
}
}
}
if(showDialog.value) {
dialog.show()
}
}
@Composable @Composable
fun registerSidecarReceiverFlow(){ fun registerSidecarReceiverFlow(){
switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow() switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow()

View File

@@ -45,7 +45,6 @@ class SimOnboardingService {
var activeSubInfoList: List<SubscriptionInfo> = listOf() var activeSubInfoList: List<SubscriptionInfo> = listOf()
var slotInfoList: List<UiccSlotInfo> = listOf() var slotInfoList: List<UiccSlotInfo> = listOf()
var uiccCardInfoList: List<UiccCardInfo> = listOf() var uiccCardInfoList: List<UiccCardInfo> = listOf()
var selectedSubInfoList: MutableList<SubscriptionInfo> = mutableListOf()
var targetPrimarySimCalls: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimCalls: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
var targetPrimarySimTexts: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimTexts: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
var targetPrimarySimMobileData: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimMobileData: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
@@ -56,10 +55,8 @@ class SimOnboardingService {
Log.w(TAG, "No DDS") Log.w(TAG, "No DDS")
return SubscriptionManager.INVALID_SUBSCRIPTION_ID return SubscriptionManager.INVALID_SUBSCRIPTION_ID
} }
return selectedSubInfoList return userSelectedSubInfoList
.filter { info -> .filter { info -> info.subscriptionId != targetPrimarySimMobileData }
(info.simSlotIndex != -1) && (info.subscriptionId != targetPrimarySimMobileData)
}
.map { it.subscriptionId } .map { it.subscriptionId }
.firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID .firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID
} }
@@ -118,7 +115,6 @@ class SimOnboardingService {
&& targetSubInfo != null && targetSubInfo != null
&& activeSubInfoList.isNotEmpty() && activeSubInfoList.isNotEmpty()
&& slotInfoList.isNotEmpty() && slotInfoList.isNotEmpty()
&& selectedSubInfoList.isNotEmpty()
} }
fun clear() { fun clear() {
@@ -128,7 +124,6 @@ class SimOnboardingService {
activeSubInfoList = listOf() activeSubInfoList = listOf()
slotInfoList = listOf() slotInfoList = listOf()
uiccCardInfoList = listOf() uiccCardInfoList = listOf()
selectedSubInfoList = mutableListOf()
targetPrimarySimCalls = -1 targetPrimarySimCalls = -1
targetPrimarySimTexts = -1 targetPrimarySimTexts = -1
targetPrimarySimMobileData = -1 targetPrimarySimMobileData = -1
@@ -151,7 +146,8 @@ class SimOnboardingService {
ThreadUtils.postOnBackgroundThread { ThreadUtils.postOnBackgroundThread {
activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager) activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager)
availableSubInfoList = SubscriptionUtil.getAvailableSubscriptions(context) availableSubInfoList = SubscriptionUtil.getAvailableSubscriptions(context)
targetSubInfo = availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId } targetSubInfo =
availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId }
targetSubInfo?.let { userSelectedSubInfoList.add(it) } targetSubInfo?.let { userSelectedSubInfoList.add(it) }
Log.d( Log.d(
TAG, "targetSubId: $targetSubId" + ", targetSubInfo: $targetSubInfo" + TAG, "targetSubId: $targetSubId" + ", targetSubInfo: $targetSubInfo" +
@@ -186,7 +182,6 @@ class SimOnboardingService {
targetSubInfo?.let { list.add(it) } targetSubInfo?.let { list.add(it) }
} }
Log.d(TAG, "list: $list")
return list.toList() return list.toList()
} }
@@ -206,7 +201,10 @@ class SimOnboardingService {
return return
} }
renameMutableMap[subInfo.subscriptionId] = newName renameMutableMap[subInfo.subscriptionId] = newName
Log.d(TAG, "renameMutableMap add ${subInfo.subscriptionId} & $newName into: $renameMutableMap") Log.d(
TAG,
"renameMutableMap add ${subInfo.subscriptionId} & $newName into: $renameMutableMap"
)
} }
fun getSubscriptionInfoDisplayName(subInfo: SubscriptionInfo): String { fun getSubscriptionInfoDisplayName(subInfo: SubscriptionInfo): String {
@@ -278,11 +276,18 @@ class SimOnboardingService {
targetPrimarySimMobileData targetPrimarySimMobileData
) )
var nonDds = targetNonDds
Log.d(
TAG,
"setAutomaticData: targetNonDds: $nonDds," +
" targetPrimarySimAutoDataSwitch: $targetPrimarySimAutoDataSwitch"
)
if (nonDds != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
val telephonyManagerForNonDds: TelephonyManager? = val telephonyManagerForNonDds: TelephonyManager? =
context.getSystemService(TelephonyManager::class.java) context.getSystemService(TelephonyManager::class.java)
?.createForSubscriptionId(targetNonDds) ?.createForSubscriptionId(nonDds)
setAutomaticData(telephonyManagerForNonDds, targetPrimarySimAutoDataSwitch) setAutomaticData(telephonyManagerForNonDds, targetPrimarySimAutoDataSwitch)
}
// no next action, send finish // no next action, send finish
callback(SimOnboardingActivity.CALLBACK_FINISH) callback(SimOnboardingActivity.CALLBACK_FINISH)

View File

@@ -47,7 +47,6 @@ class SimOnboardingLabelSimTest {
on { activeSubInfoList }.doReturn(listOf()) on { activeSubInfoList }.doReturn(listOf())
on { slotInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf())
on { uiccCardInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf())
on { selectedSubInfoList }.doReturn(mutableListOf())
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)

View File

@@ -47,7 +47,6 @@ class SimOnboardingPageProviderTest {
on { activeSubInfoList }.doReturn(listOf()) on { activeSubInfoList }.doReturn(listOf())
on { slotInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf())
on { uiccCardInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf())
on { selectedSubInfoList }.doReturn(mutableListOf())
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)

View File

@@ -48,7 +48,6 @@ class SimOnboardingPrimarySimTest {
on { activeSubInfoList }.doReturn(listOf()) on { activeSubInfoList }.doReturn(listOf())
on { slotInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf())
on { uiccCardInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf())
on { selectedSubInfoList }.doReturn(mutableListOf())
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)

View File

@@ -47,7 +47,6 @@ class SimOnboardingSelectSimTest {
on { activeSubInfoList }.doReturn(listOf()) on { activeSubInfoList }.doReturn(listOf())
on { slotInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf())
on { uiccCardInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf())
on { selectedSubInfoList }.doReturn(mutableListOf())
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)