Merge "Read flag to show/hide notification slider" into tm-qpr-dev am: 2552ae08ae

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20180104

Change-Id: I7321b1bfe1e7d89924b38cd6adf2853d336740d9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/notification/NotificationVolumePreferenceController.java b/src/com/android/settings/notification/NotificationVolumePreferenceController.java
index 322bb6c..112debc 100644
--- a/src/com/android/settings/notification/NotificationVolumePreferenceController.java
+++ b/src/com/android/settings/notification/NotificationVolumePreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.notification;
 
+import android.app.ActivityThread;
 import android.app.INotificationManager;
 import android.app.NotificationManager;
 import android.content.BroadcastReceiver;
@@ -29,26 +30,32 @@
 import android.os.Message;
 import android.os.ServiceManager;
 import android.os.Vibrator;
+import android.provider.DeviceConfig;
 import android.service.notification.NotificationListenerService;
 import android.text.TextUtils;
 import android.util.Log;
 
 import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.PreferenceScreen;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import java.util.Objects;
+import java.util.Set;
 
 /**
- * Update notification volume icon in Settings in response to user adjusting volume
+ * Update notification volume icon in Settings in response to user adjusting volume.
  */
 public class NotificationVolumePreferenceController extends VolumeSeekBarPreferenceController {
 
     private static final String TAG = "NotificationVolumePreferenceController";
     private static final String KEY_NOTIFICATION_VOLUME = "notification_volume";
+    private static final boolean CONFIG_DEFAULT_VAL = false;
+    private boolean mSeparateNotification;
 
     private Vibrator mVibrator;
     private int mRingerMode = AudioManager.RINGER_MODE_NORMAL;
@@ -56,39 +63,74 @@
     private final RingReceiver mReceiver = new RingReceiver();
     private final H mHandler = new H();
     private INotificationManager mNoMan;
-
-
     private int mMuteIcon;
     private final int mNormalIconId =  R.drawable.ic_notifications;
     private final int mVibrateIconId = R.drawable.ic_volume_ringer_vibrate;
     private final int mSilentIconId = R.drawable.ic_notifications_off_24dp;
 
-    private final boolean mRingNotificationAliased;
-
-
     public NotificationVolumePreferenceController(Context context) {
         this(context, KEY_NOTIFICATION_VOLUME);
     }
 
     public NotificationVolumePreferenceController(Context context, String key) {
         super(context, key);
+
         mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
         if (mVibrator != null && !mVibrator.hasVibrator()) {
             mVibrator = null;
         }
 
-        mRingNotificationAliased = mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_alias_ring_notif_stream_types);
         updateRingerMode();
     }
 
+    /**
+     * Allow for notification slider to be enabled in the scenario where the config switches on
+     * while settings page is already on the screen by always configuring the preference, even if it
+     * is currently inactive.
+     */
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        if (mPreference == null) {
+            setupVolPreference(screen);
+        }
+        mSeparateNotification = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, CONFIG_DEFAULT_VAL);
+        if (mPreference != null) {
+            mPreference.setVisible(getAvailabilityStatus() == AVAILABLE);
+        }
+        updateEffectsSuppressor();
+        updatePreferenceIconAndSliderState();
+    }
+
+    /**
+     * Only display the notification slider when the corresponding device config flag is set
+     */
+    private void onDeviceConfigChange(DeviceConfig.Properties properties) {
+        Set<String> changeSet = properties.getKeyset();
+
+        if (changeSet.contains(SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION)) {
+            boolean newVal = properties.getBoolean(
+                    SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, CONFIG_DEFAULT_VAL);
+            if (newVal != mSeparateNotification) {
+                mSeparateNotification = newVal;
+                // manually hiding the preference because being unavailable does not do the job
+                if (mPreference != null) {
+                    mPreference.setVisible(getAvailabilityStatus() == AVAILABLE);
+                }
+            }
+        }
+    }
+
+
     @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
     @Override
     public void onResume() {
         super.onResume();
         mReceiver.register(true);
-        updateEffectsSuppressor();
-        updatePreferenceIconAndSliderState();
+        DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
+                ActivityThread.currentApplication().getMainExecutor(),
+                this::onDeviceConfigChange);
     }
 
     @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
