Skip to content

Commit

Permalink
SystemUI: Redesign Volume Panel the 404 way
Browse files Browse the repository at this point in the history
Co-authored-by: Arian <[email protected]>
Co-authored-by: Akash Srivastava <[email protected]>
Change-Id: I1b64411c7f1b8aa98512ca4a2fba99f6b864cae5
  • Loading branch information
3 people committed Oct 4, 2024
1 parent 39c4a56 commit 8518db3
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 88 deletions.
8 changes: 4 additions & 4 deletions packages/SystemUI/res/drawable/rounded_bg_full.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
android:shape="rectangle">
<solid android:color="?androidprv:attr/colorSurface" />
<corners
android:bottomLeftRadius="?android:attr/dialogCornerRadius"
android:topLeftRadius="?android:attr/dialogCornerRadius"
android:bottomRightRadius="?android:attr/dialogCornerRadius"
android:topRightRadius="?android:attr/dialogCornerRadius"
android:bottomLeftRadius="@dimen/volume_dialog_panel_width_half"
android:topLeftRadius="@dimen/volume_dialog_panel_width_half"
android:bottomRightRadius="@dimen/volume_dialog_panel_width_half"
android:topRightRadius="@dimen/volume_dialog_panel_width_half"
/>
</shape>
10 changes: 7 additions & 3 deletions packages/SystemUI/res/drawable/volume_background_bottom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
<size android:width="@dimen/volume_dialog_panel_width" />
<solid android:color="?androidprv:attr/colorSurface" />
<corners android:bottomLeftRadius="@dimen/volume_dialog_panel_width_half"
android:bottomRightRadius="@dimen/volume_dialog_panel_width_half"/>
</shape>
<corners
android:bottomLeftRadius="@dimen/volume_dialog_panel_width_half"
android:topLeftRadius="@dimen/volume_dialog_panel_width_half"
android:bottomRightRadius="@dimen/volume_dialog_panel_width_half"
android:topRightRadius="@dimen/volume_dialog_panel_width_half"
/>
</shape>
9 changes: 6 additions & 3 deletions packages/SystemUI/res/drawable/volume_background_top.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@
<shape>
<size android:width="@dimen/volume_dialog_panel_width" />
<solid android:color="?androidprv:attr/colorSurface" />
<corners android:topLeftRadius="@dimen/volume_dialog_panel_width_half"
android:topRightRadius="@dimen/volume_dialog_panel_width_half"/>
<corners
android:bottomLeftRadius="@dimen/volume_dialog_panel_width_half"
android:topLeftRadius="@dimen/volume_dialog_panel_width_half"
android:bottomRightRadius="@dimen/volume_dialog_panel_width_half"
android:topRightRadius="@dimen/volume_dialog_panel_width_half" />
</shape>
</item>
</layer-list>
</layer-list>
22 changes: 19 additions & 3 deletions packages/SystemUI/res/layout-land/volume_dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@
android:clipChildren="false"
android:gravity="right">

<include layout="@layout/volume_ringer_drawer" />

<FrameLayout
android:visibility="gone"
android:id="@+id/ringer"
Expand Down Expand Up @@ -86,11 +84,17 @@
android:orientation="horizontal">
<!-- volume rows added and removed here! :-) -->
</LinearLayout>

<View
android:layout_height="1dp"
android:layout_width="1dp" />

<FrameLayout
android:id="@+id/settings_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/volume_background"
android:background="@drawable/volume_background_bottom"
android:paddingTop="@dimen/volume_dialog_ringer_rows_padding"
android:paddingLeft="@dimen/volume_dialog_ringer_rows_padding"
android:paddingRight="@dimen/volume_dialog_ringer_rows_padding">
<com.android.keyguard.AlphaOptimizedImageButton
Expand All @@ -104,11 +108,23 @@
android:tint="?androidprv:attr/colorAccent"
android:soundEffectsEnabled="false" />
</FrameLayout>

<View
android:layout_height="1dp"
android:layout_width="1dp" />

<include layout="@layout/volume_ringer_drawer" />

<View
android:layout_height="1dp"
android:layout_width="1dp" />

