From da0fe825a4079d1b1f0b41bd92ee2ac06161ecc3 Mon Sep 17 00:00:00 2001 From: Beverly Date: Thu, 8 Feb 2018 17:19:01 -0500 Subject: [PATCH] Added DND icon on muted streams on volume dialog Now users cannot toggle off dnd from the volume dialog since the ringer (volume footer) will be disabled if it's muted by dnd Test: manual Change-Id: I7d4dd552e0f791ee52135272d8d0837899abe152 Fixes: 72711020 --- .../res/color/accent_tint_color_selector.xml | 21 +++ .../SystemUI/res/layout/volume_dialog.xml | 81 ++++++----- .../SystemUI/res/layout/volume_dialog_row.xml | 131 ++++++++++-------- .../SystemUI/res/layout/volume_dnd_icon.xml | 30 ++++ .../systemui/volume/VolumeDialogImpl.java | 32 +++++ 5 files changed, 196 insertions(+), 99 deletions(-) create mode 100644 packages/SystemUI/res/color/accent_tint_color_selector.xml create mode 100644 packages/SystemUI/res/layout/volume_dnd_icon.xml diff --git a/packages/SystemUI/res/color/accent_tint_color_selector.xml b/packages/SystemUI/res/color/accent_tint_color_selector.xml new file mode 100644 index 0000000000000..85af186ab45ea --- /dev/null +++ b/packages/SystemUI/res/color/accent_tint_color_selector.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml index bab4eba72822c..803659f9c7aef 100644 --- a/packages/SystemUI/res/layout/volume_dialog.xml +++ b/packages/SystemUI/res/layout/volume_dialog.xml @@ -38,59 +38,64 @@ android:layout_height="wrap_content" android:clipChildren="false" android:clipToPadding="false" - android:paddingTop="10dp" - android:paddingBottom="10dp" android:background="@drawable/rounded_bg_full" android:translationZ="@dimen/volume_panel_elevation" android:orientation="horizontal" > - + android:background="@drawable/rounded_bg_full"> - + - + - + - + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/volume_dialog_row.xml b/packages/SystemUI/res/layout/volume_dialog_row.xml index 70654a803b44a..fb9355ad061b8 100644 --- a/packages/SystemUI/res/layout/volume_dialog_row.xml +++ b/packages/SystemUI/res/layout/volume_dialog_row.xml @@ -13,89 +13,98 @@ See the License for the specific language governing permissions and limitations under the License. --> - + android:theme="@style/qs_theme"> - + android:orientation="vertical" > + + android:gravity="center" + android:padding="5dp"> - + + android:gravity="center"> + + + - - - - + android:layout_height="@dimen/volume_dialog_panel_width"> + + - + + - \ No newline at end of file + + + diff --git a/packages/SystemUI/res/layout/volume_dnd_icon.xml b/packages/SystemUI/res/layout/volume_dnd_icon.xml new file mode 100644 index 0000000000000..215b2300992a4 --- /dev/null +++ b/packages/SystemUI/res/layout/volume_dnd_icon.xml @@ -0,0 +1,30 @@ + + + + + diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index fb5c447c2592d..8881ee94092ea 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -68,6 +68,7 @@ import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener; import android.view.animation.DecelerateInterpolator; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; @@ -109,7 +110,9 @@ public class VolumeDialogImpl implements VolumeDialog { private ViewGroup mDialogRowsView; private ViewGroup mFooter; private ImageButton mRingerIcon; + private ImageView mZenIcon; private TextView mRingerStatus; + private TextView mRingerTitle; private final List mRows = new ArrayList<>(); private ConfigurableTexts mConfigurableTexts; private final SparseBooleanArray mDynamic = new SparseBooleanArray(); @@ -216,6 +219,8 @@ public class VolumeDialogImpl implements VolumeDialog { mFooter = mDialog.findViewById(R.id.footer); mRingerIcon = mFooter.findViewById(R.id.ringer_icon); mRingerStatus = mFooter.findViewById(R.id.ringer_status); + mRingerTitle = mFooter.findViewById(R.id.ringer_title); + mZenIcon = mFooter.findViewById(R.id.dnd_icon); if (mRows.isEmpty()) { addRow(AudioManager.STREAM_MUSIC, @@ -349,6 +354,7 @@ public class VolumeDialogImpl implements VolumeDialog { if (stream == STREAM_ACCESSIBILITY) { row.header.setFilters(new InputFilter[] {new InputFilter.LengthFilter(13)}); } + 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.anim = null; @@ -559,6 +565,8 @@ public class VolumeDialogImpl implements VolumeDialog { if (ss == null) { return; } + + enableRingerViewsH(mState.zenMode == Global.ZEN_MODE_OFF || !mState.disallowRinger); switch (mState.ringerModeInternal) { case AudioManager.RINGER_MODE_VIBRATE: mRingerStatus.setText(R.string.volume_ringer_status_vibrate); @@ -603,6 +611,28 @@ public class VolumeDialogImpl implements VolumeDialog { } } + /** + * Toggles enable state of views in a VolumeRow (not including seekbar, outputChooser or icon) + * Hides/shows zen icon + * @param enable whether to enable volume row views and hide dnd icon + */ + private void enableVolumeRowViewsH(VolumeRow row, boolean enable) { + row.header.setEnabled(enable); + row.dndIcon.setVisibility(enable ? View.GONE : View.VISIBLE); + } + + /** + * Toggles enable state of footer/ringer views + * Hides/shows zen icon + * @param enable whether to enable ringer views and hide dnd icon + */ + private void enableRingerViewsH(boolean enable) { + mRingerTitle.setEnabled(enable); + mRingerStatus.setEnabled(enable); + mRingerIcon.setEnabled(enable); + mZenIcon.setVisibility(enable ? View.GONE : View.VISIBLE); + } + private void trimObsoleteH() { if (D.BUG) Log.d(TAG, "trimObsoleteH"); for (int i = mRows.size() - 1; i >= 0; i--) { @@ -748,6 +778,7 @@ public class VolumeDialogImpl implements VolumeDialog { if (zenMuted) { row.tracking = false; } + enableVolumeRowViewsH(row, !zenMuted); // update slider final boolean enableSlider = !zenMuted; @@ -1178,5 +1209,6 @@ public class VolumeDialogImpl implements VolumeDialog { private int lastAudibleLevel = 1; private View outputChooser; private TextView connectedDevice; + private ImageView dndIcon; } }