Merge "Face and fingerprint unlock strings for private space" into main
diff --git a/res/layout/data_usage_summary_preference.xml b/res/layout/data_usage_summary_preference.xml
index 4cbd958..e678b36 100644
--- a/res/layout/data_usage_summary_preference.xml
+++ b/res/layout/data_usage_summary_preference.xml
@@ -18,6 +18,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:minHeight="172dp"
     android:paddingTop="8dp"
     android:paddingBottom="16dp"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
@@ -37,7 +38,6 @@
         android:id="@+id/usage_layout"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingTop="12dp"
         android:orientation="horizontal">
 
         <TextView android:id="@+id/data_usage_view"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9e10590..5bf786e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -11428,7 +11428,7 @@
     <string name="media_output_default_summary">This device</string>
 
     <!-- Summary for media output when audio sharing. [CHAR LIMIT=NONE] -->
-    <string name="media_output_audio_sharing">Audio sharing</string>
+    <string name="media_output_audio_sharing">Sharing audio</string>
 
     <!-- Summary for media output settings when device is in ongoing call state. -->
     <string name="media_out_summary_ongoing_call_state">Unavailable during calls</string>
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index e017143..44915fe 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -66,6 +66,7 @@
 public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment {
     public static final String KEY_DEVICE_ADDRESS = "device_address";
     private static final String TAG = "BTDeviceDetailsFrg";
+    private static final int METADATA_FAST_PAIR_CUSTOMIZED_FIELDS = 25;
 
     @VisibleForTesting
     static int EDIT_DEVICE_NAME_ITEM_ID = Menu.FIRST;
@@ -95,11 +96,14 @@
     LocalBluetoothManager mManager;
     @VisibleForTesting
     CachedBluetoothDevice mCachedDevice;
+    BluetoothAdapter mBluetoothAdapter;
 
     @Nullable
     InputDevice mInputDevice;
 
     private UserManager mUserManager;
+    int mExtraControlViewWidth = 0;
+    boolean mExtraControlUriLoaded = false;
 
     private final BluetoothCallback mBluetoothCallback =
             new BluetoothCallback() {
@@ -115,6 +119,16 @@
                 }
             };
 
+    private final BluetoothAdapter.OnMetadataChangedListener mExtraControlMetadataListener =
+            (device, key, value) -> {
+                if (key == METADATA_FAST_PAIR_CUSTOMIZED_FIELDS
+                        && mExtraControlViewWidth > 0
+                        && !mExtraControlUriLoaded) {
+                    Log.i(TAG, "Update extra control UI because of metadata change.");
+                    updateExtraControlUri(mExtraControlViewWidth);
+                }
+            };
+
     public BluetoothDeviceDetailsFragment() {
         super(DISALLOW_CONFIG_BLUETOOTH);
     }
@@ -173,6 +187,7 @@
     public void onAttach(Context context) {
         mDeviceAddress = getArguments().getString(KEY_DEVICE_ADDRESS);
         mManager = getLocalBluetoothManager(context);
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
         mCachedDevice = getCachedDevice(mDeviceAddress);
         mUserManager = getUserManager();
 
@@ -202,12 +217,18 @@
                 : null);
 
         mManager.getEventManager().registerCallback(mBluetoothCallback);
+        mBluetoothAdapter.addOnMetadataChangedListener(
+                mCachedDevice.getDevice(),
+                context.getMainExecutor(),
+                mExtraControlMetadataListener);
     }
 
     @Override
     public void onDetach() {
         super.onDetach();
         mManager.getEventManager().unregisterCallback(mBluetoothCallback);
+        mBluetoothAdapter.removeOnMetadataChangedListener(
+                mCachedDevice.getDevice(), mExtraControlMetadataListener);
     }
 
     private void updateExtraControlUri(int viewWidth) {
@@ -222,9 +243,9 @@
                 controlUri = Uri.parse(uri + viewWidth);
             } catch (NullPointerException exception) {
                 Log.d(TAG, "unable to parse uri");
-                controlUri = null;
             }
         }
+        mExtraControlUriLoaded |= controlUri != null;
         final SlicePreferenceController slicePreferenceController = use(
                 SlicePreferenceController.class);
         slicePreferenceController.setSliceUri(sliceEnabled ? controlUri : null);
@@ -253,7 +274,8 @@
                     if (view.getWidth() <= 0) {
                         return;
                     }
-                    updateExtraControlUri(view.getWidth() - getPaddingSize());
+                    mExtraControlViewWidth = view.getWidth() - getPaddingSize();
+                    updateExtraControlUri(mExtraControlViewWidth);
                     view.getViewTreeObserver().removeOnGlobalLayoutListener(
                             mOnGlobalLayoutListener);
                 }
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
index 93d930c..6500501 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
@@ -20,6 +20,7 @@
 import android.content.Context;
 import android.graphics.Typeface;
 import android.icu.text.MessageFormat;
+import android.telephony.SubscriptionPlan;
 import android.text.Spannable;
 import android.text.SpannableString;
 import android.text.TextUtils;
@@ -66,7 +67,7 @@
     @Nullable
     private Long mCycleEndTimeMs;
     /** The time of the last update in standard milliseconds since the epoch */