<FrameLayout
android:id="@+id/expandable_indicator_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/volume_background_bottom"
android:paddingTop="@dimen/volume_dialog_ringer_rows_padding"
android:paddingLeft="@dimen/volume_dialog_ringer_rows_padding"
android:paddingBottom="@dimen/volume_dialog_ringer_rows_padding"
android:paddingRight="@dimen/volume_dialog_ringer_rows_padding">
Expand Down
26 changes: 21 additions & 5 deletions packages/SystemUI/res/layout/volume_dialog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,6 @@
android:orientation="vertical"
android:gravity="right">

<include layout="@layout/volume_ringer_drawer" />

<FrameLayout
android:visibility="gone"
android:id="@+id/ringer"
Expand All @@ -54,8 +52,8 @@
android:layout_marginBottom="@dimen/volume_dialog_spacer"
android:gravity="right"
android:translationZ="@dimen/volume_dialog_elevation"
android:clipToPadding="false"
android:background="@drawable/rounded_bg_full">
android:background="@drawable/rounded_bg_full"
android:clipToPadding="false">
<com.android.keyguard.AlphaOptimizedImageButton
android:id="@+id/ringer_icon"
style="@style/VolumeButtons"
Expand Down Expand Up @@ -85,11 +83,17 @@
android:orientation="horizontal">
<!-- volume rows added and removed here! :-) -->
</LinearLayout>

<View
android:layout_height="1dp"
android:layout_width="1dp" />

<FrameLayout
android:id="@+id/settings_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/volume_background"
android:background="@drawable/volume_background_bottom"
android:paddingTop="@dimen/volume_dialog_ringer_rows_padding"
android:paddingLeft="@dimen/volume_dialog_ringer_rows_padding"
android:paddingRight="@dimen/volume_dialog_ringer_rows_padding">
<com.android.keyguard.AlphaOptimizedImageButton
Expand All @@ -103,11 +107,23 @@
android:tint="?androidprv:attr/colorAccent"
android:soundEffectsEnabled="false" />
</FrameLayout>

<View
android:layout_height="2dp"
android:layout_width="1dp" />

<include layout="@layout/volume_ringer_drawer" />

<View
android:layout_height="2dp"
android:layout_width="1dp" />

