From 6aa3a8fae9cae22e4f243805409a2d9667eddfca Mon Sep 17 00:00:00 2001 From: Galia Peycheva Date: Fri, 19 Mar 2021 14:25:23 +0100 Subject: [PATCH] Add background blur to tv volume dialog Bug: 182905790 Test: m && check volume dialog appears as expected Test: disable blur with 'adb shell wm disable-blur 1' and check volume control ui switches to fallback non-blurry variant Change-Id: Icd0897bb33bf5d929a43d26df2ba64cbf4eb0267 --- .../drawable/tv_volume_dialog_background.xml | 4 +- .../layout-land-television/volume_dialog.xml | 5 +- .../res/values-land-television/dimens.xml | 2 +- .../SystemUI/res/values-television/colors.xml | 22 +++++++++ .../SystemUI/res/values-television/config.xml | 3 ++ .../SystemUI/res/values-television/styles.xml | 1 + packages/SystemUI/res/values/colors.xml | 4 ++ packages/SystemUI/res/values/colors_tv.xml | 1 - packages/SystemUI/res/values/config.xml | 3 ++ packages/SystemUI/res/values/dimens.xml | 2 + .../systemui/volume/VolumeDialogImpl.java | 47 +++++++++++++++++++ 11 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 packages/SystemUI/res/values-television/colors.xml diff --git a/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml b/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml index fee6e57d2e864..3705d918c538b 100644 --- a/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml +++ b/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml @@ -18,7 +18,7 @@ - - + + diff --git a/packages/SystemUI/res/layout-land-television/volume_dialog.xml b/packages/SystemUI/res/layout-land-television/volume_dialog.xml index 8179bf48e7ab7..8adc6eb753b53 100644 --- a/packages/SystemUI/res/layout-land-television/volume_dialog.xml +++ b/packages/SystemUI/res/layout-land-television/volume_dialog.xml @@ -40,14 +40,15 @@ android:translationZ="@dimen/volume_dialog_elevation" android:clipChildren="false" android:clipToPadding="false" - android:background="@drawable/tv_volume_dialog_background"> + android:background="@android:color/transparent"> + android:orientation="horizontal" + android:background="@drawable/tv_volume_dialog_background"> diff --git a/packages/SystemUI/res/values-land-television/dimens.xml b/packages/SystemUI/res/values-land-television/dimens.xml index 8c905739b9919..220ed5cce83e0 100644 --- a/packages/SystemUI/res/values-land-television/dimens.xml +++ b/packages/SystemUI/res/values-land-television/dimens.xml @@ -22,9 +22,9 @@ 24dp 4dp @dimen/volume_dialog_slider_width + 100dp 36dp - 36dp 6dp 16sp 24dp diff --git a/packages/SystemUI/res/values-television/colors.xml b/packages/SystemUI/res/values-television/colors.xml new file mode 100644 index 0000000000000..e5f3b4768fe24 --- /dev/null +++ b/packages/SystemUI/res/values-television/colors.xml @@ -0,0 +1,22 @@ + + + + #E61F232B + #C71F232B + diff --git a/packages/SystemUI/res/values-television/config.xml b/packages/SystemUI/res/values-television/config.xml index b02d8b8cf7e42..70bd850361980 100644 --- a/packages/SystemUI/res/values-television/config.xml +++ b/packages/SystemUI/res/values-television/config.xml @@ -60,4 +60,7 @@ 400 + + + true diff --git a/packages/SystemUI/res/values-television/styles.xml b/packages/SystemUI/res/values-television/styles.xml index 4cf7034a29bfd..97a42d9bc1d29 100644 --- a/packages/SystemUI/res/values-television/styles.xml +++ b/packages/SystemUI/res/values-television/styles.xml @@ -25,5 +25,6 @@ diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index 4e3e64ac79f4b..b587513577c94 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -243,6 +243,10 @@ #FF9900 #7F000000 + + @android:color/transparent + @android:color/transparent + #80ffffff ?android:attr/colorAccent diff --git a/packages/SystemUI/res/values/colors_tv.xml b/packages/SystemUI/res/values/colors_tv.xml index 64c942de88754..51b57bdacc9f3 100644 --- a/packages/SystemUI/res/values/colors_tv.xml +++ b/packages/SystemUI/res/values/colors_tv.xml @@ -26,7 +26,6 @@ #33FFFFFF #FFCC0000 - #E61F232B #08FFFFFF #1AFFFFFF #40000000 diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 6e61148f4ac87..d685d93931439 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -599,4 +599,7 @@ false + + + false diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index d5c6398dd7195..43d636d8b8654 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -484,6 +484,8 @@ 9dp + 0dp + 76dp 32dp diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 044d8285b079b..1026a5ca1be54 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -76,6 +76,7 @@ import android.view.ContextThemeWrapper; import android.view.MotionEvent; import android.view.View; import android.view.View.AccessibilityDelegate; +import android.view.View.OnAttachStateChangeListener; import android.view.ViewGroup; import android.view.ViewPropertyAnimator; import android.view.ViewStub; @@ -95,6 +96,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; +import com.android.internal.graphics.drawable.BackgroundBlurDrawable; import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.Interpolators; @@ -115,6 +117,7 @@ import com.android.systemui.util.RoundedCornerProgressDrawable; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; /** * Visual presentation of the volume dialog. @@ -214,6 +217,10 @@ public class VolumeDialogImpl implements VolumeDialog, private ViewStub mODICaptionsTooltipViewStub; private View mODICaptionsTooltipView = null; + private final boolean mUseBackgroundBlur; + private Consumer mCrossWindowBlurEnabledListener; + private BackgroundBlurDrawable mDialogRowsViewBackground; + public VolumeDialogImpl(Context context) { mContext = new ContextThemeWrapper(context, R.style.volume_dialog_theme); @@ -233,6 +240,20 @@ public class VolumeDialogImpl implements VolumeDialog, mContext.getResources().getInteger(R.integer.config_dialogShowAnimationDurationMs); mDialogHideAnimationDurationMs = mContext.getResources().getInteger(R.integer.config_dialogHideAnimationDurationMs); + mUseBackgroundBlur = + mContext.getResources().getBoolean(R.bool.config_volumeDialogUseBackgroundBlur); + + if (mUseBackgroundBlur) { + final int dialogRowsViewColorAboveBlur = mContext.getColor( + R.color.volume_dialog_background_color_above_blur); + final int dialogRowsViewColorNoBlur = mContext.getColor( + R.color.volume_dialog_background_color); + mCrossWindowBlurEnabledListener = (enabled) -> { + mDialogRowsViewBackground.setColor( + enabled ? dialogRowsViewColorAboveBlur : dialogRowsViewColorNoBlur); + mDialogRowsView.invalidate(); + }; + } mRingerDrawerItemSize = mContext.getResources().getDimensionPixelSize( R.dimen.volume_ringer_drawer_item_size); mShowVibrate = mController.hasVibrator(); @@ -356,6 +377,32 @@ public class VolumeDialogImpl implements VolumeDialog, }); mDialogRowsView = mDialog.findViewById(R.id.volume_dialog_rows); + if (mUseBackgroundBlur) { + mDialogView.addOnAttachStateChangeListener(new OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(View v) { + mWindow.getWindowManager().addCrossWindowBlurEnabledListener( + mCrossWindowBlurEnabledListener); + + mDialogRowsViewBackground = v.getViewRootImpl().createBackgroundBlurDrawable(); + + final Resources resources = mContext.getResources(); + mDialogRowsViewBackground.setCornerRadius( + mContext.getResources().getDimensionPixelSize(Utils.getThemeAttr( + mContext, android.R.attr.dialogCornerRadius))); + mDialogRowsViewBackground.setBlurRadius(resources.getDimensionPixelSize( + R.dimen.volume_dialog_background_blur_radius)); + mDialogRowsView.setBackground(mDialogRowsViewBackground); + } + + @Override + public void onViewDetachedFromWindow(View v) { + mWindow.getWindowManager().removeCrossWindowBlurEnabledListener( + mCrossWindowBlurEnabledListener); + } + }); + } + mRinger = mDialog.findViewById(R.id.ringer); if (mRinger != null) { mRingerIcon = mRinger.findViewById(R.id.ringer_icon);