From eb1ec3af9182c071f31ea5413a79074be6429d29 Mon Sep 17 00:00:00 2001 From: Galia Peycheva Date: Thu, 30 Jul 2020 17:25:04 +0200 Subject: [PATCH 1/3] Show volume number in volume control ui The volume can be controlled in 25 steps. Respectively, the ui shown goes from 0 to 25. An alternative would have been to display a percentage, but that would mean that one volume button press would jump 4% up, which doesn't look great. Bug: 162302410 Test: flash system ui && click +/- volume controls Result: https://hsv.googleplex.com/5706562045739008 Change-Id: I295cf055937fae067f8ccc34eff656f42f85f072 --- .../res/layout-land-television/volume_dialog_row.xml | 11 +++++++++-- .../SystemUI/res/values-land-television/dimens.xml | 2 +- .../com/android/systemui/volume/VolumeDialogImpl.java | 7 +++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml b/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml index 08209ab09169c..7181806013f79 100644 --- a/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml +++ b/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml @@ -33,8 +33,8 @@ @@ -62,6 +62,13 @@ android:layout_gravity="center" android:rotation="0" /> + diff --git a/packages/SystemUI/res/values-land-television/dimens.xml b/packages/SystemUI/res/values-land-television/dimens.xml index 499341c662b16..ea261868b38a0 100644 --- a/packages/SystemUI/res/values-land-television/dimens.xml +++ b/packages/SystemUI/res/values-land-television/dimens.xml @@ -17,5 +17,5 @@ 252dp - 36dp + 36dp diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 3455ff47de8d1..c17ad8fd7cb1e 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -421,6 +421,7 @@ public class VolumeDialogImpl implements VolumeDialog, row.dndIcon = row.view.findViewById(R.id.dnd_icon); row.slider = row.view.findViewById(R.id.volume_row_slider); row.slider.setOnSeekBarChangeListener(new VolumeSeekBarChangeListener(row)); + row.number = row.view.findViewById(R.id.volume_number); row.anim = null; @@ -1090,6 +1091,7 @@ public class VolumeDialogImpl implements VolumeDialog, final int vlevel = row.ss.muted && (!isRingStream && !zenMuted) ? 0 : row.ss.level; updateVolumeRowSliderH(row, enableSlider, vlevel); + if (row.number != null) row.number.setText(Integer.toString(vlevel)); } private boolean isStreamMuted(final StreamState streamState) { @@ -1115,6 +1117,10 @@ public class VolumeDialogImpl implements VolumeDialog, row.icon.setImageTintList(tint); row.icon.setImageAlpha(alpha); row.cachedTint = tint; + if (row.number != null) { + row.number.setTextColor(tint); + row.number.setAlpha(alpha); + } } private void updateVolumeRowSliderH(VolumeRow row, boolean enable, int vlevel) { @@ -1458,6 +1464,7 @@ public class VolumeDialogImpl implements VolumeDialog, private TextView header; private ImageButton icon; private SeekBar slider; + private TextView number; private int stream; private StreamState ss; private long userAttempt; // last user-driven slider change From 296a49c94482e4b07b4a4cf60c239ecc5531c0fd Mon Sep 17 00:00:00 2001 From: Galia Peycheva Date: Fri, 31 Jul 2020 12:41:39 +0200 Subject: [PATCH 2/3] Update volume control ui for tv As part of this we introduce a new theme "volume_dialog_theme", which in the general case is the same as the previously used "qs_theme". Just for TVs we override the accentColor. Before: https://hsv.googleplex.com/5706562045739008 After: https://hsv.googleplex.com/5373850558660608 Bug: 162302410 Test: flash on atv device && press +/- on remote Change-Id: I1151746cf417effbb300c0c11a26b8f75e9d8fb2 --- .../drawable/tv_volume_dialog_background.xml | 24 +++++++++++++++++++ .../res/drawable/tv_volume_dialog_circle.xml | 22 +++++++++++++++++ .../layout-land-television/volume_dialog.xml | 10 ++++---- .../volume_dialog_row.xml | 7 ++++-- .../res/layout-land/volume_dialog.xml | 2 +- .../SystemUI/res/layout/volume_dialog.xml | 2 +- .../SystemUI/res/layout/volume_dialog_row.xml | 2 +- .../res/values-land-television/dimens.xml | 3 +++ .../SystemUI/res/values-television/styles.xml | 4 ++++ packages/SystemUI/res/values/colors_tv.xml | 3 +++ packages/SystemUI/res/values/styles.xml | 3 +++ .../systemui/volume/VolumeDialogImpl.java | 4 ++-- 12 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 packages/SystemUI/res/drawable/tv_volume_dialog_background.xml create mode 100644 packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml diff --git a/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml b/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml new file mode 100644 index 0000000000000..fee6e57d2e864 --- /dev/null +++ b/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml b/packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml new file mode 100644 index 0000000000000..3c4fc05914f89 --- /dev/null +++ b/packages/SystemUI/res/drawable/tv_volume_dialog_circle.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/packages/SystemUI/res/layout-land-television/volume_dialog.xml b/packages/SystemUI/res/layout-land-television/volume_dialog.xml index e0d158d757b3f..56d847c6aa2e5 100644 --- a/packages/SystemUI/res/layout-land-television/volume_dialog.xml +++ b/packages/SystemUI/res/layout-land-television/volume_dialog.xml @@ -20,7 +20,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" - android:theme="@style/qs_theme"> + android:theme="@style/volume_dialog_theme"> + android:background="@drawable/tv_volume_dialog_background"> + android:orientation="horizontal"> @@ -98,4 +96,4 @@ - \ No newline at end of file + diff --git a/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml b/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml index 7181806013f79..c0f0aa8bbc8df 100644 --- a/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml +++ b/packages/SystemUI/res/layout-land-television/volume_dialog_row.xml @@ -21,11 +21,12 @@ android:background="@android:color/transparent" android:clipChildren="false" android:clipToPadding="false" - android:theme="@style/qs_theme"> + android:theme="@style/volume_dialog_theme"> diff --git a/packages/SystemUI/res/layout-land/volume_dialog.xml b/packages/SystemUI/res/layout-land/volume_dialog.xml index 5da7819c3d76b..c420117073c51 100644 --- a/packages/SystemUI/res/layout-land/volume_dialog.xml +++ b/packages/SystemUI/res/layout-land/volume_dialog.xml @@ -22,7 +22,7 @@ android:gravity="right" android:layout_gravity="right" android:background="@android:color/transparent" - android:theme="@style/qs_theme"> + android:theme="@style/volume_dialog_theme"> + android:theme="@style/volume_dialog_theme"> + android:theme="@style/volume_dialog_theme"> 252dp 36dp + 40dp + 5dp + 16dp diff --git a/packages/SystemUI/res/values-television/styles.xml b/packages/SystemUI/res/values-television/styles.xml index b01c5d88e3b30..4cf7034a29bfd 100644 --- a/packages/SystemUI/res/values-television/styles.xml +++ b/packages/SystemUI/res/values-television/styles.xml @@ -22,4 +22,8 @@ @null @null + + diff --git a/packages/SystemUI/res/values/colors_tv.xml b/packages/SystemUI/res/values/colors_tv.xml index 53cd9716c98e5..73f765ab2ae86 100644 --- a/packages/SystemUI/res/values/colors_tv.xml +++ b/packages/SystemUI/res/values/colors_tv.xml @@ -27,4 +27,7 @@ #4DFFFFFF #FFCC0000 + #E61F232B + #08FFFFFF + #FFDADCE0 diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml index 9e5b94ee855c4..ee07e613a0c53 100644 --- a/packages/SystemUI/res/values/styles.xml +++ b/packages/SystemUI/res/values/styles.xml @@ -387,6 +387,9 @@ @drawable/ic_arrow_back + + diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index c17ad8fd7cb1e..06c5289adab0d 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -166,7 +166,7 @@ public class VolumeDialogImpl implements VolumeDialog, public VolumeDialogImpl(Context context) { mContext = - new ContextThemeWrapper(context, R.style.qs_theme); + new ContextThemeWrapper(context, R.style.volume_dialog_theme); mController = Dependency.get(VolumeDialogController.class); mKeyguard = (KeyguardManager) mContext.getSystemService(Context.KEYGUARD_SERVICE); mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); @@ -1352,7 +1352,7 @@ public class VolumeDialogImpl implements VolumeDialog, private final class CustomDialog extends Dialog implements DialogInterface { public CustomDialog(Context context) { - super(context, R.style.qs_theme); + super(context, R.style.volume_dialog_theme); } @Override From f538f0dd78bd5bd0ef87829b86156501ade6fbec Mon Sep 17 00:00:00 2001 From: Galia Peycheva Date: Wed, 5 Aug 2020 15:52:35 +0200 Subject: [PATCH 3/3] Add volume dialog icons specific for tv We add 3 new volume icons - when tv is muted, when the volume is low and when it is high. The threshold between low and high is 12 (i.e. maxVolume / 2). We introduce a new config - config_show_low_media_volume_icon. By default this is disabled. Only for tv it is enabled. The low volume icon for non-tv devices is the same as the normal media volume icon (ic_volume_media). Therefore, if the config is enabled on a non-tv device, there would be no visible change. Test: m && flash && check new icons are in place Change-Id: I07ffc24312a5aa59dc491f967042d4cb3685e101 --- .../drawable-television/ic_volume_media.xml | 26 +++++++++++++++++ .../ic_volume_media_low.xml | 26 +++++++++++++++++ .../ic_volume_media_mute.xml | 27 +++++++++++++++++ .../res/drawable/ic_volume_media_low.xml | 18 ++++++++++++ .../SystemUI/res/values-television/config.xml | 3 ++ packages/SystemUI/res/values/config.xml | 2 ++ .../systemui/volume/VolumeDialogImpl.java | 29 ++++++++++++++----- 7 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 packages/SystemUI/res/drawable-television/ic_volume_media.xml create mode 100644 packages/SystemUI/res/drawable-television/ic_volume_media_low.xml create mode 100644 packages/SystemUI/res/drawable-television/ic_volume_media_mute.xml create mode 100644 packages/SystemUI/res/drawable/ic_volume_media_low.xml diff --git a/packages/SystemUI/res/drawable-television/ic_volume_media.xml b/packages/SystemUI/res/drawable-television/ic_volume_media.xml new file mode 100644 index 0000000000000..e43c4b471db4e --- /dev/null +++ b/packages/SystemUI/res/drawable-television/ic_volume_media.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/packages/SystemUI/res/drawable-television/ic_volume_media_low.xml b/packages/SystemUI/res/drawable-television/ic_volume_media_low.xml new file mode 100644 index 0000000000000..0f6dc9517f533 --- /dev/null +++ b/packages/SystemUI/res/drawable-television/ic_volume_media_low.xml @@ -0,0 +1,26 @@ + + + + + + diff --git a/packages/SystemUI/res/drawable-television/ic_volume_media_mute.xml b/packages/SystemUI/res/drawable-television/ic_volume_media_mute.xml new file mode 100644 index 0000000000000..4b59e13516d28 --- /dev/null +++ b/packages/SystemUI/res/drawable-television/ic_volume_media_mute.xml @@ -0,0 +1,27 @@ + + + + + + + diff --git a/packages/SystemUI/res/drawable/ic_volume_media_low.xml b/packages/SystemUI/res/drawable/ic_volume_media_low.xml new file mode 100644 index 0000000000000..87591de39d54f --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_volume_media_low.xml @@ -0,0 +1,18 @@ + + + + diff --git a/packages/SystemUI/res/values-television/config.xml b/packages/SystemUI/res/values-television/config.xml index 1696aab661481..7b1479acc35ea 100644 --- a/packages/SystemUI/res/values-television/config.xml +++ b/packages/SystemUI/res/values-television/config.xml @@ -43,4 +43,7 @@ com.android.systemui.toast.ToastUI com.android.systemui.onehanded.OneHandedUI + + + true diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index f407a8dcc57fa..390693ca376bc 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -578,4 +578,6 @@ 150 + + false diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 06c5289adab0d..4b119dd7e1768 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -150,6 +150,8 @@ public class VolumeDialogImpl implements VolumeDialog, private boolean mShowing; private boolean mShowA11yStream; + private final boolean mShowLowMediaVolumeIcon; + private int mActiveStream; private int mPrevActiveStream; private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE; @@ -175,6 +177,8 @@ public class VolumeDialogImpl implements VolumeDialog, mShowActiveStreamOnly = showActiveStreamOnly(); mHasSeenODICaptionsTooltip = Prefs.getBoolean(context, Prefs.Key.HAS_SEEN_ODI_CAPTIONS_TOOLTIP, false); + mShowLowMediaVolumeIcon = + mContext.getResources().getBoolean(R.bool.config_showLowMediaVolumeIcon); } @Override @@ -1025,19 +1029,28 @@ public class VolumeDialogImpl implements VolumeDialog, final boolean iconEnabled = (mAutomute || ss.muteSupported) && !zenMuted; row.icon.setEnabled(iconEnabled); row.icon.setAlpha(iconEnabled ? 1 : 0.5f); - final int iconRes = - isRingVibrate ? R.drawable.ic_volume_ringer_vibrate - : isRingSilent || zenMuted ? row.iconMuteRes - : ss.routedToBluetooth - ? isStreamMuted(ss) ? R.drawable.ic_volume_media_bt_mute - : R.drawable.ic_volume_media_bt - : isStreamMuted(ss) ? row.iconMuteRes : row.iconRes; + final int iconRes; + if (isRingVibrate) { + iconRes = R.drawable.ic_volume_ringer_vibrate; + } else if (isRingSilent || zenMuted) { + iconRes = row.iconMuteRes; + } else if (ss.routedToBluetooth) { + iconRes = isStreamMuted(ss) ? R.drawable.ic_volume_media_bt_mute + : R.drawable.ic_volume_media_bt; + } else if (isStreamMuted(ss)) { + iconRes = row.iconMuteRes; + } else { + iconRes = mShowLowMediaVolumeIcon && ss.level * 2 < (ss.levelMax + ss.levelMin) + ? R.drawable.ic_volume_media_low : row.iconRes; + } + row.icon.setImageResource(iconRes); row.iconState = iconRes == R.drawable.ic_volume_ringer_vibrate ? Events.ICON_STATE_VIBRATE : (iconRes == R.drawable.ic_volume_media_bt_mute || iconRes == row.iconMuteRes) ? Events.ICON_STATE_MUTE - : (iconRes == R.drawable.ic_volume_media_bt || iconRes == row.iconRes) + : (iconRes == R.drawable.ic_volume_media_bt || iconRes == row.iconRes + || iconRes == R.drawable.ic_volume_media_low) ? Events.ICON_STATE_UNMUTE : Events.ICON_STATE_UNKNOWN; if (iconEnabled) {