@@ -96,16 +138,17 @@
     public void onPause() {
         super.onPause();
         mReceiver.register(false);
+        DeviceConfig.removeOnPropertiesChangedListener(this::onDeviceConfigChange);
     }
 
     @Override
     public int getAvailabilityStatus() {
+        boolean separateNotification = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, false);
 
-        // Show separate notification slider if ring/notification are not aliased by AudioManager --
-        // if they are, notification volume is controlled by RingVolumePreferenceController.
         return mContext.getResources().getBoolean(R.bool.config_show_notification_volume)
-                && (!mRingNotificationAliased || !Utils.isVoiceCapable(mContext))
                 && !mHelper.isSingleVolume()
+                && (separateNotification || !Utils.isVoiceCapable(mContext))
                 ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
diff --git a/src/com/android/settings/notification/RingVolumePreferenceController.java b/src/com/android/settings/notification/RingVolumePreferenceController.java
index a78689f..7fdb1e1 100644
--- a/src/com/android/settings/notification/RingVolumePreferenceController.java
+++ b/src/com/android/settings/notification/RingVolumePreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.notification;
 
+import android.app.ActivityThread;
 import android.app.INotificationManager;
 import android.app.NotificationManager;
 import android.content.BroadcastReceiver;
@@ -29,6 +30,7 @@
 import android.os.Message;
 import android.os.ServiceManager;
 import android.os.Vibrator;
+import android.provider.DeviceConfig;
 import android.service.notification.NotificationListenerService;
 import android.text.TextUtils;
 import android.util.Log;
@@ -36,11 +38,13 @@
 import androidx.lifecycle.OnLifecycleEvent;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import java.util.Objects;
+import java.util.Set;
 
 /**
  * This slider can represent both ring and notification, if the corresponding streams are aliased,
@@ -59,24 +63,21 @@
 
     private int mMuteIcon;
 
-    /*
-     * Whether ring and notification streams are aliased together by AudioManager.
-     * If they are, we'll present one volume control for both.
-     * If not, we'll present separate volume controls.
-     */
-    private final boolean mRingAliasNotif;
-
-    private final int mNormalIconId;
+    private int mNormalIconId;
     @VisibleForTesting
-    final int mVibrateIconId;
+    int mVibrateIconId;
     @VisibleForTesting
-    final int mSilentIconId;
+    int mSilentIconId;
 
     @VisibleForTesting
-    final int mTitleId;
+    int mTitleId;
+
+    private boolean mSeparateNotification;
 
     private INotificationManager mNoMan;
 
+    private static final boolean CONFIG_DEFAULT_VAL = false;
+
     public RingVolumePreferenceController(Context context) {
         this(context, KEY_RING_VOLUME);
     }
@@ -87,29 +88,56 @@
         if (mVibrator != null && !mVibrator.hasVibrator()) {
             mVibrator = null;
         }
-
-        mRingAliasNotif = isRingAliasNotification();
-        if (mRingAliasNotif) {
-            mTitleId = R.string.ring_volume_option_title;
-
-            mNormalIconId = R.drawable.ic_notifications;
-            mSilentIconId = R.drawable.ic_notifications_off_24dp;
-        } else {
-            mTitleId = R.string.separate_ring_volume_option_title;
-
-            mNormalIconId = R.drawable.ic_ring_volume;
-            mSilentIconId = R.drawable.ic_ring_volume_off;
-        }
-        // todo: set a distinct vibrate icon for ring vs notification
-        mVibrateIconId = R.drawable.ic_volume_ringer_vibrate;
-
+        mSeparateNotification = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, CONFIG_DEFAULT_VAL);
+        loadPreferenceIconResources(mSeparateNotification);
         updateRingerMode();
     }
 
