Merge "Re-re-designs the volume panel." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4fb65c3a6d
26
packages/SystemUI/res/drawable/volume_background.xml
Normal file
26
packages/SystemUI/res/drawable/volume_background.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 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
|
||||
-->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
|
||||
<item>
|
||||
<shape>
|
||||
<size android:width="@dimen/volume_dialog_panel_width" />
|
||||
<solid android:color="?androidprv:attr/colorSurface" />
|
||||
<corners android:radius="@dimen/volume_dialog_panel_width_half"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -9,7 +9,6 @@
|
||||
~ 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.
|
||||
@@ -19,38 +18,24 @@
|
||||
and a bottom-aligned icon) and a progress layer (with an accent-colored round rect and icon)
|
||||
that moves up and down with the progress value. -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:paddingMode="stack" >
|
||||
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
|
||||
android:paddingMode="stack" >
|
||||
<item android:id="@android:id/background"
|
||||
android:gravity="center_vertical|fill_horizontal">
|
||||
<layer-list>
|
||||
<item android:id="@+id/volume_seekbar_background_solid">
|
||||
<shape>
|
||||
<size android:height="@dimen/volume_dialog_slider_width" />
|
||||
<solid android:color="?android:attr/colorBackgroundFloating" />
|
||||
<corners android:radius="@dimen/volume_dialog_slider_corner_radius" />
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/volume_seekbar_background_icon"
|
||||
android:gravity="center_vertical|left"
|
||||
android:height="@dimen/rounded_slider_icon_size"
|
||||
android:width="@dimen/rounded_slider_icon_size"
|
||||
android:left="@dimen/rounded_slider_icon_inset">
|
||||
<rotate
|
||||
android:fromDegrees="-270"
|
||||
android:toDegrees="-270">
|
||||
<!-- A placeholder drawable is required here - it'll be replaced in code. -->
|
||||
<com.android.systemui.util.AlphaTintDrawableWrapper
|
||||
android:drawable="@drawable/ic_volume_media"
|
||||
android:tint="?android:attr/colorAccent" />
|
||||
</rotate>
|
||||
</item>
|
||||
</layer-list>
|
||||
<inset
|
||||
android:insetLeft="@dimen/rounded_slider_track_inset"
|
||||
android:insetRight="@dimen/rounded_slider_track_inset" >
|
||||
<shape>
|
||||
<size android:height="@dimen/volume_dialog_track_width" />
|
||||
<corners android:radius="@dimen/volume_dialog_track_corner_radius" />
|
||||
<solid android:color="?androidprv:attr/colorAccentSecondaryVariant" />
|
||||
</shape>
|
||||
</inset>
|
||||
</item>
|
||||
<item android:id="@android:id/progress"
|
||||
android:gravity="center_vertical|fill_horizontal">
|
||||
<com.android.systemui.util.RoundedCornerProgressDrawable
|
||||
android:drawable="@drawable/volume_row_seekbar_progress"
|
||||
android:gravity="center_vertical|fill_horizontal">
|
||||
<com.android.systemui.util.RoundedCornerProgressDrawable
|
||||
android:drawable="@drawable/volume_row_seekbar_progress"
|
||||
/>
|
||||
</item>
|
||||
</layer-list>
|
||||
|
||||
@@ -18,12 +18,13 @@
|
||||
<!-- Progress drawable for volume row SeekBars. This is the accent-colored round rect that moves up
|
||||
and down as the progress value changes. -->
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
|
||||
android:autoMirrored="true">
|
||||
<item android:id="@+id/volume_seekbar_progress_solid">
|
||||
<shape>
|
||||
<size android:height="@dimen/volume_dialog_panel_width" />
|
||||
<size android:height="@dimen/volume_dialog_slider_width" />
|
||||
<solid android:color="?android:attr/colorAccent" />
|
||||
<corners android:radius="@dimen/volume_dialog_panel_width_half"/>
|
||||
<corners android:radius="@dimen/volume_dialog_slider_corner_radius"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
@@ -38,7 +39,7 @@
|
||||
<!-- A placeholder drawable is required here - it'll be replaced in code. -->
|
||||
<com.android.systemui.util.AlphaTintDrawableWrapper
|
||||
android:drawable="@drawable/ic_volume_media"
|
||||
android:tint="?android:attr/colorBackgroundFloating" />
|
||||
android:tint="?androidprv:attr/colorAccentPrimaryVariant" />
|
||||
</rotate>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -16,114 +16,119 @@
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:sysui="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
|
||||
android:id="@+id/volume_dialog_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="right"
|
||||
android:layout_gravity="right"
|
||||
android:paddingRight="@dimen/volume_dialog_stream_padding"
|
||||
android:clipToPadding="false"
|
||||
android:background="@android:color/transparent"
|
||||
android:theme="@style/volume_dialog_theme">
|
||||
|
||||
<!-- right-aligned to be physically near volume button -->
|
||||
<LinearLayout
|
||||
android:id="@+id/volume_dialog"
|
||||
android:minWidth="@dimen/volume_dialog_panel_width"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="right"
|
||||
android:layout_gravity="right"
|
||||
android:background="@android:color/transparent"
|
||||
android:paddingRight="@dimen/volume_dialog_panel_transparent_padding_right"
|
||||
android:paddingLeft="@dimen/volume_dialog_panel_transparent_padding"
|
||||
android:layout_marginRight="@dimen/volume_dialog_panel_transparent_padding_right"
|
||||
android:orientation="vertical"
|
||||
android:clipToPadding="false"
|
||||
android:clipChildren="false">
|
||||
|
||||
<include layout="@layout/volume_ringer_drawer" />
|
||||
|
||||
<FrameLayout
|
||||
android:visibility="gone"
|
||||
android:id="@+id/ringer"
|
||||
android:layout_width="@dimen/volume_dialog_ringer_size"
|
||||
android:layout_height="@dimen/volume_dialog_ringer_size"
|
||||
android:layout_marginBottom="@dimen/volume_dialog_spacer"
|
||||
android:gravity="right"
|
||||
android:layout_gravity="right"
|
||||
android:translationZ="@dimen/volume_dialog_elevation"
|
||||
android:clipToPadding="false"
|
||||
android:background="@drawable/rounded_bg_full">
|
||||
<com.android.keyguard.AlphaOptimizedImageButton
|
||||
android:id="@+id/ringer_icon"
|
||||
style="@style/VolumeButtons"
|
||||
android:background="@drawable/rounded_ripple"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitCenter"
|
||||
android:padding="@dimen/volume_dialog_ringer_icon_padding"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:layout_gravity="center"
|
||||
android:soundEffectsEnabled="false" />
|
||||
|
||||
<include layout="@layout/volume_dnd_icon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/volume_dialog_stream_padding"
|
||||
android:layout_marginTop="6dp"/>
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/main"
|
||||
android:minWidth="@dimen/volume_dialog_panel_width"
|
||||
android:id="@+id/volume_dialog_ringer_and_rows_container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="right"
|
||||
android:layout_gravity="right"
|
||||
android:orientation="vertical"
|
||||
android:padding="7dp"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false" >
|
||||
android:background="@drawable/volume_background">
|
||||
|
||||
<include layout="@layout/volume_ringer_drawer" />
|
||||
|
||||
<FrameLayout
|
||||
android:visibility="gone"
|
||||
android:id="@+id/ringer"
|
||||
android:layout_width="@dimen/volume_dialog_ringer_size"
|
||||
android:layout_height="@dimen/volume_dialog_ringer_size"
|
||||
android:layout_marginBottom="@dimen/volume_dialog_spacer"
|
||||
android:gravity="right"
|
||||
android:layout_gravity="right"
|
||||
android:translationZ="@dimen/volume_dialog_elevation"
|
||||
android:clipToPadding="false"
|
||||
android:background="@drawable/rounded_bg_full">
|
||||
<com.android.keyguard.AlphaOptimizedImageButton
|
||||
android:id="@+id/ringer_icon"
|
||||
style="@style/VolumeButtons"
|
||||
android:background="@drawable/rounded_ripple"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:scaleType="fitCenter"
|
||||
android:padding="@dimen/volume_dialog_ringer_icon_padding"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:layout_gravity="center"
|
||||
android:soundEffectsEnabled="false" />
|
||||
|
||||
<include layout="@layout/volume_dnd_icon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/volume_dialog_stream_padding"
|
||||
android:layout_marginTop="6dp"/>
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/volume_dialog_rows"
|
||||
android:id="@+id/main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minWidth="@dimen/volume_dialog_panel_width"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="@dimen/volume_row_slider_padding_start">
|
||||
<!-- volume rows added and removed here! :-) -->
|
||||
android:gravity="right"
|
||||
android:layout_gravity="right"
|
||||
android:orientation="vertical"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false" >
|
||||
<LinearLayout
|
||||
android:id="@+id/volume_dialog_rows"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:layout_marginTop="@dimen/volume_row_slider_padding_start">
|
||||
<!-- volume rows added and removed here! :-) -->
|
||||
</LinearLayout>
|
||||
<FrameLayout
|
||||
android:id="@+id/settings_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<com.android.keyguard.AlphaOptimizedImageButton
|
||||
android:id="@+id/settings"
|
||||
android:src="@drawable/horizontal_ellipsis"
|
||||
android:layout_width="@dimen/volume_dialog_tap_target_size"
|
||||
android:layout_height="@dimen/volume_dialog_tap_target_size"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/accessibility_volume_settings"
|
||||
android:background="@drawable/ripple_drawable_20dp"
|
||||
android:tint="?androidprv:attr/colorAccent"
|
||||
android:soundEffectsEnabled="false" />
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
<FrameLayout
|
||||
android:id="@+id/settings_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<com.android.keyguard.AlphaOptimizedImageButton
|
||||
android:id="@+id/settings"
|
||||
android:src="@drawable/horizontal_ellipsis"
|
||||
android:layout_width="@dimen/volume_dialog_tap_target_size"
|
||||
android:layout_height="@dimen/volume_dialog_tap_target_size"
|
||||
android:layout_gravity="center"
|
||||
android:contentDescription="@string/accessibility_volume_settings"
|
||||
android:background="@drawable/ripple_drawable_20dp"
|
||||
android:tint="?android:attr/colorBackgroundFloating"
|
||||
android:soundEffectsEnabled="false" />
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/odi_captions"
|
||||
android:layout_width="@dimen/volume_dialog_caption_size"
|
||||
android:layout_height="@dimen/volume_dialog_caption_size"
|
||||
android:layout_marginTop="@dimen/volume_dialog_spacer"
|
||||
android:layout_marginTop="@dimen/volume_dialog_row_margin_bottom"
|
||||
android:gravity="right"
|
||||
android:layout_gravity="right"
|
||||
android:layout_gravity="center"
|
||||
android:clipToPadding="false"
|
||||
android:background="@drawable/rounded_bg_full">
|
||||
android:background="@drawable/volume_background">
|
||||
<com.android.systemui.volume.CaptionsToggleImageButton
|
||||
android:id="@+id/odi_captions_icon"
|
||||
android:src="@drawable/ic_volume_odi_captions_disabled"
|
||||
style="@style/VolumeButtons"
|
||||
android:background="@drawable/rounded_ripple"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:tint="?android:attr/colorAccent"
|
||||
@@ -131,7 +136,6 @@
|
||||
android:soundEffectsEnabled="false"
|
||||
sysui:optedOut="false"/>
|
||||
</FrameLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<ViewStub
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:tag="row"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="@dimen/volume_dialog_panel_width"
|
||||
android:layout_width="@dimen/volume_dialog_slider_width"
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false"
|
||||
android:translationZ="@dimen/volume_dialog_elevation"
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
<LinearLayout
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="@dimen/volume_dialog_panel_width"
|
||||
android:layout_width="@dimen/volume_dialog_slider_width"
|
||||
android:gravity="center"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical" >
|
||||
@@ -54,7 +54,9 @@
|
||||
android:layout_width="@dimen/volume_row_slider_height"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:thumb="@android:color/transparent"
|
||||
android:thumb="@null"
|
||||
android:splitTrack="false"
|
||||
android:progressDrawable="@drawable/volume_row_seekbar"
|
||||
android:rotation="270" />
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
android:layout_width="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_height="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_gravity="center"
|
||||
android:tint="?android:attr/colorAccent"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:src="@drawable/ic_volume_ringer_vibrate" />
|
||||
|
||||
</FrameLayout>
|
||||
@@ -77,7 +77,7 @@
|
||||
android:layout_width="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_height="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_gravity="center"
|
||||
android:tint="?android:attr/colorAccent"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:src="@drawable/ic_volume_ringer_mute" />
|
||||
|
||||
</FrameLayout>
|
||||
@@ -94,7 +94,7 @@
|
||||
android:layout_width="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_height="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_gravity="center"
|
||||
android:tint="?android:attr/colorAccent"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
android:src="@drawable/ic_volume_ringer" />
|
||||
|
||||
</FrameLayout>
|
||||
@@ -118,7 +118,7 @@
|
||||
android:layout_width="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_height="@dimen/volume_ringer_drawer_icon_size"
|
||||
android:layout_gravity="center"
|
||||
android:tint="?android:attr/colorBackgroundFloating"
|
||||
android:tint="?android:attr/textColorPrimaryInverse"
|
||||
android:src="@drawable/ic_volume_media" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
@@ -461,29 +461,33 @@
|
||||
<!-- The width of the panel that holds the quick settings. -->
|
||||
<dimen name="qs_panel_width">@dimen/notification_panel_width</dimen>
|
||||
|
||||
<dimen name="volume_dialog_panel_transparent_padding_right">4dp</dimen>
|
||||
<dimen name="volume_dialog_panel_transparent_padding_right">8dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_panel_transparent_padding">20dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_stream_padding">12dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_panel_width">64dp</dimen>
|
||||
<dimen name="volume_dialog_panel_width">56dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_panel_width_half">32dp</dimen>
|
||||
<dimen name="volume_dialog_panel_width_half">28dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_slider_width">42dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_slider_corner_radius">21dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_slider_height">116dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_slider_width">@dimen/volume_dialog_panel_width</dimen>
|
||||
<dimen name="volume_dialog_track_width">4dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_slider_corner_radius">@dimen/volume_dialog_panel_width_half</dimen>
|
||||
<dimen name="volume_dialog_track_corner_radius">2dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_ringer_size">64dp</dimen>
|
||||
<dimen name="volume_dialog_ringer_size">42dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_ringer_icon_padding">20dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_caption_size">64dp</dimen>
|
||||
<dimen name="volume_dialog_caption_size">56dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_tap_target_size">48dp</dimen>
|
||||
<dimen name="volume_dialog_tap_target_size">42dp</dimen>
|
||||
|
||||
<dimen name="volume_dialog_spacer">4dp</dimen>
|
||||
|
||||
@@ -504,8 +508,8 @@
|
||||
<dimen name="volume_tool_tip_arrow_corner_radius">2dp</dimen>
|
||||
|
||||
<!-- Size of each item in the ringer selector drawer. -->
|
||||
<dimen name="volume_ringer_drawer_item_size">64dp</dimen>
|
||||
<dimen name="volume_ringer_drawer_item_size_half">32dp</dimen>
|
||||
<dimen name="volume_ringer_drawer_item_size">42dp</dimen>
|
||||
<dimen name="volume_ringer_drawer_item_size_half">21dp</dimen>
|
||||
|
||||
<!-- Size of the icon inside each item in the ringer selector drawer. -->
|
||||
<dimen name="volume_ringer_drawer_icon_size">24dp</dimen>
|
||||
|
||||
@@ -53,6 +53,7 @@ import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Region;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
@@ -96,6 +97,8 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.android.internal.graphics.drawable.BackgroundBlurDrawable;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.systemui.Dependency;
|
||||
@@ -162,6 +165,9 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
private ViewGroup mDialogRowsView;
|
||||
private ViewGroup mRinger;
|
||||
|
||||
@Nullable private View mRingerAndRowsContainer;
|
||||
@Nullable private Drawable mRingerAndRowsContainerBackground;
|
||||
|
||||
private ViewGroup mSelectedRingerContainer;
|
||||
private ImageView mSelectedRingerIcon;
|
||||
|
||||
@@ -183,6 +189,12 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
private ImageView mRingerDrawerIconAnimatingSelected;
|
||||
private ImageView mRingerDrawerIconAnimatingDeselected;
|
||||
|
||||
/**
|
||||
* Animates the volume dialog's background drawable bounds upwards, to match the height of the
|
||||
* expanded ringer drawer.
|
||||
*/
|
||||
private final ValueAnimator mAnimateUpBackgroundToMatchDrawer = ValueAnimator.ofFloat(1f, 0f);
|
||||
|
||||
private boolean mIsRingerDrawerOpen = false;
|
||||
|
||||
private ImageButton mRingerIcon;
|
||||
@@ -586,20 +598,26 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
|
||||
row.anim = null;
|
||||
|
||||
mRingerAndRowsContainer = mDialogView.findViewById(
|
||||
R.id.volume_dialog_ringer_and_rows_container);
|
||||
|
||||
if (mRingerAndRowsContainer != null) {
|
||||
// Wait for layout so the background bounds are set, then set the background top to the
|
||||
// ringer drawer closed position.
|
||||
mRingerAndRowsContainer.post(() -> {
|
||||
final LayerDrawable bgWrapper =
|
||||
((LayerDrawable) mRingerAndRowsContainer.getBackground());
|
||||
|
||||
if (bgWrapper != null) {
|
||||
mRingerAndRowsContainerBackground = bgWrapper.getDrawable(0);
|
||||
setRingerAndRowsBackgroundTop(1f /* closedAmount */);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
final LayerDrawable seekbarDrawable =
|
||||
(LayerDrawable) mContext.getDrawable(R.drawable.volume_row_seekbar);
|
||||
|
||||
final LayerDrawable seekbarBgDrawable =
|
||||
(LayerDrawable) seekbarDrawable.findDrawableByLayerId(android.R.id.background);
|
||||
|
||||
row.sliderBgSolid = seekbarBgDrawable.findDrawableByLayerId(
|
||||
R.id.volume_seekbar_background_solid);
|
||||
|
||||
final Drawable sliderBgIcon = seekbarBgDrawable.findDrawableByLayerId(
|
||||
R.id.volume_seekbar_background_icon);
|
||||
row.sliderBgIcon = sliderBgIcon != null ? (AlphaTintDrawableWrapper)
|
||||
((RotateDrawable) sliderBgIcon).getDrawable() : null;
|
||||
|
||||
final LayerDrawable seekbarProgressDrawable = (LayerDrawable)
|
||||
((RoundedCornerProgressDrawable) seekbarDrawable.findDrawableByLayerId(
|
||||
android.R.id.progress)).getDrawable();
|
||||
@@ -679,10 +697,10 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
mDialogView.getPaddingLeft(),
|
||||
mDialogView.getPaddingTop(),
|
||||
mDialogView.getPaddingRight(),
|
||||
mDialogView.getPaddingBottom() + (mRingerCount - 1) * mRingerDrawerItemSize);
|
||||
mDialogView.getPaddingBottom() + getRingerDrawerOpenExtraHeight());
|
||||
} else {
|
||||
mDialogView.setPadding(
|
||||
mDialogView.getPaddingLeft() + (mRingerCount - 1) * mRingerDrawerItemSize,
|
||||
mDialogView.getPaddingLeft() + getRingerDrawerOpenExtraHeight(),
|
||||
mDialogView.getPaddingTop(),
|
||||
mDialogView.getPaddingRight(),
|
||||
mDialogView.getPaddingBottom());
|
||||
@@ -731,6 +749,9 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
}
|
||||
});
|
||||
mRingerDrawerIconColorAnimator.setDuration(DRAWER_ANIMATION_DURATION_SHORT);
|
||||
|
||||
mAnimateUpBackgroundToMatchDrawer.addUpdateListener(valueAnimator ->
|
||||
setRingerAndRowsBackgroundTop((float) valueAnimator.getAnimatedValue()));
|
||||
}
|
||||
|
||||
private ImageView getDrawerIconViewForMode(int mode) {
|
||||
@@ -789,14 +810,16 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
mRingerDrawerContainer.setAlpha(0f);
|
||||
mRingerDrawerContainer.setVisibility(VISIBLE);
|
||||
|
||||
final int ringerDrawerAnimationDuration = mState.ringerModeInternal == RINGER_MODE_VIBRATE
|
||||
? DRAWER_ANIMATION_DURATION_SHORT
|
||||
: DRAWER_ANIMATION_DURATION;
|
||||
|
||||
// Animate the drawer up and visible.
|
||||
mRingerDrawerContainer.animate()
|
||||
.setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
|
||||
// Vibrate is way farther up, so give the selected ringer icon a head start if
|
||||
// vibrate is selected.
|
||||
.setDuration(mState.ringerModeInternal == RINGER_MODE_VIBRATE
|
||||
? DRAWER_ANIMATION_DURATION_SHORT
|
||||
: DRAWER_ANIMATION_DURATION)
|
||||
.setDuration(ringerDrawerAnimationDuration)
|
||||
.setStartDelay(mState.ringerModeInternal == RINGER_MODE_VIBRATE
|
||||
? DRAWER_ANIMATION_DURATION - DRAWER_ANIMATION_DURATION_SHORT
|
||||
: 0)
|
||||
@@ -812,6 +835,10 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
.withEndAction(() ->
|
||||
getDrawerIconViewForMode(mState.ringerModeInternal).setVisibility(VISIBLE));
|
||||
|
||||
mAnimateUpBackgroundToMatchDrawer.setDuration(ringerDrawerAnimationDuration);
|
||||
mAnimateUpBackgroundToMatchDrawer.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
|
||||
mAnimateUpBackgroundToMatchDrawer.start();
|
||||
|
||||
if (!isLandscape()) {
|
||||
mSelectedRingerContainer.animate()
|
||||
.translationY(getTranslationInDrawerForRingerMode(mState.ringerModeInternal))
|
||||
@@ -853,6 +880,10 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
.start();
|
||||
}
|
||||
|
||||
mAnimateUpBackgroundToMatchDrawer.setDuration(DRAWER_ANIMATION_DURATION);
|
||||
mAnimateUpBackgroundToMatchDrawer.setInterpolator(Interpolators.FAST_OUT_SLOW_IN_REVERSE);
|
||||
mAnimateUpBackgroundToMatchDrawer.reverse();
|
||||
|
||||
mSelectedRingerContainer.animate()
|
||||
.translationX(0f)
|
||||
.translationY(0f)
|
||||
@@ -1524,7 +1555,7 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
}
|
||||
final ColorStateList colorTint = useActiveColoring
|
||||
? Utils.getColorAccent(mContext)
|
||||
: Utils.getColorAttr(mContext, android.R.attr.colorForeground);
|
||||
: Utils.getColorAttr(mContext, com.android.internal.R.attr.colorAccentSecondary);
|
||||
final int alpha = useActiveColoring
|
||||
? Color.alpha(colorTint.getDefaultColor())
|
||||
: getAlphaAttr(android.R.attr.secondaryContentAlpha);
|
||||
@@ -1532,18 +1563,24 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
final ColorStateList bgTint = Utils.getColorAttr(
|
||||
mContext, android.R.attr.colorBackgroundFloating);
|
||||
|
||||
final ColorStateList inverseTextTint = Utils.getColorAttr(
|
||||
mContext, com.android.internal.R.attr.textColorPrimaryInverse);
|
||||
|
||||
row.sliderProgressSolid.setTintList(colorTint);
|
||||
if (row.sliderBgIcon != null) {
|
||||
row.sliderBgIcon.setTintList(colorTint);
|
||||
}
|
||||
|
||||
row.sliderBgSolid.setTintList(bgTint);
|
||||
if (row.sliderBgSolid != null) {
|
||||
row.sliderBgSolid.setTintList(bgTint);
|
||||
}
|
||||
|
||||
if (row.sliderProgressIcon != null) {
|
||||
row.sliderProgressIcon.setTintList(bgTint);
|
||||
}
|
||||
|
||||
if (row.icon != null) {
|
||||
row.icon.setImageTintList(colorTint);
|
||||
row.icon.setImageTintList(inverseTextTint);
|
||||
row.icon.setImageAlpha(alpha);
|
||||
}
|
||||
|
||||
@@ -1682,6 +1719,28 @@ public class VolumeDialogImpl implements VolumeDialog,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the height of the 1-2 extra ringer options that are made visible when the ringer
|
||||
* drawer is opened.
|
||||
*/
|
||||
private int getRingerDrawerOpenExtraHeight() {
|
||||
return (mRingerCount - 1) * mRingerDrawerItemSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the top of the background drawable behind the container view for the ringer icon and the
|
||||
* volume rows, depending on whether the ringer drawer is open or closed.
|
||||
*/
|
||||
private void setRingerAndRowsBackgroundTop(float drawerClosedAmount) {
|
||||
if (mRingerAndRowsContainerBackground == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Rect bounds = mRingerAndRowsContainerBackground.copyBounds();
|
||||
bounds.top = (int) (drawerClosedAmount * getRingerDrawerOpenExtraHeight());
|
||||
mRingerAndRowsContainerBackground.setBounds(bounds);
|
||||
}
|
||||
|
||||
private final VolumeDialogController.Callbacks mControllerCallbackH
|
||||
= new VolumeDialogController.Callbacks() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user