[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:
@@ -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()
|
||||||
|
),
|
||||||
|
) {
|
||||||
|
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(
|
||||||
|
R.string.sim_onboarding_progressbar_turning_sim_on,
|
||||||
|
onboardingService.targetSubInfo?.displayName ?: ""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dialog.setMessage(
|
|
||||||
stringResource(
|
|
||||||
R.string.sim_onboarding_progressbar_turning_sim_on,
|
|
||||||
onboardingService.targetSubInfo?.displayName ?: ""
|
|
||||||
)
|
|
||||||
)
|
|
||||||
dialog.setCancelable(false)
|
|
||||||
|
|
||||||
if(showDialog.value) {
|
|
||||||
dialog.show()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun registerSidecarReceiverFlow(){
|
fun registerSidecarReceiverFlow(){
|
||||||
switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow()
|
switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow()
|
||||||
|
@@ -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
|
||||||
val telephonyManagerForNonDds: TelephonyManager? =
|
Log.d(
|
||||||
context.getSystemService(TelephonyManager::class.java)
|
TAG,
|
||||||
?.createForSubscriptionId(targetNonDds)
|
"setAutomaticData: targetNonDds: $nonDds," +
|
||||||
setAutomaticData(telephonyManagerForNonDds, targetPrimarySimAutoDataSwitch)
|
" targetPrimarySimAutoDataSwitch: $targetPrimarySimAutoDataSwitch"
|
||||||
|
)
|
||||||
|
if (nonDds != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
|
val telephonyManagerForNonDds: TelephonyManager? =
|
||||||
|
context.getSystemService(TelephonyManager::class.java)
|
||||||
|
?.createForSubscriptionId(nonDds)
|
||||||
|
setAutomaticData(telephonyManagerForNonDds, targetPrimarySimAutoDataSwitch)
|
||||||
|
}
|
||||||
|
|
||||||
// no next action, send finish
|
// no next action, send finish
|
||||||
callback(SimOnboardingActivity.CALLBACK_FINISH)
|
callback(SimOnboardingActivity.CALLBACK_FINISH)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user