-    private long mSnapshotTimeMs;
+    private long mSnapshotTimeMs = SubscriptionPlan.TIME_UNKNOWN;
     /** Name of carrier, or null if not available */
     private CharSequence mCarrierName;
     private CharSequence mLimitInfoText;
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
index 37d2fce..4acaeea 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
@@ -767,6 +767,10 @@
     }
 
     private class BatteryChartAccessibilityNodeProvider extends AccessibilityNodeProvider {
+        private static final int UNDEFINED = Integer.MIN_VALUE;
+
+        private int mAccessibilityFocusNodeViewId = UNDEFINED;
+
         @Override
         public AccessibilityNodeInfo createAccessibilityNodeInfo(int virtualViewId) {
             if (virtualViewId == AccessibilityNodeProvider.HOST_VIEW_ID) {
@@ -794,6 +798,7 @@
                             R.string.battery_usage_time_info_and_battery_level,
                             slotTimeInfo,
                             batteryLevelInfo));
+            childInfo.setAccessibilityFocused(virtualViewId == mAccessibilityFocusNodeViewId);
 
             final Rect bounds = new Rect();
             getBoundsOnScreen(bounds, true);
@@ -815,10 +820,14 @@
                     return true;
 
                 case AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS:
+                    mAccessibilityFocusNodeViewId = virtualViewId;
                     return sendAccessibilityEvent(
                             virtualViewId, AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
 
                 case AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS:
+                    if (mAccessibilityFocusNodeViewId == virtualViewId) {
+                        mAccessibilityFocusNodeViewId = UNDEFINED;
+                    }
                     return sendAccessibilityEvent(
                             virtualViewId,
                             AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
diff --git a/src/com/android/settings/notification/modes/AbstractZenModePreferenceController.java b/src/com/android/settings/notification/modes/AbstractZenModePreferenceController.java
index b5e5dc7..587f640 100644
--- a/src/com/android/settings/notification/modes/AbstractZenModePreferenceController.java
+++ b/src/com/android/settings/notification/modes/AbstractZenModePreferenceController.java
@@ -16,9 +16,10 @@
 
 package com.android.settings.notification.modes;
 
-import android.app.AutomaticZenRule;
 import android.app.Flags;
 import android.content.Context;
+import android.service.notification.ZenPolicy;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -26,11 +27,17 @@
 
 import com.android.settingslib.core.AbstractPreferenceController;
 
+import com.google.common.base.Preconditions;
+
+import java.util.function.Function;
+
 /**
  * Base class for any preference controllers pertaining to any single Zen mode.
  */
 abstract class AbstractZenModePreferenceController extends AbstractPreferenceController {
 
+    private static final String TAG = "AbstractZenModePreferenceController";
+
     @Nullable
     protected ZenModesBackend mBackend;
 
@@ -38,7 +45,7 @@
     private ZenMode mZenMode;
 
     @NonNull
-    final String mKey;
+    private final String mKey;
 
     // ZenModesBackend should only be passed in if the preference controller may set the user's
     // policy for this zen mode. Otherwise, if the preference controller is essentially read-only
@@ -67,20 +74,56 @@
         updateState(preference);
     }
 
-    @Nullable
-    public ZenMode getMode() {
-        return mZenMode;
+    @Override
+    public final void updateState(Preference preference) {
+        super.updateState(preference);
+        if (mZenMode != null) {
+            updateState(preference, mZenMode);
+        }
     }
 
-    @Nullable
-    public AutomaticZenRule getAZR() {
-        if (mZenMode == null || mZenMode.getRule() == null) {
+    abstract void updateState(Preference preference, @NonNull ZenMode zenMode);
+
+    @Override
+    public final CharSequence getSummary() {
+        if (mZenMode != null) {
+            return getSummary(mZenMode);
+        } else {
             return null;
         }
-        return mZenMode.getRule();
     }
 
-    /** Implementations of this class should override
-     *  {@link AbstractPreferenceController#updateState(Preference)} to specify what should
-     *  happen when the preference is updated */
+    @Nullable
+    protected CharSequence getSummary(@NonNull ZenMode zenMode) {
+        return null;
+    }
+
+    /**
+     * Subclasses should call this method (or a more specific one, like {@link #savePolicy} from
+     * their {@code onPreferenceChange()} or similar, in order to apply changes to the mode being
+     * edited (e.g. {@code saveMode(mode -> { mode.setX(value); return mode; } }.
+     *
+     * @param updater Function to update the {@link ZenMode}. Modifying and returning the same
+     *                instance is ok.
+     */
+    protected final boolean saveMode(Function<ZenMode, ZenMode> updater) {
+        Preconditions.checkState(mBackend != null);
+        ZenMode mode = mZenMode;
+        if (mode == null) {
+            Log.wtf(TAG, "Cannot save mode, it hasn't been loaded (" + getClass() + ")");
+            return false;
+        }
+        mode = updater.apply(mode);
+        mBackend.updateMode(mode);
+        return true;
+    }
+
+    protected final boolean savePolicy(Function<ZenPolicy.Builder, ZenPolicy.Builder> updater) {
+        return saveMode(mode -> {
+            ZenPolicy.Builder policyBuilder = new ZenPolicy.Builder(mode.getPolicy());
+            policyBuilder = updater.apply(policyBuilder);
+            mode.setPolicy(policyBuilder.build());
+            return mode;
+        });
+    }
 }
diff --git a/src/com/android/settings/notification/modes/ZenMode.java b/src/com/android/settings/notification/modes/ZenMode.java
index bf10cd4..058799b 100644
--- a/src/com/android/settings/notification/modes/ZenMode.java
+++ b/src/com/android/settings/notification/modes/ZenMode.java
@@ -26,6 +26,7 @@
 import android.app.NotificationManager;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.service.notification.ZenDeviceEffects;
 import android.service.notification.ZenPolicy;
 import android.util.Log;
 
@@ -151,14 +152,6 @@
     }
 
     /**
-     * Use sparingly. If you're updating a policy field, use
-     * {@link #setPolicy(android.service.notification.ZenPolicy)} instead.
-     */
-    public void setAzr(@NonNull AutomaticZenRule newRule) {
-        mRule = newRule;
-    }
-
-    /**
      * Updates the {@link ZenPolicy} of the associated {@link AutomaticZenRule} based on the
      * supplied policy. In some cases this involves conversions, so that the following call
      * to {@link #getPolicy} might return a different policy from the one supplied here.
@@ -204,6 +197,13 @@
         mRule.setZenPolicy(policy);
     }
 
+    @NonNull
+    public ZenDeviceEffects getDeviceEffects() {
+        return mRule.getDeviceEffects() != null
+                ? mRule.getDeviceEffects()
+                : new ZenDeviceEffects.Builder().build();
+    }
+
     public boolean canBeDeleted() {
         return !mIsManualDnd;
     }
diff --git a/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java
index 1d1d750..746af44 100644
--- a/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeCallsLinkPreferenceController.java
@@ -20,12 +20,15 @@
 
 import android.content.Context;
 import android.os.Bundle;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
+
 import com.android.settings.core.SubSettingLauncher;
 
-public class ZenModeCallsLinkPreferenceController extends AbstractZenModePreferenceController  {
+class ZenModeCallsLinkPreferenceController extends AbstractZenModePreferenceController  {
 
-    private ZenModeSummaryHelper mSummaryHelper;
+    private final ZenModeSummaryHelper mSummaryHelper;
 
     public ZenModeCallsLinkPreferenceController(Context context, String key,
             ZenModesBackend backend) {
@@ -34,16 +37,15 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         Bundle bundle = new Bundle();
-        bundle.putString(MODE_ID, getMode().getId());
+        bundle.putString(MODE_ID, zenMode.getId());
         // TODO(b/332937635): Update metrics category
         preference.setIntent(new SubSettingLauncher(mContext)
                 .setDestination(ZenModeCallsFragment.class.getName())
                 .setSourceMetricsCategory(0)
                 .setArguments(bundle)
                 .toIntent());
-        preference.setSummary(mSummaryHelper.getCallsSettingSummary(getMode()));
+        preference.setSummary(mSummaryHelper.getCallsSettingSummary(zenMode));
     }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java
index f69d0d6..bca7b55 100644
--- a/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeDisplayEffectPreferenceController.java
@@ -16,16 +16,10 @@
 
 package com.android.settings.notification.modes;
 
-import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_ALARMS;
-import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_EVENTS;
-import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_MEDIA;
-import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_REMINDERS;
-import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_SYSTEM;
-
-import android.app.AutomaticZenRule;
 import android.content.Context;
 import android.service.notification.ZenDeviceEffects;
-import android.service.notification.ZenPolicy;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
 import androidx.preference.TwoStatePreference;
 
@@ -38,9 +32,9 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         TwoStatePreference pref = (TwoStatePreference) preference;
-        ZenDeviceEffects effects =  getMode().getRule().getDeviceEffects();
+        ZenDeviceEffects effects =  zenMode.getRule().getDeviceEffects();
         if (effects == null) {
             pref.setChecked(false);
         } else {
@@ -62,33 +56,27 @@
     }
 
     @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
+    public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
         final boolean allow = (Boolean) newValue;
-
-        ZenDeviceEffects currEffects =  getMode().getRule().getDeviceEffects();
-        ZenDeviceEffects.Builder updatedEffects = currEffects == null
-                ? new ZenDeviceEffects.Builder()
-                : new ZenDeviceEffects.Builder(getMode().getRule().getDeviceEffects());
-        switch (getPreferenceKey()) {
-            case "effect_greyscale":
-                updatedEffects.setShouldDisplayGrayscale(allow);
-                break;
-            case "effect_aod":
-                updatedEffects.setShouldSuppressAmbientDisplay(allow);
-                break;
-            case "effect_wallpaper":
-                updatedEffects.setShouldDimWallpaper(allow);
-                break;
-            case "effect_dark_theme":
-                updatedEffects.setShouldUseNightMode(allow);
-                break;
-        }
-        AutomaticZenRule updatedAzr = new AutomaticZenRule.Builder(getMode().getRule())
-                .setDeviceEffects(updatedEffects.build())
-                .build();
-        getMode().setAzr(updatedAzr);
-        mBackend.updateMode(getMode());
-
-        return true;
+        return saveMode(zenMode -> {
+            ZenDeviceEffects.Builder updatedEffects = new ZenDeviceEffects.Builder(
+                    zenMode.getDeviceEffects());
+            switch (getPreferenceKey()) {
+                case "effect_greyscale":
+                    updatedEffects.setShouldDisplayGrayscale(allow);
+                    break;
+                case "effect_aod":
+                    updatedEffects.setShouldSuppressAmbientDisplay(allow);
+                    break;
+                case "effect_wallpaper":
+                    updatedEffects.setShouldDimWallpaper(allow);
+                    break;
+                case "effect_dark_theme":
+                    updatedEffects.setShouldUseNightMode(allow);
+                    break;
+            }
+            zenMode.getRule().setDeviceEffects(updatedEffects.build());
+            return zenMode;
+        });
     }
 }
diff --git a/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java
index 943874a..8720a4b 100644
--- a/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeDisplayLinkPreferenceController.java
@@ -20,12 +20,15 @@
 
 import android.content.Context;
 import android.os.Bundle;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
+
 import com.android.settings.core.SubSettingLauncher;
 
-public class ZenModeDisplayLinkPreferenceController extends AbstractZenModePreferenceController  {
+class ZenModeDisplayLinkPreferenceController extends AbstractZenModePreferenceController  {
 
-    ZenModeSummaryHelper mSummaryHelper;
+    private final ZenModeSummaryHelper mSummaryHelper;
 
     public ZenModeDisplayLinkPreferenceController(Context context, String key,
             ZenModesBackend backend) {
@@ -34,10 +37,9 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
+    void updateState(Preference preference, @NonNull ZenMode zenMode) {
         Bundle bundle = new Bundle();
-        bundle.putString(MODE_ID, getMode().getId());
+        bundle.putString(MODE_ID, zenMode.getId());
         // TODO(b/332937635): Update metrics category
         preference.setIntent(new SubSettingLauncher(mContext)
                 .setDestination(ZenModeDisplayFragment.class.getName())
@@ -47,7 +49,7 @@
     }
 
     @Override
-    public CharSequence getSummary() {
-        return mSummaryHelper.getDisplayEffectsSummary(getMode());
+    public CharSequence getSummary(@NonNull ZenMode zenMode) {
+        return mSummaryHelper.getDisplayEffectsSummary(zenMode);
     }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/notification/modes/ZenModeHeaderController.java b/src/com/android/settings/notification/modes/ZenModeHeaderController.java
index f55c02d..f791519 100644
--- a/src/com/android/settings/notification/modes/ZenModeHeaderController.java
+++ b/src/com/android/settings/notification/modes/ZenModeHeaderController.java
@@ -47,9 +47,8 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        ZenMode mode = getMode();
-        if (mode == null || mFragment == null) {
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
+        if (mFragment == null) {
             return;
         }
 
@@ -62,9 +61,9 @@
         }
 
         FutureUtil.whenDone(
-                mode.getIcon(IconLoader.getInstance(mContext)),
+                zenMode.getIcon(IconLoader.getInstance(mContext)),
                 icon -> mHeaderController.setIcon(icon)
-                        .setLabel(mode.getRule().getName())
+                        .setLabel(zenMode.getRule().getName())
                         .done(false /* rebindActions */),
                 mContext.getMainExecutor());
     }
diff --git a/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java
index 8261008..300ebbc 100644
--- a/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeMessagesLinkPreferenceController.java
@@ -20,10 +20,13 @@
 
 import android.content.Context;
 import android.os.Bundle;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
+
 import com.android.settings.core.SubSettingLauncher;
 
-public class ZenModeMessagesLinkPreferenceController extends AbstractZenModePreferenceController {
+class ZenModeMessagesLinkPreferenceController extends AbstractZenModePreferenceController {
     private final ZenModeSummaryHelper mSummaryHelper;
 
     public ZenModeMessagesLinkPreferenceController(Context context, String key,
@@ -33,11 +36,9 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
-
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         Bundle bundle = new Bundle();
-        bundle.putString(MODE_ID, getMode().getId());
+        bundle.putString(MODE_ID, zenMode.getId());
         // TODO(b/332937635): Update metrics category
         preference.setIntent(new SubSettingLauncher(mContext)
                 .setDestination(ZenModeMessagesFragment.class.getName())
@@ -46,6 +47,6 @@
                 .toIntent());
 
         preference.setEnabled(true);
-        preference.setSummary(mSummaryHelper.getMessagesSettingSummary(getMode().getPolicy()));
+        preference.setSummary(mSummaryHelper.getMessagesSettingSummary(zenMode.getPolicy()));
     }
 }
diff --git a/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java
index 9807431..da3b3be 100644
--- a/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeNotifVisLinkPreferenceController.java
@@ -20,12 +20,16 @@
 
 import android.content.Context;
 import android.os.Bundle;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
+
 import com.android.settings.core.SubSettingLauncher;
 
-public class ZenModeNotifVisLinkPreferenceController extends AbstractZenModePreferenceController  {
+class ZenModeNotifVisLinkPreferenceController extends AbstractZenModePreferenceController  {
 
-    ZenModeSummaryHelper mSummaryBuilder;
+    private final ZenModeSummaryHelper mSummaryBuilder;
+
     public ZenModeNotifVisLinkPreferenceController(Context context, String key,
             ZenModesBackend backend) {
         super(context, key, backend);
@@ -33,10 +37,9 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         Bundle bundle = new Bundle();
-        bundle.putString(MODE_ID, getMode().getId());
+        bundle.putString(MODE_ID, zenMode.getId());
         // TODO(b/332937635): Update metrics category
         preference.setIntent(new SubSettingLauncher(mContext)
                 .setDestination(ZenModeNotifVisFragment.class.getName())
@@ -46,7 +49,7 @@
     }
 
     @Override
-    public CharSequence getSummary() {
-        return mSummaryBuilder.getBlockedEffectsSummary(getMode());
+    public CharSequence getSummary(@NonNull ZenMode zenMode) {
+        return mSummaryBuilder.getBlockedEffectsSummary(zenMode);
     }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceController.java
index 9b89a64..39f0d3c 100644
--- a/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceController.java
@@ -18,9 +18,12 @@
 
 import android.content.Context;
 import android.service.notification.ZenPolicy;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.CheckBoxPreference;
 import androidx.preference.Preference;
+
 import com.android.settings.widget.DisabledCheckBoxPreference;
 
 public class ZenModeNotifVisPreferenceController extends AbstractZenModePreferenceController
@@ -53,13 +56,13 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
 
-        boolean suppressed = !getMode().getPolicy().isVisualEffectAllowed(mEffect, false);
+        boolean suppressed = !zenMode.getPolicy().isVisualEffectAllowed(mEffect, false);
         boolean parentSuppressed = false;
         if (mParentSuppressedEffects != null) {
             for (@ZenPolicy.VisualEffect int parentEffect : mParentSuppressedEffects) {
-                if (!getMode().getPolicy().isVisualEffectAllowed(parentEffect, true)) {
+                if (!zenMode.getPolicy().isVisualEffectAllowed(parentEffect, true)) {
                     parentSuppressed = true;
                 }
             }
@@ -77,15 +80,6 @@
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         final boolean allowEffect = !((Boolean) newValue);
-
-        if (getMode().getPolicy().isVisualEffectAllowed(mEffect, true) != allowEffect) {
-            ZenPolicy diffPolicy = new ZenPolicy.Builder()
-                    .showVisualEffect(mEffect, allowEffect)
-                    .build();
-            getMode().setPolicy(diffPolicy);
-            mBackend.updateMode(getMode());
-        }
-
-        return true;
+        return savePolicy(policy -> policy.showVisualEffect(mEffect, allowEffect));
     }
 }
diff --git a/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java
index a43f8b0..1a00207 100644
--- a/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeOtherLinkPreferenceController.java
@@ -16,20 +16,22 @@
 
 package com.android.settings.notification.modes;
 
-
 import static com.android.settings.notification.modes.ZenModeFragmentBase.MODE_ID;
 
 import android.content.Context;
 import android.os.Bundle;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
+
 import com.android.settings.core.SubSettingLauncher;
 
 /**
  * Preference with a link and summary about what other sounds can break through the mode
  */
-public class ZenModeOtherLinkPreferenceController extends AbstractZenModePreferenceController {
+class ZenModeOtherLinkPreferenceController extends AbstractZenModePreferenceController {
 
-    ZenModeSummaryHelper mSummaryHelper;
+    private final ZenModeSummaryHelper mSummaryHelper;
 
     public ZenModeOtherLinkPreferenceController(Context context, String key,
             ZenModesBackend backend) {
@@ -38,15 +40,14 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         Bundle bundle = new Bundle();
-        bundle.putString(MODE_ID, getMode().getId());
+        bundle.putString(MODE_ID, zenMode.getId());
         preference.setIntent(new SubSettingLauncher(mContext)
                 .setDestination(ZenModeOtherFragment.class.getName())
                 .setSourceMetricsCategory(0)
                 .setArguments(bundle)
                 .toIntent());
-        preference.setSummary(mSummaryHelper.getOtherSoundCategoriesSummary(getMode()));
+        preference.setSummary(mSummaryHelper.getOtherSoundCategoriesSummary(zenMode));
     }
 }
diff --git a/src/com/android/settings/notification/modes/ZenModeOtherPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeOtherPreferenceController.java
index e31fa0f..a770164e 100644
--- a/src/com/android/settings/notification/modes/ZenModeOtherPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeOtherPreferenceController.java
@@ -23,11 +23,12 @@
 import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_SYSTEM;
 
 import android.content.Context;
-import android.service.notification.ZenPolicy;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
 import androidx.preference.TwoStatePreference;
 
-public class ZenModeOtherPreferenceController extends AbstractZenModePreferenceController
+class ZenModeOtherPreferenceController extends AbstractZenModePreferenceController
         implements Preference.OnPreferenceChangeListener {
 
     public ZenModeOtherPreferenceController(Context context, String key,
@@ -36,24 +37,15 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
-
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         TwoStatePreference pref = (TwoStatePreference) preference;
-        pref.setChecked(getMode().getPolicy().isCategoryAllowed(getCategory(), true));
+        pref.setChecked(zenMode.getPolicy().isCategoryAllowed(getCategory(), true));
     }
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         final boolean allow = (Boolean) newValue;
-
-        ZenPolicy diffPolicy = new ZenPolicy.Builder()
-                .allowCategory(getCategory(), allow)
-                .build();
-        getMode().setPolicy(diffPolicy);
-        mBackend.updateMode(getMode());
-
-        return true;
+        return savePolicy(policy -> policy.allowCategory(getCategory(), allow));
     }
 
     private int getCategory() {
diff --git a/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java b/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java
index f122006..55a83d6 100644
--- a/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModePeopleLinkPreferenceController.java
@@ -16,21 +16,22 @@
 
 package com.android.settings.notification.modes;
 
-
 import static com.android.settings.notification.modes.ZenModeFragmentBase.MODE_ID;
 
 import android.content.Context;
 import android.os.Bundle;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
-import com.android.settings.R;
+
 import com.android.settings.core.SubSettingLauncher;
 
 /**
  * Preference with a link and summary about what calls and messages can break through the mode
  */
-public class ZenModePeopleLinkPreferenceController extends AbstractZenModePreferenceController {
+class ZenModePeopleLinkPreferenceController extends AbstractZenModePreferenceController {
 
-    ZenModeSummaryHelper mSummaryHelper;
+    private final ZenModeSummaryHelper mSummaryHelper;
 
     public ZenModePeopleLinkPreferenceController(Context context, String key,
             ZenModesBackend backend) {
@@ -39,16 +40,15 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         Bundle bundle = new Bundle();
-        bundle.putString(MODE_ID, getMode().getId());
+        bundle.putString(MODE_ID, zenMode.getId());
         // TODO(b/332937635): Update metrics category
         preference.setIntent(new SubSettingLauncher(mContext)
                 .setDestination(ZenModePeopleFragment.class.getName())
                 .setSourceMetricsCategory(0)
                 .setArguments(bundle)
                 .toIntent());
-        preference.setSummary(mSummaryHelper.getPeopleSummary(getMode()));
+        preference.setSummary(mSummaryHelper.getPeopleSummary(zenMode));
     }
 }
diff --git a/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java b/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java
index a71bbe8..16e8858 100644
--- a/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModePrioritySendersPreferenceController.java
@@ -36,10 +36,13 @@
 import android.service.notification.ConversationChannelWrapper;
 import android.service.notification.ZenPolicy;
 import android.view.View;
+
+import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 import androidx.preference.PreferenceScreen;
+
 import com.android.settings.R;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.notification.app.ConversationListSettings;
@@ -59,7 +62,7 @@
  * bypass DND for calls or messages, which may be one of the following values: starred contacts, all
  * contacts, priority conversations (for messages only), anyone, or no one.
  */
-public class ZenModePrioritySendersPreferenceController
+class ZenModePrioritySendersPreferenceController
         extends AbstractZenModePreferenceController {
     private final boolean mIsMessages; // if this is false, then this preference is for calls
 
@@ -124,12 +127,12 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         if (mIsMessages) {
             updateChannelCounts();
         }
-        final int currContactsSetting = getPrioritySenders();
-        final int currConversationsSetting = getPriorityConversationSenders();
+        final int currContactsSetting = getPrioritySenders(zenMode.getPolicy());
+        final int currConversationsSetting = getPriorityConversationSenders(zenMode.getPolicy());
         for (SelectorWithWidgetPreference pref : mSelectorPreferences) {
             // for each preference, check whether the current state matches what this state
             // would look like if the button were checked.
@@ -173,17 +176,17 @@
         mNumImportantConversations = numImportantConversations;
     }
 
-    private int getPrioritySenders() {
+    private int getPrioritySenders(ZenPolicy policy) {
         if (mIsMessages) {
-            return getMode().getPolicy().getPriorityMessageSenders();
+            return policy.getPriorityMessageSenders();
         } else {
-            return getMode().getPolicy().getPriorityCallSenders();
+            return policy.getPriorityCallSenders();
         }
     }
 
-    private int getPriorityConversationSenders() {
+    private int getPriorityConversationSenders(ZenPolicy policy) {
         if (mIsMessages) {
-            return getMode().getPolicy().getPriorityConversationSenders();
+            return policy.getPriorityConversationSenders();
         }
         return CONVERSATION_SENDERS_UNSET;
     }
@@ -419,29 +422,31 @@
     @VisibleForTesting
     SelectorWithWidgetPreference.OnClickListener mSelectorClickListener =
             new SelectorWithWidgetPreference.OnClickListener() {
-        @Override
-        public void onRadioButtonClicked(SelectorWithWidgetPreference preference) {
-            // The settingsToSaveOnClick function takes whether the preference is a
-            // checkbox into account to determine whether this selection is checked or unchecked.
-            final int[] settingsToSave = settingsToSaveOnClick(preference,
-                    getPrioritySenders(), getPriorityConversationSenders());
-            final int prioritySendersSetting = settingsToSave[0];
-            final int priorityConvosSetting = settingsToSave[1];
+                @Override
+                public void onRadioButtonClicked(SelectorWithWidgetPreference preference) {
+                    savePolicy(policy -> {
+                        ZenPolicy previousPolicy = policy.build();
+                        // The settingsToSaveOnClick function takes whether the preference is a
+                        // checkbox into account to determine whether this selection is checked or
+                        // unchecked.
+                        final int[] settingsToSave = settingsToSaveOnClick(preference,
+                                getPrioritySenders(previousPolicy),
+                                getPriorityConversationSenders(previousPolicy));
+                        final int prioritySendersSetting = settingsToSave[0];
+                        final int priorityConvosSetting = settingsToSave[1];
 
-            ZenPolicy.Builder diffPolicy = new ZenPolicy.Builder();
-            if (prioritySendersSetting != PEOPLE_TYPE_UNSET) {
-                if (mIsMessages) {
-                    diffPolicy.allowMessages(prioritySendersSetting);
-
-                } else {
-                    diffPolicy.allowCalls(prioritySendersSetting);
+                        if (prioritySendersSetting != PEOPLE_TYPE_UNSET) {
+                            if (mIsMessages) {
+                                policy.allowMessages(prioritySendersSetting);
+                            } else {
+                                policy.allowCalls(prioritySendersSetting);
+                            }
+                        }
+                        if (mIsMessages && priorityConvosSetting != CONVERSATION_SENDERS_UNSET) {
+                            policy.allowConversations(priorityConvosSetting);
+                        }
+                        return policy;
+                    });
                 }
-            }
-            if (mIsMessages && priorityConvosSetting != CONVERSATION_SENDERS_UNSET) {
-                diffPolicy.allowConversations(priorityConvosSetting);
-            }
-            getMode().setPolicy(diffPolicy.build());
-            mBackend.updateMode(getMode());
-        }
-    };
+            };
 }
diff --git a/src/com/android/settings/notification/modes/ZenModeRepeatCallersPreferenceController.java b/src/com/android/settings/notification/modes/ZenModeRepeatCallersPreferenceController.java
index d6de9c2..7569051 100644
--- a/src/com/android/settings/notification/modes/ZenModeRepeatCallersPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeRepeatCallersPreferenceController.java
@@ -17,20 +17,17 @@
 package com.android.settings.notification.modes;
 
 import static android.service.notification.ZenPolicy.PEOPLE_TYPE_ANYONE;
-import static android.service.notification.ZenPolicy.PEOPLE_TYPE_NONE;
 import static android.service.notification.ZenPolicy.STATE_ALLOW;
 
-import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.provider.Settings;
-import android.service.notification.ZenPolicy;
-import android.util.Log;
+
+import androidx.annotation.NonNull;
 import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
 import androidx.preference.TwoStatePreference;
+
 import com.android.settings.R;
 
-public class ZenModeRepeatCallersPreferenceController extends AbstractZenModePreferenceController
+class ZenModeRepeatCallersPreferenceController extends AbstractZenModePreferenceController
         implements Preference.OnPreferenceChangeListener {
 
     private final int mRepeatCallersThreshold;
@@ -43,14 +40,12 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        super.updateState(preference);
-
+    public void updateState(Preference preference, @NonNull ZenMode zenMode) {
         TwoStatePreference pref = (TwoStatePreference) preference;
 
         boolean anyCallersCanBypassDnd =
-                getMode().getPolicy().getPriorityCategoryCalls() == STATE_ALLOW
-                && getMode().getPolicy().getPriorityCallSenders() == PEOPLE_TYPE_ANYONE;
+                zenMode.getPolicy().getPriorityCategoryCalls() == STATE_ALLOW
+                && zenMode.getPolicy().getPriorityCallSenders() == PEOPLE_TYPE_ANYONE;
         // if any caller can bypass dnd then repeat callers preference is disabled
         if (anyCallersCanBypassDnd) {
             pref.setEnabled(false);
@@ -58,21 +53,16 @@
         } else {
             pref.setEnabled(true);
             pref.setChecked(
-                    getMode().getPolicy().getPriorityCategoryRepeatCallers() == STATE_ALLOW);
+                    zenMode.getPolicy().getPriorityCategoryRepeatCallers() == STATE_ALLOW);
         }
 
         setRepeatCallerSummary(preference);
     }
 
     @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
+    public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
         final boolean allowRepeatCallers = (Boolean) newValue;
-        ZenPolicy diffPolicy = new ZenPolicy.Builder()
-                .allowRepeatCallers(allowRepeatCallers)
-                .build();
-        getMode().setPolicy(diffPolicy);
-        mBackend.updateMode(getMode());
-        return true;
+        return savePolicy(policy -> policy.allowRepeatCallers(allowRepeatCallers));
     }
 
     private void setRepeatCallerSummary(Preference preference) {
diff --git a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java
index e1a7caf..41a3d20 100644
--- a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java
+++ b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java
@@ -30,7 +30,6 @@
 import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_REMINDERS;
 import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_REPEAT_CALLERS;
 import static android.service.notification.ZenPolicy.PRIORITY_CATEGORY_SYSTEM;
-import static android.service.notification.ZenPolicy.STATE_DISALLOW;
 import static android.service.notification.ZenPolicy.VISUAL_EFFECT_AMBIENT;
 import static android.service.notification.ZenPolicy.VISUAL_EFFECT_BADGE;
 import static android.service.notification.ZenPolicy.VISUAL_EFFECT_FULL_SCREEN_INTENT;
@@ -44,7 +43,6 @@
 import android.service.notification.ZenDeviceEffects;
 import android.service.notification.ZenPolicy;
 
-import android.util.SparseArray;
 import com.android.settings.R;
 
 import java.util.ArrayList;
@@ -54,10 +52,10 @@
 import java.util.Map;
 import java.util.function.Predicate;
 
-public class ZenModeSummaryHelper {
+class ZenModeSummaryHelper {
 
-    private Context mContext;
-    private ZenModesBackend mBackend;
+    private final Context mContext;
+    private final ZenModesBackend mBackend;
 
     public ZenModeSummaryHelper(Context context, ZenModesBackend backend) {
         mContext = context;
diff --git a/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java b/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java
index ff5c111..ca8fe05 100644
--- a/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModesListPreferenceController.java
@@ -39,7 +39,7 @@
  * containing links to each individual mode. This is a central controller that populates and updates
  * all the preferences that then lead to a mode configuration page.
  */
-public class ZenModesListPreferenceController extends BasePreferenceController {
+class ZenModesListPreferenceController extends BasePreferenceController {
     protected static final String KEY = "zen_modes_list";
 
     @Nullable
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiverTest.java
index 545f773..704637f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BootBroadcastReceiverTest.java
@@ -43,6 +43,7 @@
 
 import java.time.Clock;
 import java.util.List;
+import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
 
 /** Tests of {@link BootBroadcastReceiver}. */
@@ -56,6 +57,7 @@
 
     @Before
     public void setUp() {
+        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
         mContext = ApplicationProvider.getApplicationContext();
         mPeriodicJobManager = PeriodicJobManager.getInstance(mContext);
         mShadowAlarmManager = shadowOf(mContext.getSystemService(AlarmManager.class));
@@ -136,7 +138,7 @@
 
         mReceiver.onReceive(mContext, new Intent(Intent.ACTION_TIME_CHANGED));
 
-        TimeUnit.MILLISECONDS.sleep(100);
+        TimeUnit.MILLISECONDS.sleep(1000);
         assertThat(mDao.getAllAfter(0)).isEmpty();
         assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull();
     }
@@ -150,7 +152,7 @@
 
         mReceiver.onReceive(mContext, new Intent(Intent.ACTION_TIME_CHANGED));
 
-        TimeUnit.MILLISECONDS.sleep(100);
+        TimeUnit.MILLISECONDS.sleep(1000);
         assertThat(mDao.getAllAfter(0).size()).isEqualTo(1);
         assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull();
     }
@@ -168,7 +170,7 @@
                                 Intent.EXTRA_TIME_PREF_24_HOUR_FORMAT,
                                 Intent.EXTRA_TIME_PREF_VALUE_USE_12_HOUR));
 
-        TimeUnit.MILLISECONDS.sleep(100);
+        TimeUnit.MILLISECONDS.sleep(1000);
         assertThat(mDao.getAllAfter(0).size()).isEqualTo(1);
         assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNull();
     }
@@ -182,7 +184,7 @@
 
         mReceiver.onReceive(mContext, new Intent(Intent.ACTION_TIMEZONE_CHANGED));
 
-        TimeUnit.MILLISECONDS.sleep(100);
+        TimeUnit.MILLISECONDS.sleep(1000);
         assertThat(mDao.getAllAfter(0)).isEmpty();
         assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull();
     }
diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceControllerTest.java
index 7424ae6..05b4848 100644
--- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeNotifVisPreferenceControllerTest.java
@@ -19,18 +19,16 @@
 import static android.app.NotificationManager.INTERRUPTION_FILTER_PRIORITY;
 import static android.service.notification.ZenPolicy.STATE_ALLOW;
 import static android.service.notification.ZenPolicy.STATE_DISALLOW;
-import static android.service.notification.ZenPolicy.STATE_UNSET;
 import static android.service.notification.ZenPolicy.VISUAL_EFFECT_LIGHTS;
 import static android.service.notification.ZenPolicy.VISUAL_EFFECT_NOTIFICATION_LIST;
 import static android.service.notification.ZenPolicy.VISUAL_EFFECT_PEEK;
 import static android.service.notification.ZenPolicy.VISUAL_EFFECT_STATUS_BAR;
+
 import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.nullable;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -41,12 +39,10 @@
 import android.net.Uri;
 import android.platform.test.annotations.EnableFlags;
 import android.platform.test.flag.junit.SetFlagsRule;
-import android.service.notification.ZenDeviceEffects;
 import android.service.notification.ZenPolicy;
-import androidx.preference.TwoStatePreference;
-import com.android.settings.notification.zen.ZenModeVisEffectPreferenceController;
+
 import com.android.settings.widget.DisabledCheckBoxPreference;
-import com.android.settingslib.core.lifecycle.Lifecycle;
+
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -162,7 +158,7 @@
         assertThat(captor.getValue().getPolicy().getVisualEffectStatusBar())
                 .isEqualTo(STATE_DISALLOW);
         assertThat(captor.getValue().getPolicy().getVisualEffectNotificationList())
-                .isEqualTo(STATE_UNSET);
+                .isEqualTo(STATE_DISALLOW); // Untouched
     }
 
     @Test
@@ -211,7 +207,7 @@
         assertThat(captor.getValue().getPolicy().getVisualEffectPeek())
                 .isEqualTo(STATE_ALLOW);
         assertThat(captor.getValue().getPolicy().getVisualEffectNotificationList())
-                .isEqualTo(STATE_UNSET);
+                .isEqualTo(STATE_DISALLOW); // Untouched
     }
 
     @Test
@@ -236,6 +232,6 @@
         assertThat(captor.getValue().getPolicy().getVisualEffectPeek())
                 .isEqualTo(STATE_DISALLOW);
         assertThat(captor.getValue().getPolicy().getVisualEffectNotificationList())
-                .isEqualTo(STATE_UNSET);
+                .isEqualTo(STATE_ALLOW); // Untouched
     }
 }
\ No newline at end of file