diff options
author | 2021-03-31 15:25:05 +0000 | |
---|---|---|
committer | 2021-03-31 15:25:05 +0000 | |
commit | 6b437d28f191af1d77d4808b239e764a716b575c (patch) | |
tree | 4197d689c1a3c66c394bbd47e5a8b82496ff1159 | |
parent | 2e6c469012aea6e414dcf446bb477de16d732a96 (diff) | |
parent | 6aa3a8fae9cae22e4f243805409a2d9667eddfca (diff) |
Merge "Add background blur to tv volume dialog" into sc-dev
11 files changed, 88 insertions, 6 deletions
diff --git a/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml b/packages/SystemUI/res/drawable/tv_volume_dialog_background.xml index fee6e57d2e86..3705d918c538 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 @@ <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> - <solid android:color="@color/tv_volume_dialog_background" /> - <corners android:radius="@dimen/tv_volume_dialog_corner_radius"/> + <solid android:color="@color/volume_dialog_background_color" /> + <corners android:radius="?android:attr/dialogCornerRadius"/> </shape> diff --git a/packages/SystemUI/res/layout-land-television/volume_dialog.xml b/packages/SystemUI/res/layout-land-television/volume_dialog.xml index 8179bf48e7ab..8adc6eb753b5 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"> <LinearLayout android:id="@+id/volume_dialog_rows" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" - android:orientation="horizontal"> + android:orientation="horizontal" + android:background="@drawable/tv_volume_dialog_background"> <!-- volume rows added and removed here! :-) --> </LinearLayout> diff --git a/packages/SystemUI/res/values-land-television/dimens.xml b/packages/SystemUI/res/values-land-television/dimens.xml index 8c905739b991..220ed5cce83e 100644 --- a/packages/SystemUI/res/values-land-television/dimens.xml +++ b/packages/SystemUI/res/values-land-television/dimens.xml @@ -22,9 +22,9 @@ <dimen name="volume_dialog_panel_transparent_padding">24dp</dimen> <dimen name="volume_dialog_slider_width">4dp</dimen> <dimen name="volume_dialog_slider_corner_radius">@dimen/volume_dialog_slider_width</dimen> + <dimen name="volume_dialog_background_blur_radius">100dp</dimen> <dimen name="tv_volume_dialog_bubble_size">36dp</dimen> - <dimen name="tv_volume_dialog_corner_radius">36dp</dimen> <dimen name="tv_volume_dialog_row_padding">6dp</dimen> <dimen name="tv_volume_number_text_size">16sp</dimen> <dimen name="tv_volume_seek_bar_thumb_diameter">24dp</dimen> diff --git a/packages/SystemUI/res/values-television/colors.xml b/packages/SystemUI/res/values-television/colors.xml new file mode 100644 index 000000000000..e5f3b4768fe2 --- /dev/null +++ b/packages/SystemUI/res/values-television/colors.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* + * Copyright 2021, 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. + */ +--> +<resources> + <color name="volume_dialog_background_color">#E61F232B</color> + <color name="volume_dialog_background_color_above_blur">#C71F232B</color> +</resources> diff --git a/packages/SystemUI/res/values-television/config.xml b/packages/SystemUI/res/values-television/config.xml index b02d8b8cf7e4..70bd85036198 100644 --- a/packages/SystemUI/res/values-television/config.xml +++ b/packages/SystemUI/res/values-television/config.xml @@ -60,4 +60,7 @@ <!-- The duraction of the hide animation for the volume dialog in milliseconds --> <integer name="config_dialogHideAnimationDurationMs">400</integer> + + <!-- Whether to use window background blur for the volume dialog. --> + <bool name="config_volumeDialogUseBackgroundBlur">true</bool> </resources> diff --git a/packages/SystemUI/res/values-television/styles.xml b/packages/SystemUI/res/values-television/styles.xml index 4cf7034a29bf..97a42d9bc1d2 100644 --- a/packages/SystemUI/res/values-television/styles.xml +++ b/packages/SystemUI/res/values-television/styles.xml @@ -25,5 +25,6 @@ <style name="volume_dialog_theme" parent="qs_theme"> <item name="android:colorAccent">@color/tv_volume_dialog_accent</item> + <item name="android:dialogCornerRadius">@dimen/volume_dialog_panel_width_half</item> </style> </resources> diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index e5058639dea5..e3bf12495a82 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -243,6 +243,10 @@ <color name="magnification_border_color">#FF9900</color> <color name="magnification_switch_button_color">#7F000000</color> + <!-- Volume dialog colors --> + <color name="volume_dialog_background_color">@android:color/transparent</color> + <color name="volume_dialog_background_color_above_blur">@android:color/transparent</color> + <!-- media --> <color name="media_disabled">#80ffffff</color> <color name="media_seamless_border">?android:attr/colorAccent</color> diff --git a/packages/SystemUI/res/values/colors_tv.xml b/packages/SystemUI/res/values/colors_tv.xml index 64c942de8875..51b57bdacc9f 100644 --- a/packages/SystemUI/res/values/colors_tv.xml +++ b/packages/SystemUI/res/values/colors_tv.xml @@ -26,7 +26,6 @@ <color name="tv_audio_recording_indicator_stroke">#33FFFFFF</color> <color name="red">#FFCC0000</color> - <color name="tv_volume_dialog_background">#E61F232B</color> <color name="tv_volume_dialog_circle">#08FFFFFF</color> <color name="tv_volume_dialog_seek_thumb_focus_ring">#1AFFFFFF</color> <color name="tv_volume_dialog_seek_thumb_shadow">#40000000</color> diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index a97764755cff..53a42aeb2b87 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -620,4 +620,7 @@ <!-- Whether a transition of ACTIVITY_TYPE_ASSISTANT to the home app should play a home sound effect --> <bool name="config_playHomeSoundAfterAssistant">false</bool> + + <!-- Whether to use window background blur for the volume dialog. --> + <bool name="config_volumeDialogUseBackgroundBlur">false</bool> </resources> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index f722c94c7382..d4e425bc92fa 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -486,6 +486,8 @@ <dimen name="volume_dialog_elevation">9dp</dimen> + <dimen name="volume_dialog_background_blur_radius">0dp</dimen> + <dimen name="volume_tool_tip_right_margin">76dp</dimen> <dimen name="volume_tool_tip_bottom_margin">32dp</dimen> diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 044d8285b079..1026a5ca1be5 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<Boolean> 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); |