diff options
| author | 2022-11-23 23:09:28 +0000 | |
|---|---|---|
| committer | 2022-11-23 23:09:28 +0000 | |
| commit | 86e827d32713ad5dc27fcc5770bb6880a41ddce6 (patch) | |
| tree | f947b791e603a3ac767579005367db5a3ad8c0df | |
| parent | 84d043ebd7a80b5d76f8aa6f6a0da1f4af4534d9 (diff) | |
| parent | 9b6c87f3a630445911de3bc2b92382fad8620921 (diff) | |
Merge "Revert "Revert "Change volume ringer icon based on device config""" into tm-qpr-dev
7 files changed, 267 insertions, 12 deletions
diff --git a/packages/SystemUI/res/drawable/ic_ring_volume.xml b/packages/SystemUI/res/drawable/ic_ring_volume.xml new file mode 100644 index 000000000000..343fe5d4cb69 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_ring_volume.xml @@ -0,0 +1,26 @@ +<!-- + Copyright (C) 2022 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="?android:attr/colorControlNormal"> + <path + android:pathData="M11,7V2H13V7ZM17.6,9.85 L16.2,8.4 19.75,4.85 21.15,6.3ZM6.4,9.85 L2.85,6.3 4.25,4.85 7.8,8.4ZM12,12Q14.95,12 17.812,13.188Q20.675,14.375 22.9,16.75Q23.2,17.05 23.2,17.45Q23.2,17.85 22.9,18.15L20.6,20.4Q20.325,20.675 19.963,20.7Q19.6,20.725 19.3,20.5L16.4,18.3Q16.2,18.15 16.1,17.95Q16,17.75 16,17.5V14.65Q15.05,14.35 14.05,14.175Q13.05,14 12,14Q10.95,14 9.95,14.175Q8.95,14.35 8,14.65V17.5Q8,17.75 7.9,17.95Q7.8,18.15 7.6,18.3L4.7,20.5Q4.4,20.725 4.038,20.7Q3.675,20.675 3.4,20.4L1.1,18.15Q0.8,17.85 0.8,17.45Q0.8,17.05 1.1,16.75Q3.3,14.375 6.175,13.188Q9.05,12 12,12ZM6,15.35Q5.275,15.725 4.6,16.212Q3.925,16.7 3.2,17.3L4.2,18.3L6,16.9ZM18,15.4V16.9L19.8,18.3L20.8,17.35Q20.075,16.7 19.4,16.225Q18.725,15.75 18,15.4ZM6,15.35Q6,15.35 6,15.35Q6,15.35 6,15.35ZM18,15.4Q18,15.4 18,15.4Q18,15.4 18,15.4Z" + android:fillColor="?android:attr/colorPrimary"/> + +</vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/ic_ring_volume_off.xml b/packages/SystemUI/res/drawable/ic_ring_volume_off.xml new file mode 100644 index 000000000000..74f30d1a44d2 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_ring_volume_off.xml @@ -0,0 +1,34 @@ +<!-- + Copyright (C) 2022 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="?android:attr/colorControlNormal"> +<path + android:pathData="M0.8,4.2l8.1,8.1c-2.2,0.5 -5.2,1.6 -7.8,4.4c-0.4,0.4 -0.4,1 0,1.4l2.3,2.3c0.3,0.3 0.9,0.4 1.3,0.1l2.9,-2.2C7.8,18.1 8,17.8 8,17.5v-2.9c0.9,-0.3 1.7,-0.5 2.7,-0.6l8.5,8.5l1.4,-1.4L2.2,2.8L0.8,4.2z" + android:fillColor="?android:attr/colorPrimary"/> + <path + android:pathData="M11,2h2v5h-2z" + android:fillColor="?android:attr/colorPrimary"/> + <path + android:pathData="M21.2,6.3l-1.4,-1.4l-3.6,3.6l1.4,1.4C17.6,9.8 21,6.3 21.2,6.3z" + android:fillColor="?android:attr/colorPrimary"/> + <path + android:pathData="M22.9,16.7c-2.8,-3 -6.2,-4.1 -8.4,-4.5l7.2,7.2l1.3,-1.3C23.3,17.7 23.3,17.1 22.9,16.7z" + android:fillColor="?android:attr/colorPrimary"/> +</vector> diff --git a/packages/SystemUI/res/drawable/ic_speaker_mute.xml b/packages/SystemUI/res/drawable/ic_speaker_mute.xml new file mode 100644 index 000000000000..4e402cf530e4 --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_speaker_mute.xml @@ -0,0 +1,25 @@ +<!-- + ~ Copyright (C) 2022 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="?android:attr/textColorPrimary" + android:autoMirrored="true"> + <path android:fillColor="#FFFFFFFF" + android:pathData="M19.8,22.6 L16.775,19.575Q16.15,19.975 15.45,20.263Q14.75,20.55 14,20.725V18.675Q14.35,18.55 14.688,18.425Q15.025,18.3 15.325,18.125L12,14.8V20L7,15H3V9H6.2L1.4,4.2L2.8,2.8L21.2,21.2ZM19.6,16.8 L18.15,15.35Q18.575,14.575 18.788,13.725Q19,12.875 19,11.975Q19,9.625 17.625,7.775Q16.25,5.925 14,5.275V3.225Q17.1,3.925 19.05,6.362Q21,8.8 21,11.975Q21,13.3 20.638,14.525Q20.275,15.75 19.6,16.8ZM16.25,13.45 L14,11.2V7.95Q15.175,8.5 15.838,9.6Q16.5,10.7 16.5,12Q16.5,12.375 16.438,12.738Q16.375,13.1 16.25,13.45ZM12,9.2 L9.4,6.6 12,4ZM10,15.15V12.8L8.2,11H5V13H7.85ZM9.1,11.9Z"/> +</vector>
\ No newline at end of file diff --git a/packages/SystemUI/res/drawable/ic_speaker_on.xml b/packages/SystemUI/res/drawable/ic_speaker_on.xml new file mode 100644 index 000000000000..2a90e051b83b --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_speaker_on.xml @@ -0,0 +1,25 @@ +<!-- + ~ Copyright (C) 2022 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24" + android:tint="?android:attr/textColorPrimary" + android:autoMirrored="true"> + <path android:fillColor="#FFFFFFFF" + android:pathData="M14,20.725V18.675Q16.25,18.025 17.625,16.175Q19,14.325 19,11.975Q19,9.625 17.625,7.775Q16.25,5.925 14,5.275V3.225Q17.1,3.925 19.05,6.362Q21,8.8 21,11.975Q21,15.15 19.05,17.587Q17.1,20.025 14,20.725ZM3,15V9H7L12,4V20L7,15ZM14,16V7.95Q15.175,8.5 15.838,9.6Q16.5,10.7 16.5,12Q16.5,13.275 15.838,14.362Q15.175,15.45 14,16ZM10,8.85 L7.85,11H5V13H7.85L10,15.15ZM7.5,12Z"/> +</vector>
\ No newline at end of file diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index aa17bf206f2c..101dd456a004 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -72,6 +72,7 @@ import android.os.Message; import android.os.SystemClock; import android.os.Trace; import android.os.VibrationEffect; +import android.provider.DeviceConfig; import android.provider.Settings; import android.provider.Settings.Global; import android.text.InputFilter; @@ -108,6 +109,8 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.graphics.drawable.BackgroundBlurDrawable; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.view.RotationPolicy; @@ -125,11 +128,15 @@ import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.util.AlphaTintDrawableWrapper; +import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.RoundedCornerProgressDrawable; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.Executor; import java.util.function.Consumer; /** @@ -186,6 +193,9 @@ public class VolumeDialogImpl implements VolumeDialog, private ViewGroup mDialogRowsView; private ViewGroup mRinger; + private DeviceConfigProxy mDeviceConfigProxy; + private Executor mExecutor; + /** * Container for the top part of the dialog, which contains the ringer, the ringer drawer, the * volume rows, and the ellipsis button. This does not include the live caption button. @@ -274,6 +284,13 @@ public class VolumeDialogImpl implements VolumeDialog, private BackgroundBlurDrawable mDialogRowsViewBackground; private final InteractionJankMonitor mInteractionJankMonitor; + private boolean mSeparateNotification; + + @VisibleForTesting + int mVolumeRingerIconDrawableId; + @VisibleForTesting + int mVolumeRingerMuteIconDrawableId; + public VolumeDialogImpl( Context context, VolumeDialogController volumeDialogController, @@ -283,7 +300,9 @@ public class VolumeDialogImpl implements VolumeDialog, MediaOutputDialogFactory mediaOutputDialogFactory, VolumePanelFactory volumePanelFactory, ActivityStarter activityStarter, - InteractionJankMonitor interactionJankMonitor) { + InteractionJankMonitor interactionJankMonitor, + DeviceConfigProxy deviceConfigProxy, + Executor executor) { mContext = new ContextThemeWrapper(context, R.style.volume_dialog_theme); mController = volumeDialogController; @@ -323,6 +342,50 @@ public class VolumeDialogImpl implements VolumeDialog, } initDimens(); + + mDeviceConfigProxy = deviceConfigProxy; + mExecutor = executor; + mSeparateNotification = mDeviceConfigProxy.getBoolean(DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, false); + updateRingerModeIconSet(); + } + + /** + * If ringer and notification are the same stream (T and earlier), use notification-like bell + * icon set. + * If ringer and notification are separated, then use generic speaker icons. + */ + private void updateRingerModeIconSet() { + if (mSeparateNotification) { + mVolumeRingerIconDrawableId = R.drawable.ic_speaker_on; + mVolumeRingerMuteIconDrawableId = R.drawable.ic_speaker_mute; + } else { + mVolumeRingerIconDrawableId = R.drawable.ic_volume_ringer; + mVolumeRingerMuteIconDrawableId = R.drawable.ic_volume_ringer_mute; + } + + if (mRingerDrawerMuteIcon != null) { + mRingerDrawerMuteIcon.setImageResource(mVolumeRingerMuteIconDrawableId); + } + if (mRingerDrawerNormalIcon != null) { + mRingerDrawerNormalIcon.setImageResource(mVolumeRingerIconDrawableId); + } + } + + /** + * Change icon for ring stream (not ringer mode icon) + */ + private void updateRingRowIcon() { + Optional<VolumeRow> volumeRow = mRows.stream().filter(row -> row.stream == STREAM_RING) + .findFirst(); + if (volumeRow.isPresent()) { + VolumeRow volRow = volumeRow.get(); + volRow.iconRes = mSeparateNotification ? R.drawable.ic_ring_volume + : R.drawable.ic_volume_ringer; + volRow.iconMuteRes = mSeparateNotification ? R.drawable.ic_ring_volume_off + : R.drawable.ic_volume_ringer_mute; + volRow.setIcon(volRow.iconRes, mContext.getTheme()); + } } @Override @@ -339,6 +402,9 @@ public class VolumeDialogImpl implements VolumeDialog, mController.getState(); mConfigurationController.addCallback(this); + + mDeviceConfigProxy.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, + mExecutor, this::onDeviceConfigChange); } @Override @@ -346,6 +412,24 @@ public class VolumeDialogImpl implements VolumeDialog, mController.removeCallback(mControllerCallbackH); mHandler.removeCallbacksAndMessages(null); mConfigurationController.removeCallback(this); + mDeviceConfigProxy.removeOnPropertiesChangedListener(this::onDeviceConfigChange); + } + + /** + * Update ringer mode icon based on the config + */ + 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, false); + if (newVal != mSeparateNotification) { + mSeparateNotification = newVal; + updateRingerModeIconSet(); + updateRingRowIcon(); + + } + } } @Override @@ -552,6 +636,8 @@ public class VolumeDialogImpl implements VolumeDialog, mRingerDrawerNormalIcon = mDialog.findViewById(R.id.volume_drawer_normal_icon); mRingerDrawerNewSelectionBg = mDialog.findViewById(R.id.volume_drawer_selection_background); + updateRingerModeIconSet(); + setupRingerDrawer(); mODICaptionsView = mDialog.findViewById(R.id.odi_captions); @@ -575,8 +661,14 @@ public class VolumeDialogImpl implements VolumeDialog, addRow(AudioManager.STREAM_MUSIC, R.drawable.ic_volume_media, R.drawable.ic_volume_media_mute, true, true); if (!AudioSystem.isSingleVolume(mContext)) { - addRow(AudioManager.STREAM_RING, - R.drawable.ic_volume_ringer, R.drawable.ic_volume_ringer_mute, true, false); + if (mSeparateNotification) { + addRow(AudioManager.STREAM_RING, R.drawable.ic_ring_volume, + R.drawable.ic_ring_volume_off, true, false); + } else { + addRow(AudioManager.STREAM_RING, R.drawable.ic_volume_ringer, + R.drawable.ic_volume_ringer, true, false); + } + addRow(STREAM_ALARM, R.drawable.ic_alarm, R.drawable.ic_volume_alarm_mute, true, false); addRow(AudioManager.STREAM_VOICE_CALL, @@ -1532,8 +1624,8 @@ public class VolumeDialogImpl implements VolumeDialog, mRingerIcon.setTag(Events.ICON_STATE_VIBRATE); break; case AudioManager.RINGER_MODE_SILENT: - mRingerIcon.setImageResource(R.drawable.ic_volume_ringer_mute); - mSelectedRingerIcon.setImageResource(R.drawable.ic_volume_ringer_mute); + mRingerIcon.setImageResource(mVolumeRingerMuteIconDrawableId); + mSelectedRingerIcon.setImageResource(mVolumeRingerMuteIconDrawableId); mRingerIcon.setTag(Events.ICON_STATE_MUTE); addAccessibilityDescription(mRingerIcon, RINGER_MODE_SILENT, mContext.getString(R.string.volume_ringer_hint_unmute)); @@ -1542,14 +1634,14 @@ public class VolumeDialogImpl implements VolumeDialog, default: boolean muted = (mAutomute && ss.level == 0) || ss.muted; if (!isZenMuted && muted) { - mRingerIcon.setImageResource(R.drawable.ic_volume_ringer_mute); - mSelectedRingerIcon.setImageResource(R.drawable.ic_volume_ringer_mute); + mRingerIcon.setImageResource(mVolumeRingerMuteIconDrawableId); + mSelectedRingerIcon.setImageResource(mVolumeRingerMuteIconDrawableId); addAccessibilityDescription(mRingerIcon, RINGER_MODE_NORMAL, mContext.getString(R.string.volume_ringer_hint_unmute)); mRingerIcon.setTag(Events.ICON_STATE_MUTE); } else { - mRingerIcon.setImageResource(R.drawable.ic_volume_ringer); - mSelectedRingerIcon.setImageResource(R.drawable.ic_volume_ringer); + mRingerIcon.setImageResource(mVolumeRingerIconDrawableId); + mSelectedRingerIcon.setImageResource(mVolumeRingerIconDrawableId); if (mController.hasVibrator()) { addAccessibilityDescription(mRingerIcon, RINGER_MODE_NORMAL, mContext.getString(R.string.volume_ringer_hint_vibrate)); diff --git a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java index c5792b923e48..8f10fa619c14 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java +++ b/packages/SystemUI/src/com/android/systemui/volume/dagger/VolumeModule.java @@ -20,6 +20,7 @@ import android.content.Context; import android.media.AudioManager; import com.android.internal.jank.InteractionJankMonitor; +import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.media.dialog.MediaOutputDialogFactory; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.VolumeDialog; @@ -27,11 +28,14 @@ import com.android.systemui.plugins.VolumeDialogController; import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; +import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.volume.VolumeComponent; import com.android.systemui.volume.VolumeDialogComponent; import com.android.systemui.volume.VolumeDialogImpl; import com.android.systemui.volume.VolumePanelFactory; +import java.util.concurrent.Executor; + import dagger.Binds; import dagger.Module; import dagger.Provides; @@ -55,7 +59,9 @@ public interface VolumeModule { MediaOutputDialogFactory mediaOutputDialogFactory, VolumePanelFactory volumePanelFactory, ActivityStarter activityStarter, - InteractionJankMonitor interactionJankMonitor) { + InteractionJankMonitor interactionJankMonitor, + DeviceConfigProxy deviceConfigProxy, + @Main Executor executor) { VolumeDialogImpl impl = new VolumeDialogImpl( context, volumeDialogController, @@ -65,7 +71,9 @@ public interface VolumeModule { mediaOutputDialogFactory, volumePanelFactory, activityStarter, - interactionJankMonitor); + interactionJankMonitor, + deviceConfigProxy, + executor); impl.setStreamImportant(AudioManager.STREAM_SYSTEM, false); impl.setAutomute(true); impl.setSilentMode(false); diff --git a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java index 2e74bf5474f9..a0b4eab1d5df 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/volume/VolumeDialogImplTest.java @@ -18,6 +18,7 @@ package com.android.systemui.volume; import static com.android.systemui.volume.VolumeDialogControllerImpl.STREAMS; +import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; @@ -28,6 +29,7 @@ import static org.mockito.Mockito.verify; import android.app.KeyguardManager; import android.media.AudioManager; import android.os.SystemClock; +import android.provider.DeviceConfig; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.InputDevice; @@ -38,6 +40,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.test.filters.SmallTest; +import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.jank.InteractionJankMonitor; import com.android.systemui.Prefs; import com.android.systemui.R; @@ -49,6 +52,9 @@ import com.android.systemui.plugins.VolumeDialogController.State; import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; +import com.android.systemui.util.DeviceConfigProxyFake; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; @@ -71,6 +77,8 @@ public class VolumeDialogImplTest extends SysuiTestCase { View mDrawerVibrate; View mDrawerMute; View mDrawerNormal; + private DeviceConfigProxyFake mDeviceConfigProxy; + private FakeExecutor mExecutor; @Mock VolumeDialogController mVolumeDialogController; @@ -97,6 +105,9 @@ public class VolumeDialogImplTest extends SysuiTestCase { getContext().addMockSystemService(KeyguardManager.class, mKeyguard); + mDeviceConfigProxy = new DeviceConfigProxyFake(); + mExecutor = new FakeExecutor(new FakeSystemClock()); + mDialog = new VolumeDialogImpl( getContext(), mVolumeDialogController, @@ -106,7 +117,9 @@ public class VolumeDialogImplTest extends SysuiTestCase { mMediaOutputDialogFactory, mVolumePanelFactory, mActivityStarter, - mInteractionJankMonitor); + mInteractionJankMonitor, + mDeviceConfigProxy, + mExecutor); mDialog.init(0, null); State state = createShellState(); mDialog.onStateChangedH(state); @@ -123,6 +136,9 @@ public class VolumeDialogImplTest extends SysuiTestCase { VolumePrefs.SHOW_RINGER_TOAST_COUNT + 1); Prefs.putBoolean(mContext, Prefs.Key.HAS_SEEN_ODI_CAPTIONS_TOOLTIP, false); + + mDeviceConfigProxy.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "false", false); } private State createShellState() { @@ -292,6 +308,35 @@ public class VolumeDialogImplTest extends SysuiTestCase { AudioManager.RINGER_MODE_NORMAL, false); } + /** + * Ideally we would look at the ringer ImageView and check its assigned drawable id, but that + * API does not exist. So we do the next best thing; we check the cached icon id. + */ + @Test + public void notificationVolumeSeparated_theRingerIconChanges() { + mDeviceConfigProxy.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "true", false); + + mExecutor.runAllReady(); // for the config change to take effect + + // assert icon is new based on res id + assertEquals(mDialog.mVolumeRingerIconDrawableId, + R.drawable.ic_speaker_on); + assertEquals(mDialog.mVolumeRingerMuteIconDrawableId, + R.drawable.ic_speaker_mute); + } + + @Test + public void notificationVolumeNotSeparated_theRingerIconRemainsTheSame() { + mDeviceConfigProxy.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, + SystemUiDeviceConfigFlags.VOLUME_SEPARATE_NOTIFICATION, "false", false); + + mExecutor.runAllReady(); + + assertEquals(mDialog.mVolumeRingerIconDrawableId, R.drawable.ic_volume_ringer); + assertEquals(mDialog.mVolumeRingerMuteIconDrawableId, R.drawable.ic_volume_ringer_mute); + } + /* @Test public void testContentDescriptions() { |