Revert "Revert "Change volume ringer icon based on device config""
This reverts commit 354b40af7b.
Reason for revert: New patch with bug fixed.
Check for ringer icon before setting its image res
Bug: b/259899277, b/38477228
Test: boot up a TV device, adjust volume.
atest VolumeDialogImplTest
Change-Id: Ia5dcc5532f8567d072c41bbc6daf59aab5057455
This commit is contained in:
committed by
Alison Cichowlas
parent
a6abfc6e1a
commit
9b6c87f3a6
26
packages/SystemUI/res/drawable/ic_ring_volume.xml
Normal file
26
packages/SystemUI/res/drawable/ic_ring_volume.xml
Normal file
@@ -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>
|
||||
34
packages/SystemUI/res/drawable/ic_ring_volume_off.xml
Normal file
34
packages/SystemUI/res/drawable/ic_ring_volume_off.xml
Normal file
@@ -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>
|
||||
25
packages/SystemUI/res/drawable/ic_speaker_mute.xml
Normal file
25
packages/SystemUI/res/drawable/ic_speaker_mute.xml
Normal file
@@ -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>
|
||||
25
packages/SystemUI/res/drawable/ic_speaker_on.xml
Normal file
25
packages/SystemUI/res/drawable/ic_speaker_on.xml
Normal file
@@ -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>
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user