-    @VisibleForTesting
-    boolean isRingAliasNotification() {
-        return mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_alias_ring_notif_stream_types);
+    private void loadPreferenceIconResources(boolean separateNotification) {
+        if (separateNotification) {
+            mTitleId = R.string.separate_ring_volume_option_title;
+            mNormalIconId = R.drawable.ic_ring_volume;
+            mSilentIconId = R.drawable.ic_ring_volume_off;
+        } else {
+            mTitleId = R.string.ring_volume_option_title;
+            mNormalIconId = R.drawable.ic_notifications;
+            mSilentIconId = R.drawable.ic_notifications_off_24dp;
+        }
+        // todo: set a distinct vibrate icon for ring vs notification
+        mVibrateIconId = R.drawable.ic_volume_ringer_vibrate;
+    }
+
+    /**
+     * As the responsibility of this slider changes, so should its title & icon
+     */
+    public void onDeviceConfigChange(DeviceConfig.Properties properties) {
+        Set<String> changeSet = properties.getKeyset();
+        if (changeSet.contains(SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION)) {
+            boolean valueUpdated = readSeparateNotificationVolumeConfig();
+            if (valueUpdated) {
+                updateEffectsSuppressor();
+                selectPreferenceIconState();
+                setPreferenceTitle();
+            }
+        }
+    }
+
+    /**
+     * side effect: updates the cached value of the config, and also the icon
+     * @return has the config changed?
+     */
+    private boolean readSeparateNotificationVolumeConfig() {
+        boolean newVal = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, CONFIG_DEFAULT_VAL);
+
+        boolean valueUpdated = newVal != mSeparateNotification;
+        if (valueUpdated) {
+            mSeparateNotification = newVal;
+            loadPreferenceIconResources(newVal);
+        }
+
+        return valueUpdated;
     }
 
     @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
@@ -117,8 +145,11 @@
     public void onResume() {
         super.onResume();
         mReceiver.register(true);
+        readSeparateNotificationVolumeConfig();
+        DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
+                ActivityThread.currentApplication().getMainExecutor(), this::onDeviceConfigChange);
         updateEffectsSuppressor();
-        updatePreferenceIcon();
+        selectPreferenceIconState();
         setPreferenceTitle();
     }
 
@@ -127,6 +158,7 @@
     public void onPause() {
         super.onPause();
         mReceiver.register(false);
+        DeviceConfig.removeOnPropertiesChangedListener(this::onDeviceConfigChange);
     }
 
     @Override
@@ -170,7 +202,7 @@
         final int ringerMode = mHelper.getRingerModeInternal();
         if (mRingerMode == ringerMode) return;
         mRingerMode = ringerMode;
-        updatePreferenceIcon();
+        selectPreferenceIconState();
     }
 
     private void updateEffectsSuppressor() {
@@ -190,7 +222,8 @@
             return;
         }
 
-        if (hintsMatch(hints, mRingAliasNotif)) {
+        if (hintsMatch(hints, DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, false))) {
             mSuppressor = suppressor;
             if (mPreference != null) {
                 final String text = SuppressorHelper.getSuppressionText(mContext, suppressor);
@@ -200,11 +233,11 @@
     }
 
     @VisibleForTesting
-    boolean hintsMatch(int hints, boolean ringNotificationAliased) {
+    boolean hintsMatch(int hints, boolean notificationSeparated) {
         return (hints & NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS) != 0
                 || (hints & NotificationListenerService.HINT_HOST_DISABLE_EFFECTS) != 0
                 || ((hints & NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS)
-                != 0 && ringNotificationAliased);
+                != 0 && !notificationSeparated);
     }
 
     @VisibleForTesting
@@ -217,7 +250,7 @@
         mVibrator = vibrator;
     }
 