<FrameLayout
android:id="@+id/expandable_indicator_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/volume_background_bottom"
android:paddingTop="@dimen/volume_dialog_ringer_rows_padding"
android:paddingLeft="@dimen/volume_dialog_ringer_rows_padding"
android:paddingBottom="@dimen/volume_dialog_ringer_rows_padding"
android:paddingRight="@dimen/volume_dialog_ringer_rows_padding">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -515,51 +515,40 @@ private void unionViewBoundstoTouchableRegion(final View view) {
view.getLocationInWindow(locInWindow);

float xExtraSize = 0;
float yExtraSize = 0;

// The ringer and rows container has extra height at the top to fit the expanded ringer
// drawer. This area should not be touchable unless the ringer drawer is open.
// In landscape the ringer expands to the left and it has to be ensured that if there
// are multiple rows they are touchable.
// The ringer and rows container have extra height at the left to fit the expanded ringer
// drawer. This area should not be touchable unless the ringer drawer is open or expandable
// rows are not visible.
// The invisible expandable rows reserve space if the panel is not expanded, this space
// needs to be touchable.
if (view == mTopContainer) {
if (!isLandscape()) {
if (!mIsRingerDrawerOpen) {
yExtraSize = getRingerDrawerOpenExtraSize();
if (!mIsRingerDrawerOpen && !mExpanded) {
xExtraSize =
Math.max(getRingerDrawerOpenExtraSize(), getExpandableRowsExtraSize());
} else if (!mIsRingerDrawerOpen) {
if (getRingerDrawerOpenExtraSize() > getVisibleRowsExtraSize()) {
xExtraSize = getRingerDrawerOpenExtraSize() - getVisibleRowsExtraSize();
}
if (!mExpanded) {
xExtraSize = getExpandableRowsExtraSize();
}
} else {
if (!mIsRingerDrawerOpen && !mExpanded) {
xExtraSize =
Math.max(getRingerDrawerOpenExtraSize(), getExpandableRowsExtraSize());
} else if (!mIsRingerDrawerOpen) {
if (getRingerDrawerOpenExtraSize() > getVisibleRowsExtraSize()) {
xExtraSize = getRingerDrawerOpenExtraSize() - getVisibleRowsExtraSize();
}
} else if (!mExpanded) {
if ((getVisibleRowsExtraSize() + getExpandableRowsExtraSize())
> getRingerDrawerOpenExtraSize()) {
xExtraSize = (getVisibleRowsExtraSize() + getExpandableRowsExtraSize())
- getRingerDrawerOpenExtraSize();
}
} else if (!mExpanded) {
if ((getVisibleRowsExtraSize() + getExpandableRowsExtraSize())
> getRingerDrawerOpenExtraSize()) {
xExtraSize = (getVisibleRowsExtraSize() + getExpandableRowsExtraSize())
- getRingerDrawerOpenExtraSize();
}
}
}

if (isWindowGravityLeft()) {
mTouchableRegion.op(
locInWindow[0],
locInWindow[1] + (int) yExtraSize,
locInWindow[1],
locInWindow[0] + view.getWidth() - (int) xExtraSize,
locInWindow[1] + view.getHeight(),
Region.Op.UNION);
} else {
mTouchableRegion.op(
locInWindow[0] + (int) xExtraSize,
locInWindow[1] + (int) yExtraSize,
locInWindow[1],
locInWindow[0] + view.getWidth(),
locInWindow[1] + view.getHeight(),
Region.Op.UNION);
Expand Down Expand Up @@ -732,7 +721,7 @@ public void onViewDetachedFromWindow(View v) {
mRingerAndDrawerContainerBackground = ringerAndDrawerBg.getDrawable(0);

updateBackgroundForDrawerClosedAmount();
setTopContainerBackgroundDrawable();
//setTopContainerBackgroundDrawable();

// Rows need to be updated after mRingerAndDrawerContainerBackground is set
updateRowsH(getActiveRow());
Expand Down Expand Up @@ -1091,7 +1080,7 @@ private void setupRingerDrawer() {
}

((LinearLayout) mRingerDrawerContainer.findViewById(R.id.volume_drawer_options))
.setOrientation(isLandscape() ? LinearLayout.HORIZONTAL : LinearLayout.VERTICAL);
.setOrientation(LinearLayout.HORIZONTAL);

mSelectedRingerContainer.setOnClickListener(view -> {
if (mIsRingerDrawerOpen) {
Expand Down Expand Up @@ -1197,18 +1186,13 @@ private void showRingerDrawer() {
// the currently selected ringer so that it's ready to animate.
mRingerDrawerNewSelectionBg.setAlpha(0f);

if (!isLandscape()) {
mRingerDrawerNewSelectionBg.setTranslationY(
getTranslationInDrawerForRingerMode(mState.ringerModeInternal));
} else {
mRingerDrawerNewSelectionBg.setTranslationX(
getTranslationInDrawerForRingerMode(mState.ringerModeInternal));
}

// Move the drawer so that the top/outmost ringer choice overlaps with the selected ringer
// icon.
if (!isLandscape()) {
mRingerDrawerContainer.setTranslationY(mRingerDrawerItemSize * (mRingerCount - 1));
mRingerDrawerContainer.setTranslationX(mRingerDrawerItemSize);
} else {
mRingerDrawerContainer.setTranslationX(
(isWindowGravityLeft() ? -1 : 1) * mRingerDrawerItemSize * (mRingerCount - 1));
Expand Down Expand Up @@ -1245,15 +1229,9 @@ private void showRingerDrawer() {
mAnimateUpBackgroundToMatchDrawer.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
mAnimateUpBackgroundToMatchDrawer.start();

if (!isLandscape()) {
mSelectedRingerContainer.animate()
.translationY(getTranslationInDrawerForRingerMode(mState.ringerModeInternal))
.start();
} else {
mSelectedRingerContainer.animate()
.translationX(getTranslationInDrawerForRingerMode(mState.ringerModeInternal))
.start();
}

updateSelectedRingerContainerDescription(true);

Expand Down Expand Up @@ -1284,14 +1262,13 @@ private void hideRingerDrawer() {

if (!isLandscape()) {
mRingerDrawerContainer.animate()
.translationY(mRingerDrawerItemSize * 2)
.translationX(mRingerDrawerItemSize)
.start();
} else {
mRingerDrawerContainer.animate()
.translationX((isWindowGravityLeft() ? -1 : 1) * mRingerDrawerItemSize * 2)
.start();
}

}
mAnimateUpBackgroundToMatchDrawer.setDuration(DRAWER_ANIMATION_DURATION);
mAnimateUpBackgroundToMatchDrawer.setInterpolator(Interpolators.FAST_OUT_SLOW_IN_REVERSE);
mAnimateUpBackgroundToMatchDrawer.reverse();
Expand Down Expand Up @@ -1975,7 +1952,6 @@ private void updateRowsH(final VolumeRow activeRow, boolean animate) {
linearLayoutParams.setMarginStart(0);
linearLayoutParams.setMarginEnd(0);
lastVisibleChild.setLayoutParams(linearLayoutParams);
lastVisibleChild.setBackgroundColor(Color.TRANSPARENT);
}

int elevationCount = 0;
Expand All @@ -1986,7 +1962,7 @@ private void updateRowsH(final VolumeRow activeRow, boolean animate) {
// Add a solid background to the outmost row temporary so that other rows animate
// behind it
lastVisibleChild.setBackgroundDrawable(
mContext.getDrawable(R.drawable.volume_background));
mContext.getDrawable(R.drawable.volume_row_rounded_background));
}

int[] lastVisibleChildLocation = new int[2];
Expand Down Expand Up @@ -2060,7 +2036,6 @@ public void onAnimationEnd(Animator animation) {
if (mAnimatingRows == 0) {
// Restore the elevation and background
lastVisibleChild.setElevation(0);
lastVisibleChild.setBackgroundColor(Color.TRANSPARENT);
// Set the active stream to ensure the volume keys change
// the volume of the tinted row. The tint was set before
// already, but setting the active row cancels ongoing
Expand Down Expand Up @@ -2605,9 +2580,7 @@ private void updateBackgroundForDrawerClosedAmount() {
}

final Rect bounds = mRingerAndDrawerContainerBackground.copyBounds();
if (!isLandscape()) {
bounds.top = (int) (mRingerDrawerClosedAmount * getRingerDrawerOpenExtraSize());
} else if (isWindowGravityLeft()) {
if (mVolumePanelOnLeft) {
bounds.right = (int) ((mDialogCornerRadius / 2) + mRingerDrawerItemSize
+ (1f - mRingerDrawerClosedAmount) * getRingerDrawerOpenExtraSize());
} else {
Expand Down Expand Up @@ -2646,11 +2619,6 @@ private void setTopContainerBackgroundDrawable() {
// Inset the top so that the color only renders below the ringer drawer, which has its own
// background. In landscape, reduce the inset slightly since we are using the background to
// fill in the corners of the closed ringer drawer.
background.setLayerInsetTop(0,
!isLandscape()
? mDialogRowsViewContainer.getTop()
: mDialogRowsViewContainer.getTop() - mDialogCornerRadius);

// Set gravity to top and opposite side where additional rows will be added.
background.setLayerGravity(0,
isWindowGravityLeft() ? Gravity.TOP | Gravity.LEFT : Gravity.TOP | Gravity.RIGHT);
Expand Down Expand Up @@ -3038,10 +3006,6 @@ private class RingerDrawerItemClickListener implements View.OnClickListener {

@Override
public void onClick(View view) {
// If the ringer drawer isn't open, don't let anything in it be clicked.
if (!mIsRingerDrawerOpen) {
return;
}

setRingerMode(mClickedRingerMode);

Expand All @@ -3061,27 +3025,16 @@ public void onClick(View view) {
.withEndAction(() -> {
mRingerDrawerNewSelectionBg.setAlpha(0f);

if (!isLandscape()) {
mSelectedRingerContainer.setTranslationY(
getTranslationInDrawerForRingerMode(mClickedRingerMode));
} else {
mSelectedRingerContainer.setTranslationX(
getTranslationInDrawerForRingerMode(mClickedRingerMode));
}

mSelectedRingerContainer.setVisibility(VISIBLE);
hideRingerDrawer();
});

if (!isLandscape()) {
mRingerDrawerNewSelectionBg.animate()
.translationY(getTranslationInDrawerForRingerMode(mClickedRingerMode))
.start();
} else {
mRingerDrawerNewSelectionBg.animate()
.translationX(getTranslationInDrawerForRingerMode(mClickedRingerMode))
.start();
}
}
}
}

0 comments on commit 8518db3

Please sign in to comment.