From 2af5588692df1c59522f7bf86f1326655d76b97e Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Wed, 25 May 2022 09:37:10 +0800 Subject: [PATCH 1/3] Fix unable to toggle off Pause app activity The "Pause app activity if unused" SwitchPreference under App info page. Currently, the preference controller updates the UI state in the onOpChanged(), which is unnecessary and is called in another non-UI thread. Not updating state in onOpChanged() to fix. Note: This controller implements the LifecycleObserver to handle lifecycle related logic, but it's actually a no-op before change If9e48e44267de8e89a5e8f45d256719130936320. So it used to work fine without the OnOpChangedListener, we can remove it now. Fix: 227762370 Test: manual Change-Id: I33f1f55a706407d7b409c3544f9889c45855b34d --- ...HibernationSwitchPreferenceController.java | 28 +------------------ 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java b/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java index f0b332904de..e3c577b189e 100644 --- a/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java @@ -33,13 +33,9 @@ import android.content.Context; import android.content.pm.PackageManager; import android.permission.PermissionControllerManager; import android.provider.DeviceConfig; -import android.text.TextUtils; import android.util.Slog; import androidx.annotation.NonNull; -import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.LifecycleObserver; -import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.Preference; import androidx.preference.SwitchPreference; @@ -49,8 +45,7 @@ import com.google.common.annotations.VisibleForTesting; * A PreferenceController handling the logic for exempting hibernation of app */ public final class HibernationSwitchPreferenceController extends AppInfoPreferenceControllerBase - implements LifecycleObserver, AppOpsManager.OnOpChangedListener, - Preference.OnPreferenceChangeListener { + implements Preference.OnPreferenceChangeListener { private static final String TAG = "HibernationSwitchPrefController"; private String mPackageName; private final AppOpsManager mAppOpsManager; @@ -69,19 +64,6 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen mPermissionControllerManager = context.getSystemService(PermissionControllerManager.class); } - @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) - public void onResume() { - if (mIsPackageSet) { - mAppOpsManager.startWatchingMode( - OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, mPackageName, this); - } - } - - @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) - public void onPause() { - mAppOpsManager.stopWatchingMode(this); - } - @Override public int getAvailabilityStatus() { return isHibernationEnabled() && mIsPackageSet ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; @@ -148,14 +130,6 @@ public final class HibernationSwitchPreferenceController extends AppInfoPreferen return mode == MODE_DEFAULT ? mIsPackageExemptByDefault : mode != MODE_ALLOWED; } - @Override - public void onOpChanged(String op, String packageName) { - if (OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED.equals(op) - && TextUtils.equals(mPackageName, packageName)) { - updateState(mPreference); - } - } - @Override public boolean onPreferenceChange(Preference preference, Object isChecked) { try { From 948f51209812f541b2bcbeeb6c027a2e0462a7e5 Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Tue, 24 May 2022 18:21:59 +0800 Subject: [PATCH 2/3] Changing the condition since the esim may be removable The condition whether the slot is esim slot should use getIsEuicc api since the esim may be removable. Bug: 233338345 Test: atest UiccSlotUtilTest Change-Id: I47dc068e57a0faa7f7ce85af7933a48caa2c93e4 --- .../settings/network/EnableMultiSimSidecar.java | 3 ++- src/com/android/settings/network/UiccSlotUtil.java | 3 ++- .../ToggleSubscriptionDialogActivity.java | 1 + .../sim/receivers/SimSlotChangeHandler.java | 2 +- .../android/settings/network/UiccSlotUtilTest.java | 14 ++++++++++++++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/network/EnableMultiSimSidecar.java b/src/com/android/settings/network/EnableMultiSimSidecar.java index aefd55f00e8..5545a69dd21 100644 --- a/src/com/android/settings/network/EnableMultiSimSidecar.java +++ b/src/com/android/settings/network/EnableMultiSimSidecar.java @@ -190,7 +190,8 @@ public class EnableMultiSimSidecar extends AsyncTaskSidecar { Set activeRemovableLogicalSlotIds = new ArraySet<>(); for (UiccSlotInfo info : infos) { for (UiccPortInfo portInfo :info.getPorts()) { - if (info != null && portInfo.isActive() && info.isRemovable()) { + if (info != null && portInfo.isActive() && info.isRemovable() + && !info.getIsEuicc()) { activeRemovableLogicalSlotIds.add(portInfo.getLogicalSlotIndex()); } } diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java index 813b9d6826d..4c8a7d5f999 100644 --- a/src/com/android/settings/network/UiccSlotUtil.java +++ b/src/com/android/settings/network/UiccSlotUtil.java @@ -193,7 +193,7 @@ public class UiccSlotUtil { if (slotInfo == null) { return false; } - return !slotInfo.isRemovable(); + return slotInfo.getIsEuicc(); }) .findFirst().orElse(-1); @@ -249,6 +249,7 @@ public class UiccSlotUtil { if (slotId == INVALID_PHYSICAL_SLOT_ID) { for (int i = 0; i < slots.length; i++) { if (slots[i].isRemovable() + && !slots[i].getIsEuicc() && !slots[i].getPorts().stream().findFirst().get().isActive() && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_ERROR && slots[i].getCardStateInfo() != UiccSlotInfo.CARD_STATE_INFO_RESTRICTED) { diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java index f5f18b4b9ee..f632a71119d 100644 --- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java +++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java @@ -592,6 +592,7 @@ public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogAc .anyMatch( slot -> slot != null && slot.isRemovable() + && !slot.getIsEuicc() && slot.getPorts().stream().anyMatch( port -> port.isActive()) && slot.getCardStateInfo() diff --git a/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java b/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java index 4a6b96c1fa3..da3db8b1369 100644 --- a/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java +++ b/src/com/android/settings/sim/receivers/SimSlotChangeHandler.java @@ -294,7 +294,7 @@ public class SimSlotChangeHandler { return null; } for (UiccSlotInfo slotInfo : slotInfos) { - if (slotInfo != null && slotInfo.isRemovable()) { + if (slotInfo != null && slotInfo.isRemovable() && !slotInfo.getIsEuicc()) { return slotInfo; } } diff --git a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java index 2cf984558be..5aa73eaa308 100644 --- a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java +++ b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java @@ -92,6 +92,14 @@ public class UiccSlotUtilTest { assertThat(testSlot).isEqualTo(0); } + @Test + public void getEsimSlotId_twoSimSlotsDeviceAndRemovableEsimIsSlot1_returnTheCorrectEsimSlot() { + when(mTelephonyManager.getUiccSlotsInfo()).thenReturn( + twoSimSlotsDeviceActivePsimActiveRemovableEsim()); + int testSlot = UiccSlotUtil.getEsimSlotId(mContext); + + assertThat(testSlot).isEqualTo(1); + } @Test public void getEsimSlotId_twoSimSlotsDeviceAndEsimIsSlot1_returnTheCorrectEsimSlot() { @@ -729,6 +737,12 @@ public class UiccSlotUtilTest { createUiccSlotInfo(true, false, 1, true)}; } + private UiccSlotInfo[] twoSimSlotsDeviceActivePsimActiveRemovableEsim() { + return new UiccSlotInfo[]{ + createUiccSlotInfo(false, true, 0, true), + createUiccSlotInfo(true, true, 1, true)}; + } + private UiccSlotInfo[] twoSimSlotsDeviceActiveEsimActivePsim() { return new UiccSlotInfo[]{ createUiccSlotInfo(true, false, 0, true), From bdda48ebe5a45964f7c04614ca75f22c30567078 Mon Sep 17 00:00:00 2001 From: Hank Sheng Date: Tue, 24 May 2022 11:08:19 +0000 Subject: [PATCH 3/3] Create the glifv4 theme and set to glifv4 theme when the themestring is glifv4. screen shot: https://hsv.googleplex.com/5487921525161984 https://hsv.googleplex.com/4853914928152576 https://hsv.googleplex.com/6492643191160832 https://hsv.googleplex.com/5915886260060160 https://hsv.googleplex.com/6321050657751040 https://hsv.googleplex.com/6222016362315776 Bug: 233036258 Bug: 233032365 Change-Id: If2bb4a82912bfdd18dc17ced11adc59eaf474bed --- res/values-night/themes_suw.xml | 1 + res/values/themes_suw.xml | 38 +++++++++++++++++++ .../android/settings/SetupWizardUtils.java | 9 +++-- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/res/values-night/themes_suw.xml b/res/values-night/themes_suw.xml index dea7b1a5f78..527918b8083 100644 --- a/res/values-night/themes_suw.xml +++ b/res/values-night/themes_suw.xml @@ -21,6 +21,7 @@ + + + + @@ -238,6 +275,7 @@