-    private void updatePreferenceIcon() {
+    private void selectPreferenceIconState() {
         if (mPreference != null) {
             if (mRingerMode == AudioManager.RINGER_MODE_NORMAL) {
                 mPreference.showIcon(mNormalIconId);
diff --git a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java
index d170159..0414565 100644
--- a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java
+++ b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java
@@ -55,13 +55,17 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         if (isAvailable()) {
-            mPreference = screen.findPreference(getPreferenceKey());
-            mPreference.setCallback(mVolumePreferenceCallback);
-            mPreference.setStream(getAudioStream());
-            mPreference.setMuteIcon(getMuteIcon());
+            setupVolPreference(screen);
         }
     }
 
+    protected void setupVolPreference(PreferenceScreen screen) {
+        mPreference = screen.findPreference(getPreferenceKey());
+        mPreference.setCallback(mVolumePreferenceCallback);
+        mPreference.setStream(getAudioStream());
+        mPreference.setMuteIcon(getMuteIcon());
+    }
+
     @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
     public void onResume() {
         if (mPreference != null) {
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationVolumePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/NotificationVolumePreferenceControllerTest.java
index 96b9e62..7e7ad10 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationVolumePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationVolumePreferenceControllerTest.java
@@ -18,6 +18,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
@@ -25,10 +26,17 @@
 import android.content.res.Resources;
 import android.media.AudioManager;
 import android.os.Vibrator;
+import android.provider.DeviceConfig;
 import android.service.notification.NotificationListenerService;
 import android.telephony.TelephonyManager;
 
-import com.android.internal.R;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.shadow.ShadowDeviceConfig;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -37,11 +45,12 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowDeviceConfig.class})
 public class NotificationVolumePreferenceControllerTest {
-
     @Mock
     private AudioHelper mHelper;
     @Mock
@@ -52,6 +61,11 @@
     private Vibrator mVibrator;
     @Mock
     private Resources mResources;
+    @Mock
+    private PreferenceManager mPreferenceManager;
+
+    private static final String READ_DEVICE_CONFIG_PERMISSION =
+            "android.permission.READ_DEVICE_CONFIG";
 
     private Context mContext;
     private NotificationVolumePreferenceController mController;
@@ -87,7 +101,9 @@
     public void isAvailable_voiceCapable_aliasedWithRing_shouldReturnFalse() {
         when(mResources.getBoolean(
                 com.android.settings.R.bool.config_show_notification_volume)).thenReturn(true);
-        when(mResources.getBoolean(R.bool.config_alias_ring_notif_stream_types)).thenReturn(true);
+
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "false", false);
 
         NotificationVolumePreferenceController controller =
                 new NotificationVolumePreferenceController(mContext);
@@ -105,7 +121,9 @@
     public void isAvailable_voiceCapable_separatedFromRing_shouldReturnTrue() {
         when(mResources.getBoolean(
                 com.android.settings.R.bool.config_show_notification_volume)).thenReturn(true);
-        when(mResources.getBoolean(R.bool.config_alias_ring_notif_stream_types)).thenReturn(false);
+
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "true", false);
 
         NotificationVolumePreferenceController controller =
                 new NotificationVolumePreferenceController(mContext);
@@ -170,4 +188,70 @@
                 .isTrue();
     }
 
+    @Test
+    public void enableSeparateNotificationConfig_controllerBecomesAvailable() {
+        PreferenceScreen screen = spy(new PreferenceScreen(mContext, null));
+        VolumeSeekBarPreference volumeSeekBarPreference = mock(VolumeSeekBarPreference.class);
+        when(screen.getPreferenceManager()).thenReturn(mPreferenceManager);
+        when(screen.getContext()).thenReturn(mContext);
+        when(mResources.getBoolean(
+                com.android.settings.R.bool.config_show_notification_volume)).thenReturn(true);
+        // block the alternative condition to enable controller
+        when(mTelephonyManager.isVoiceCapable()).thenReturn(true);
+
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "false", false);
+
+        NotificationVolumePreferenceController controller =
+                new NotificationVolumePreferenceController(mContext);
+        when(screen.findPreference(controller.getPreferenceKey()))
+                .thenReturn(volumeSeekBarPreference);
+
+        // allow the controller to subscribe
+        Shadows.shadowOf((android.app.Application) ApplicationProvider.getApplicationContext())
+                .grantPermissions(READ_DEVICE_CONFIG_PERMISSION);
+        controller.onResume();
+        controller.displayPreference(screen);
+
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, Boolean.toString(true),
+                false);
+
+        assertThat(controller.getAvailabilityStatus()
+                == BasePreferenceController.AVAILABLE).isTrue();
+    }
+
+    @Test
+    public void disableSeparateNotificationConfig_controllerBecomesUnavailable() {
+        PreferenceScreen screen = spy(new PreferenceScreen(mContext, null));
+        VolumeSeekBarPreference volumeSeekBarPreference = mock(VolumeSeekBarPreference.class);
+        when(screen.getPreferenceManager()).thenReturn(mPreferenceManager);
+        when(screen.getContext()).thenReturn(mContext);
+        when(mResources.getBoolean(
+                com.android.settings.R.bool.config_show_notification_volume)).thenReturn(true);
+
+        // block the alternative condition to enable controller
+        when(mTelephonyManager.isVoiceCapable()).thenReturn(true);
+
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "true", false);
+
+        NotificationVolumePreferenceController controller =
+                new NotificationVolumePreferenceController(mContext);
+
+        when(screen.findPreference(controller.getPreferenceKey()))
+                .thenReturn(volumeSeekBarPreference);
+
+        Shadows.shadowOf((android.app.Application) ApplicationProvider.getApplicationContext())
+                .grantPermissions(READ_DEVICE_CONFIG_PERMISSION);
+        controller.onResume();
+        controller.displayPreference(screen);
+
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "false", false);
+
+        assertThat(controller.getAvailabilityStatus()
+                == BasePreferenceController.UNSUPPORTED_ON_DEVICE).isTrue();
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/notification/RingVolumePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/RingVolumePreferenceControllerTest.java
index 02757d5..1ad26c7 100644
--- a/tests/robotests/src/com/android/settings/notification/RingVolumePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/RingVolumePreferenceControllerTest.java
@@ -27,10 +27,13 @@
 import android.content.res.Resources;
 import android.media.AudioManager;
 import android.os.Vibrator;
