From a70f208df3b9afda375ca865d5dfe0b8225a817f Mon Sep 17 00:00:00 2001 From: songferngwang Date: Mon, 19 Feb 2024 02:36:16 +0000 Subject: [PATCH 1/5] [Sims Enhancement] update the sim's name after renaming sim -Remove remember to update the title and summary -Sim Onboarding primary sim page removes the catogory Bug: 318310357 Bug: 298898436 Bug: 298891941 Test: Build pass Change-Id: Ibc0922511cd1b2e65c6af86eab06b6f9d6fce54d --- .../network/NetworkCellularGroupProvider.kt | 158 +++++++++++------- .../spa/network/SimOnboardingPrimarySim.kt | 6 +- 2 files changed, 98 insertions(+), 66 deletions(-) diff --git a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt index b6d83f29976..7330366ca4f 100644 --- a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt +++ b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt @@ -219,24 +219,24 @@ fun SimsSectionImpl( mutableStateOf(false) } //TODO: Add the Restricted TwoTargetSwitchPreference in SPA - TwoTargetSwitchPreference(remember { - object : SwitchPreferenceModel { - override val title = subInfo.displayName.toString() - override val summary = { subInfo.number } - override val checked = { - coroutineScope.launch { - withContext(Dispatchers.Default) { - checked.value = subscriptionManager?.isSubscriptionEnabled( + TwoTargetSwitchPreference( + object : SwitchPreferenceModel { + override val title = subInfo.displayName.toString() + override val summary = { subInfo.number } + override val checked = { + coroutineScope.launch { + withContext(Dispatchers.Default) { + checked.value = subscriptionManager?.isSubscriptionEnabled( subInfo.subscriptionId)?:false + } } + checked.value + } + override val onCheckedChange = { newChecked: Boolean -> + startToggleSubscriptionDialog(context, subInfo, newChecked) } - checked.value } - override val onCheckedChange = { newChecked: Boolean -> - startToggleSubscriptionDialog(context, subInfo, newChecked) - } - } - }) { + ) { startMobileNetworkSettings(context, subInfo) } } @@ -258,7 +258,7 @@ fun SimsSectionImpl( } @Composable -fun PrimarySimSectionImpl( +fun PrimarySimImpl( subscriptionInfoList: List, callsSelectedId: MutableIntState, textsSelectedId: MutableIntState, @@ -323,10 +323,12 @@ fun PrimarySimSectionImpl( callsAndSmsList.add(item) dataList.add(item) } - callsAndSmsList.add(ListPreferenceOption( + callsAndSmsList.add( + ListPreferenceOption( id = SubscriptionManager.INVALID_SUBSCRIPTION_ID, text = stringResource(id = R.string.sim_calls_ask_first_prefs_title) - )) + ) + ) } else { // hide the primary sim state.value = false @@ -341,33 +343,31 @@ fun PrimarySimSectionImpl( mutableStateOf(false) } - Category(title = stringResource(id = R.string.primary_sim_title)) { - CreatePrimarySimListPreference( - stringResource(id = R.string.primary_sim_calls_title), - callsAndSmsList, - callsSelectedId, - ImageVector.vectorResource(R.drawable.ic_phone), - actionSetCalls - ) - CreatePrimarySimListPreference( - stringResource(id = R.string.primary_sim_texts_title), - callsAndSmsList, - textsSelectedId, - Icons.AutoMirrored.Outlined.Message, - actionSetTexts - ) - CreatePrimarySimListPreference( - stringResource(id = R.string.mobile_data_settings_title), - dataList, - mobileDataSelectedId, - Icons.Outlined.DataUsage, - actionSetMobileData - ) - } + CreatePrimarySimListPreference( + stringResource(id = R.string.primary_sim_calls_title), + callsAndSmsList, + callsSelectedId, + ImageVector.vectorResource(R.drawable.ic_phone), + actionSetCalls + ) + CreatePrimarySimListPreference( + stringResource(id = R.string.primary_sim_texts_title), + callsAndSmsList, + textsSelectedId, + Icons.AutoMirrored.Outlined.Message, + actionSetTexts + ) + CreatePrimarySimListPreference( + stringResource(id = R.string.mobile_data_settings_title), + dataList, + mobileDataSelectedId, + Icons.Outlined.DataUsage, + actionSetMobileData + ) val autoDataTitle = stringResource(id = R.string.primary_sim_automatic_data_title) val autoDataSummary = stringResource(id = R.string.primary_sim_automatic_data_msg) - SwitchPreference(remember { + SwitchPreference( object : SwitchPreferenceModel { override val title = autoDataTitle override val summary = { autoDataSummary } @@ -375,6 +375,11 @@ fun PrimarySimSectionImpl( if (nonDds.intValue != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { coroutineScope.launch { automaticDataChecked.value = getAutomaticData(telephonyManagerForNonDds) + Log.d( + NetworkCellularGroupProvider.name, + "NonDds:${nonDds.intValue}" + + "getAutomaticData:${automaticDataChecked.value}" + ) } } automaticDataChecked.value @@ -384,7 +389,26 @@ fun PrimarySimSectionImpl( actionSetAutoDataSwitch(it) } } - }) + ) + } +} + +@Composable +fun PrimarySimSectionImpl( + subscriptionInfoList: List, + callsSelectedId: MutableIntState, + textsSelectedId: MutableIntState, + mobileDataSelectedId: MutableIntState, + nonDds: MutableIntState, +) { + Category(title = stringResource(id = R.string.primary_sim_title)) { + PrimarySimImpl( + subscriptionInfoList, + callsSelectedId, + textsSelectedId, + mobileDataSelectedId, + nonDds + ) } } @@ -442,32 +466,42 @@ private fun showEuiccSettings(context: Context): Boolean { } suspend fun setDefaultVoice( - subscriptionManager: SubscriptionManager?, - subId: Int): Unit = withContext(Dispatchers.Default) { - subscriptionManager?.setDefaultVoiceSubscriptionId(subId) -} + subscriptionManager: SubscriptionManager?, + subId: Int +): Unit = + withContext(Dispatchers.Default) { + subscriptionManager?.setDefaultVoiceSubscriptionId(subId) + } suspend fun setDefaultSms( - subscriptionManager: SubscriptionManager?, - subId: Int): Unit = withContext(Dispatchers.Default) { - subscriptionManager?.setDefaultSmsSubId(subId) -} + subscriptionManager: SubscriptionManager?, + subId: Int +): Unit = + withContext(Dispatchers.Default) { + subscriptionManager?.setDefaultSmsSubId(subId) + } -suspend fun setDefaultData(context: Context, - subscriptionManager: SubscriptionManager?, - wifiPickerTrackerHelper: WifiPickerTrackerHelper?, - subId: Int): Unit = withContext(Dispatchers.Default) { - subscriptionManager?.setDefaultDataSubId(subId) - MobileNetworkUtils.setMobileDataEnabled( +suspend fun setDefaultData( + context: Context, + subscriptionManager: SubscriptionManager?, + wifiPickerTrackerHelper: WifiPickerTrackerHelper?, + subId: Int +): Unit = + withContext(Dispatchers.Default) { + subscriptionManager?.setDefaultDataSubId(subId) + MobileNetworkUtils.setMobileDataEnabled( context, subId, true /* enabled */, - true /* disableOtherSubscriptions */) - if (wifiPickerTrackerHelper != null - && !wifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(subId)) { - wifiPickerTrackerHelper.setCarrierNetworkEnabled(true) + true /* disableOtherSubscriptions */ + ) + if (wifiPickerTrackerHelper != null + && !wifiPickerTrackerHelper.isCarrierNetworkProvisionEnabled(subId) + ) { + wifiPickerTrackerHelper.setCarrierNetworkEnabled(true) + } } -} + suspend fun getAutomaticData(telephonyManagerForNonDds: TelephonyManager?): Boolean = withContext(Dispatchers.Default) { telephonyManagerForNonDds != null @@ -478,7 +512,7 @@ suspend fun getAutomaticData(telephonyManagerForNonDds: TelephonyManager?): Bool suspend fun setAutomaticData(telephonyManager: TelephonyManager?, newState: Boolean): Unit = withContext(Dispatchers.Default) { Log.d( - "NetworkCellularGroupProvider", + NetworkCellularGroupProvider.name, "setAutomaticData: MOBILE_DATA_POLICY_AUTO_DATA_SWITCH as $newState" ) telephonyManager?.setMobileDataPolicyEnabled( diff --git a/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt b/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt index 999abb486bd..a5f55d09ff5 100644 --- a/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt +++ b/src/com/android/settings/spa/network/SimOnboardingPrimarySim.kt @@ -24,7 +24,6 @@ import androidx.compose.material.icons.outlined.SignalCellularAlt import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableIntState import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector @@ -82,7 +81,7 @@ fun SimOnboardingPrimarySimImpl( callsSelectedId.intValue = onboardingService.targetPrimarySimCalls textsSelectedId.intValue = onboardingService.targetPrimarySimTexts mobileDataSelectedId.intValue = onboardingService.targetPrimarySimMobileData - PrimarySimSectionImpl( + PrimarySimImpl( subscriptionInfoList = selectedSubscriptionInfoList, callsSelectedId = callsSelectedId, textsSelectedId = textsSelectedId, @@ -110,7 +109,7 @@ fun CreatePrimarySimListPreference( selectedId: MutableIntState, icon: ImageVector, onIdSelected: (id: Int) -> Unit -) = ListPreference(remember { +) = ListPreference( object : ListPreferenceModel { override val title = title override val options = list @@ -119,5 +118,4 @@ fun CreatePrimarySimListPreference( override val icon = @Composable { SettingsIcon(icon) } - } }) \ No newline at end of file From 6d0b41af5a9f58f23d8974d3fa3caac796124a0b Mon Sep 17 00:00:00 2001 From: songferngwang Date: Mon, 19 Feb 2024 02:58:43 +0000 Subject: [PATCH 2/5] [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 --- .../settings/network/SimOnboardingActivity.kt | 56 +++++++++++++------ .../settings/network/SimOnboardingService.kt | 35 +++++++----- .../spa/network/SimOnboardingLabelSimTest.kt | 1 - .../network/SimOnboardingPageProviderTest.kt | 1 - .../network/SimOnboardingPrimarySimTest.kt | 1 - .../spa/network/SimOnboardingSelectSimTest.kt | 1 - 6 files changed, 60 insertions(+), 35 deletions(-) diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt index f5dc88667fb..abeeb6c733a 100644 --- a/src/com/android/settings/network/SimOnboardingActivity.kt +++ b/src/com/android/settings/network/SimOnboardingActivity.kt @@ -22,19 +22,25 @@ import android.content.Intent import android.os.Bundle import android.telephony.SubscriptionManager import android.util.Log -import android.view.MotionEvent import androidx.activity.compose.setContent 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.size +import androidx.compose.foundation.layout.width import androidx.compose.material.icons.Icons 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.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.SheetState +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState 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.framework.theme.SettingsDimension 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.spaprivileged.framework.common.userManager import kotlinx.coroutines.CoroutineScope @@ -193,26 +200,43 @@ class SimOnboardingActivity : SpaBaseDialogActivity() { } } + @OptIn(ExperimentalMaterial3Api::class) @Composable fun ProgressDialogImpl() { - // TODO: 1. Create the SPA's ProgressDialog and using SPA's widget - val dialog: ProgressDialog = object : ProgressDialog(this) { - override fun onTouchEvent(event: MotionEvent): Boolean { - return true + if(showDialog.value) { + // TODO: Create the SPA's ProgressDialog and using SPA's widget + BasicAlertDialog( + 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 fun registerSidecarReceiverFlow(){ switchToEuiccSubscriptionSidecar?.sidecarReceiverFlow() diff --git a/src/com/android/settings/network/SimOnboardingService.kt b/src/com/android/settings/network/SimOnboardingService.kt index 86793851f71..f33abf67b64 100644 --- a/src/com/android/settings/network/SimOnboardingService.kt +++ b/src/com/android/settings/network/SimOnboardingService.kt @@ -45,7 +45,6 @@ class SimOnboardingService { var activeSubInfoList: List = listOf() var slotInfoList: List = listOf() var uiccCardInfoList: List = listOf() - var selectedSubInfoList: MutableList = mutableListOf() var targetPrimarySimCalls: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimTexts: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID var targetPrimarySimMobileData: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID @@ -56,10 +55,8 @@ class SimOnboardingService { Log.w(TAG, "No DDS") return SubscriptionManager.INVALID_SUBSCRIPTION_ID } - return selectedSubInfoList - .filter { info -> - (info.simSlotIndex != -1) && (info.subscriptionId != targetPrimarySimMobileData) - } + return userSelectedSubInfoList + .filter { info -> info.subscriptionId != targetPrimarySimMobileData } .map { it.subscriptionId } .firstOrNull() ?: SubscriptionManager.INVALID_SUBSCRIPTION_ID } @@ -118,7 +115,6 @@ class SimOnboardingService { && targetSubInfo != null && activeSubInfoList.isNotEmpty() && slotInfoList.isNotEmpty() - && selectedSubInfoList.isNotEmpty() } fun clear() { @@ -128,7 +124,6 @@ class SimOnboardingService { activeSubInfoList = listOf() slotInfoList = listOf() uiccCardInfoList = listOf() - selectedSubInfoList = mutableListOf() targetPrimarySimCalls = -1 targetPrimarySimTexts = -1 targetPrimarySimMobileData = -1 @@ -151,7 +146,8 @@ class SimOnboardingService { ThreadUtils.postOnBackgroundThread { activeSubInfoList = SubscriptionUtil.getActiveSubscriptions(subscriptionManager) availableSubInfoList = SubscriptionUtil.getAvailableSubscriptions(context) - targetSubInfo = availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId } + targetSubInfo = + availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId } targetSubInfo?.let { userSelectedSubInfoList.add(it) } Log.d( TAG, "targetSubId: $targetSubId" + ", targetSubInfo: $targetSubInfo" + @@ -186,7 +182,6 @@ class SimOnboardingService { targetSubInfo?.let { list.add(it) } } - Log.d(TAG, "list: $list") return list.toList() } @@ -206,7 +201,10 @@ class SimOnboardingService { return } 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 { @@ -278,11 +276,18 @@ class SimOnboardingService { targetPrimarySimMobileData ) - - val telephonyManagerForNonDds: TelephonyManager? = - context.getSystemService(TelephonyManager::class.java) - ?.createForSubscriptionId(targetNonDds) - setAutomaticData(telephonyManagerForNonDds, targetPrimarySimAutoDataSwitch) + var nonDds = targetNonDds + Log.d( + TAG, + "setAutomaticData: targetNonDds: $nonDds," + + " 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 callback(SimOnboardingActivity.CALLBACK_FINISH) diff --git a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingLabelSimTest.kt b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingLabelSimTest.kt index 8e12b20cd98..44a5037e576 100644 --- a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingLabelSimTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingLabelSimTest.kt @@ -47,7 +47,6 @@ class SimOnboardingLabelSimTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) - on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) 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 82dba76c7b7..d1847c8d48f 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 @@ -47,7 +47,6 @@ class SimOnboardingPageProviderTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) - on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) diff --git a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPrimarySimTest.kt b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPrimarySimTest.kt index 9cb8909a542..d9c762db332 100644 --- a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPrimarySimTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingPrimarySimTest.kt @@ -48,7 +48,6 @@ class SimOnboardingPrimarySimTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) - on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) diff --git a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingSelectSimTest.kt b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingSelectSimTest.kt index 45667ef00ef..e063f69717d 100644 --- a/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingSelectSimTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/network/SimOnboardingSelectSimTest.kt @@ -47,7 +47,6 @@ class SimOnboardingSelectSimTest { on { activeSubInfoList }.doReturn(listOf()) on { slotInfoList }.doReturn(listOf()) on { uiccCardInfoList }.doReturn(listOf()) - on { selectedSubInfoList }.doReturn(mutableListOf()) on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) on { targetPrimarySimTexts }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME) From bf7a8d765e039e26423755f46a9eb2cfa9fc54a6 Mon Sep 17 00:00:00 2001 From: songferngwang Date: Mon, 19 Feb 2024 03:49:43 +0000 Subject: [PATCH 3/5] [SimsUiEnhancement] The primary SIMs ListPreference's items show number Add the number at item's summary at ListPreference Bug: 318310357 Bug: 298898436 Bug: 298891941 Test: Build pass atest ListPreferenceTest Change-Id: I21be34ee73d9532b88443928442def9816ac3bf7 --- .../settings/spa/network/NetworkCellularGroupProvider.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt index 7330366ca4f..351ac777d8d 100644 --- a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt +++ b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt @@ -318,7 +318,8 @@ fun PrimarySimImpl( for (info in subscriptionInfoList) { var item = ListPreferenceOption( id = info.subscriptionId, - text = "${info.displayName}" + text = "${info.displayName}", + summary = "${info.number}" ) callsAndSmsList.add(item) dataList.add(item) From 62df3efdd778e5d1e9ae3a09422bf9ca88970c96 Mon Sep 17 00:00:00 2001 From: josephpv Date: Wed, 7 Feb 2024 23:58:00 +0000 Subject: [PATCH 4/5] Handle listing of PS apps in Apps > Special App Access > Device Admin Apps Currently Device Admin Apps page shows apps from Private space even when PS is locked. This change takes care to hide PS apps from the list when private profile is in quiet mode and on disabling quiet mode PS apps are shown in the list. Also takes care to update the active apps summary count to not include PS apps when private profile is in quiet mode. Recording link : b/324311892#comment2 Bug: 324311892 Test: Manual Change-Id: If4199ecad0a228c8e491778fb62c09c8b3f20604 --- .../DeviceAdminListPreferenceController.java | 12 ++++++++++++ .../EnterprisePrivacyFeatureProviderImpl.java | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java index 55ba8acafad..949577b8c14 100644 --- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java +++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java @@ -32,6 +32,7 @@ import android.content.pm.ActivityInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.pm.UserProperties; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; @@ -156,12 +157,23 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle mAdmins.clear(); final List profiles = mUm.getUserProfiles(); for (UserHandle profile : profiles) { + if (shouldSkipProfile(profile)) { + continue; + } final int profileId = profile.getIdentifier(); updateAvailableAdminsForProfile(profileId); } Collections.sort(mAdmins); } + private boolean shouldSkipProfile(UserHandle profile) { + return android.os.Flags.allowPrivateProfile() + && android.multiuser.Flags.handleInterleavedSettingsForPrivateSpace() + && mUm.isQuietModeEnabled(profile) + && mUm.getUserProperties(profile).getShowInQuietMode() + == UserProperties.SHOW_IN_QUIET_MODE_HIDDEN; + } + private void refreshUI() { if (mPreferenceGroup == null) { return; diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index b1ffcf145b4..887fc3215a2 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -26,6 +26,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.UserInfo; +import android.content.pm.UserProperties; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.VpnManager; @@ -220,6 +221,9 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe public int getNumberOfActiveDeviceAdminsForCurrentUserAndManagedProfile() { int activeAdmins = 0; for (final UserInfo userInfo : mUm.getProfiles(MY_USER_ID)) { + if (shouldSkipProfile(userInfo)) { + continue; + } final List activeAdminsForUser = mDpm.getActiveAdminsAsUser(userInfo.id); if (activeAdminsForUser != null) { @@ -250,6 +254,14 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe return false; } + private boolean shouldSkipProfile(UserInfo userInfo) { + return android.os.Flags.allowPrivateProfile() + && android.multiuser.Flags.handleInterleavedSettingsForPrivateSpace() + && userInfo.isQuietModeEnabled() + && mUm.getUserProperties(userInfo.getUserHandle()).getShowInQuietMode() + == UserProperties.SHOW_IN_QUIET_MODE_HIDDEN; + } + private Intent getParentalControlsIntent() { final ComponentName componentName = mDpm.getProfileOwnerOrDeviceOwnerSupervisionComponent(new UserHandle(MY_USER_ID)); From 192f95ee5eb3abb8689a0b1efc96df127eac8a84 Mon Sep 17 00:00:00 2001 From: songferngwang Date: Tue, 20 Feb 2024 08:29:00 +0000 Subject: [PATCH 5/5] Changing the SettingsOutlinedTextField's shape Bug: 318310357 Bug: 298898436 Bug: 298891941 Test: build pass Change-Id: I24de2f78844744fd9cc663f45598f6fdf7b897be --- .../android/settings/spa/network/SimOnboardingLabelSim.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/spa/network/SimOnboardingLabelSim.kt b/src/com/android/settings/spa/network/SimOnboardingLabelSim.kt index e88c5c71347..3b2d5ec0d80 100644 --- a/src/com/android/settings/spa/network/SimOnboardingLabelSim.kt +++ b/src/com/android/settings/spa/network/SimOnboardingLabelSim.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.SignalCellularAlt +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -91,11 +92,13 @@ private fun labelSimBody(onboardingService: SimOnboardingService) { }, title = stringResource(R.string.sim_onboarding_label_sim_dialog_title), text = { - Text(summaryNumber) + Text(summaryNumber, + modifier = Modifier.padding(bottom = SettingsDimension.itemPaddingVertical)) SettingsOutlinedTextField( value = titleSimName, label = stringResource(R.string.sim_onboarding_label_sim_dialog_label), - enabled = true + enabled = true, + shape = MaterialTheme.shapes.extraLarge ) { titleSimName = it }