+import android.provider.DeviceConfig;
 import android.service.notification.NotificationListenerService;
 import android.telephony.TelephonyManager;
 
+import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
 import com.android.settings.R;
+import com.android.settings.testutils.shadow.ShadowDeviceConfig;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -39,9 +42,11 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowDeviceConfig.class})
 public class RingVolumePreferenceControllerTest {
 
     @Mock
@@ -124,9 +129,10 @@
     // todo: verify that the title change is displayed, by examining the underlying preference
     @Test
     public void ringNotificationStreamsNotAliased_sliderTitleSetToRingOnly() {
-        when(mResources.getBoolean(
-                com.android.internal.R.bool.config_alias_ring_notif_stream_types))
-                .thenReturn(false);
+
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "true", false);
+
         final RingVolumePreferenceController controller =
                 new RingVolumePreferenceController(mContext);
 
@@ -138,8 +144,9 @@
     @Test
     public void ringNotificationStreamsAliased_sliderTitleIncludesBothRingNotification() {
 
-        when(mResources.getBoolean(
-                com.android.internal.R.bool.config_alias_ring_notif_stream_types)).thenReturn(true);
+        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+                SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "false", false);
+
         final RingVolumePreferenceController control = new RingVolumePreferenceController(mContext);
 
         int expectedTitleId = R.string.ring_volume_option_title;
@@ -150,39 +157,39 @@
     @Test
     public void setHintsRing_aliased_Matches() {
         assertThat(mController.hintsMatch(
-                NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS, true)).isTrue();
+                NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS, false)).isTrue();
     }
 
     @Test
     public void setHintsRingNotification_aliased_Matches() {
         assertThat(mController.hintsMatch(NotificationListenerService.HINT_HOST_DISABLE_EFFECTS,
-                true)).isTrue();
+                false)).isTrue();
     }
 
     @Test
     public void setHintNotification_aliased_Matches() {
         assertThat(mController
                 .hintsMatch(NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS,
-                true)).isTrue();
+                false)).isTrue();
     }
 
     @Test
     public void setHintsRing_unaliased_Matches() {
         assertThat(mController.hintsMatch(
-                NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS, false)).isTrue();
+                NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS, true)).isTrue();
     }
 
     @Test
     public void setHintsRingNotification_unaliased_Matches() {
         assertThat(mController.hintsMatch(NotificationListenerService.HINT_HOST_DISABLE_EFFECTS,
-                false)).isTrue();
+                true)).isTrue();
     }
 
     @Test
     public void setHintNotification_unaliased_doesNotMatch() {
         assertThat(mController
                 .hintsMatch(NotificationListenerService.HINT_HOST_DISABLE_NOTIFICATION_EFFECTS,
-                        false)).isFalse();
+                        true)).isFalse();
     }
 
     @Test