Loading packages/SystemUI/res/layout/volume_dialog.xml +4 −5 Original line number Diff line number Diff line Loading @@ -15,8 +15,8 @@ --> <com.android.systemui.volume.VolumeUiLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:theme="@style/qs_theme" android:clipChildren="false" > Loading @@ -29,7 +29,6 @@ android:minWidth="@dimen/volume_dialog_panel_width" android:background="@android:color/transparent" android:layout_margin="@dimen/volume_dialog_base_margin" android:translationZ="8dp" android:orientation="vertical" android:clipChildren="false" > Loading @@ -42,7 +41,7 @@ android:paddingTop="10dp" android:paddingBottom="10dp" android:background="@drawable/rounded_bg_full" android:translationZ="8dp" android:translationZ="@dimen/volume_panel_elevation" android:orientation="horizontal" > <!-- volume rows added and removed here! :-) --> </LinearLayout> Loading @@ -59,7 +58,7 @@ android:background="@drawable/rounded_bg_full" android:gravity="center" android:layout_gravity="end" android:translationZ="8dp" android:translationZ="@dimen/volume_panel_elevation" android:clickable="true" android:orientation="vertical" > Loading packages/SystemUI/res/values/dimens.xml +2 −0 Original line number Diff line number Diff line Loading @@ -704,6 +704,8 @@ <dimen name="volume_expander_margin_end">2dp</dimen> <dimen name="volume_expander_margin_top">6dp</dimen> <dimen name="volume_panel_elevation">8dp</dimen> <!-- Padding between icon and text for managed profile toast --> <dimen name="managed_profile_toast_padding">4dp</dimen> Loading packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +24 −8 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.content.pm.PackageManager; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.drawable.ColorDrawable; import android.media.AudioManager; import android.media.AudioSystem; Loading @@ -54,6 +55,7 @@ import android.util.Log; import android.util.Slog; import android.util.SparseBooleanArray; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.AccessibilityDelegate; Loading Loading @@ -176,7 +178,15 @@ public class VolumeDialogImpl implements VolumeDialog { mWindow.setTitle(VolumeDialogImpl.class.getSimpleName()); mWindow.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); mWindow.setWindowAnimations(com.android.internal.R.style.Animation_Toast); final WindowManager.LayoutParams lp = mWindow.getAttributes(); lp.format = PixelFormat.TRANSLUCENT; lp.setTitle(VolumeDialogImpl.class.getSimpleName()); lp.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL; lp.windowAnimations = -1; mWindow.setAttributes(lp); mWindow.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); mDialog.setCanceledOnTouchOutside(true); mDialog.setContentView(R.layout.volume_dialog); mDialog.setOnShowListener(dialog -> { mDialogView.setTranslationX(mDialogView.getWidth() / 2); Loading @@ -199,8 +209,8 @@ public class VolumeDialogImpl implements VolumeDialog { rescheduleTimeoutH(); return true; }); VolumeUiLayout hardwareLayout = VolumeUiLayout.get(mDialogView); hardwareLayout.setOutsideTouchListener(view -> dismiss(DISMISS_REASON_TOUCH_OUTSIDE)); VolumeUiLayout uiLayout = VolumeUiLayout.get(mDialogView); uiLayout.updateRotation(); mDialogRowsView = mDialog.findViewById(R.id.volume_dialog_rows); mFooter = mDialog.findViewById(R.id.footer); Loading Loading @@ -1014,16 +1024,22 @@ public class VolumeDialogImpl implements VolumeDialog { mHandler.sendEmptyMessage(H.RECHECK_ALL); } @Override public boolean onTouchEvent(MotionEvent event) { if (isShowing()) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { dismissH(Events.DISMISS_REASON_TOUCH_OUTSIDE); return true; } } return false; } @Override public boolean dispatchPopulateAccessibilityEvent(@NonNull AccessibilityEvent event) { event.setClassName(getClass().getSuperclass().getName()); event.setPackageName(mContext.getPackageName()); ViewGroup.LayoutParams params = getWindow().getAttributes(); boolean isFullScreen = (params.width == ViewGroup.LayoutParams.MATCH_PARENT) && (params.height == ViewGroup.LayoutParams.MATCH_PARENT); event.setFullScreen(isFullScreen); if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { if (mShowing) { event.getText().add(mContext.getString( Loading packages/SystemUI/src/com/android/systemui/volume/VolumeUiLayout.java +6 −56 Original line number Diff line number Diff line Loading @@ -37,10 +37,6 @@ import com.android.systemui.util.leak.RotationUtils; public class VolumeUiLayout extends FrameLayout { private View mChild; private int mOldHeight; private boolean mAnimating; private AnimatorSet mAnimation; private boolean mHasOutsideTouch; private int mRotation = ROTATION_NONE; @Nullable private DisplayCutout mDisplayCutout; Loading @@ -52,13 +48,11 @@ public class VolumeUiLayout extends FrameLayout { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsListener); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getViewTreeObserver().removeOnComputeInternalInsetsListener(mInsetsListener); mDisplayCutout = null; } Loading @@ -68,16 +62,11 @@ public class VolumeUiLayout extends FrameLayout { if (mChild == null) { if (getChildCount() != 0) { mChild = getChildAt(0); mOldHeight = mChild.getMeasuredHeight(); updateRotation(); } else { return; } } int newHeight = mChild.getMeasuredHeight(); if (newHeight != mOldHeight) { animateChild(mOldHeight, newHeight); } } @Override Loading @@ -95,8 +84,13 @@ public class VolumeUiLayout extends FrameLayout { } } private void updateRotation() { public void updateRotation() { setDisplayCutout(); if (mChild == null) { if (getChildCount() != 0) { mChild = getChildAt(0); } } int rotation = RotationUtils.getRotation(getContext()); if (rotation != mRotation) { updateSafeInsets(rotation); Loading Loading @@ -144,43 +138,11 @@ public class VolumeUiLayout extends FrameLayout { return r.bottom - r.top; } private void animateChild(int oldHeight, int newHeight) { if (true) return; if (mAnimating) { mAnimation.cancel(); } mAnimating = true; mAnimation = new AnimatorSet(); mAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mAnimating = false; } }); int fromTop = mChild.getTop(); int fromBottom = mChild.getBottom(); int toTop = fromTop - ((newHeight - oldHeight) / 2); int toBottom = fromBottom + ((newHeight - oldHeight) / 2); ObjectAnimator top = ObjectAnimator.ofInt(mChild, "top", fromTop, toTop); mAnimation.playTogether(top, ObjectAnimator.ofInt(mChild, "bottom", fromBottom, toBottom)); } @Override public ViewOutlineProvider getOutlineProvider() { return super.getOutlineProvider(); } public void setOutsideTouchListener(OnClickListener onClickListener) { mHasOutsideTouch = true; requestLayout(); setOnClickListener(onClickListener); setClickable(true); setFocusable(true); } public static VolumeUiLayout get(View v) { if (v instanceof VolumeUiLayout) return (VolumeUiLayout) v; if (v.getParent() instanceof View) { Loading @@ -188,16 +150,4 @@ public class VolumeUiLayout extends FrameLayout { } return null; } private final ViewTreeObserver.OnComputeInternalInsetsListener mInsetsListener = inoutInfo -> { if (mHasOutsideTouch || (mChild == null)) { inoutInfo.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME); return; } inoutInfo.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT); inoutInfo.contentInsets.set(mChild.getLeft(), mChild.getTop(), 0, getBottom() - mChild.getBottom()); }; } Loading
packages/SystemUI/res/layout/volume_dialog.xml +4 −5 Original line number Diff line number Diff line Loading @@ -15,8 +15,8 @@ --> <com.android.systemui.volume.VolumeUiLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:theme="@style/qs_theme" android:clipChildren="false" > Loading @@ -29,7 +29,6 @@ android:minWidth="@dimen/volume_dialog_panel_width" android:background="@android:color/transparent" android:layout_margin="@dimen/volume_dialog_base_margin" android:translationZ="8dp" android:orientation="vertical" android:clipChildren="false" > Loading @@ -42,7 +41,7 @@ android:paddingTop="10dp" android:paddingBottom="10dp" android:background="@drawable/rounded_bg_full" android:translationZ="8dp" android:translationZ="@dimen/volume_panel_elevation" android:orientation="horizontal" > <!-- volume rows added and removed here! :-) --> </LinearLayout> Loading @@ -59,7 +58,7 @@ android:background="@drawable/rounded_bg_full" android:gravity="center" android:layout_gravity="end" android:translationZ="8dp" android:translationZ="@dimen/volume_panel_elevation" android:clickable="true" android:orientation="vertical" > Loading
packages/SystemUI/res/values/dimens.xml +2 −0 Original line number Diff line number Diff line Loading @@ -704,6 +704,8 @@ <dimen name="volume_expander_margin_end">2dp</dimen> <dimen name="volume_expander_margin_top">6dp</dimen> <dimen name="volume_panel_elevation">8dp</dimen> <!-- Padding between icon and text for managed profile toast --> <dimen name="managed_profile_toast_padding">4dp</dimen> Loading
packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +24 −8 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import android.content.pm.PackageManager; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.drawable.ColorDrawable; import android.media.AudioManager; import android.media.AudioSystem; Loading @@ -54,6 +55,7 @@ import android.util.Log; import android.util.Slog; import android.util.SparseBooleanArray; import android.view.ContextThemeWrapper; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.AccessibilityDelegate; Loading Loading @@ -176,7 +178,15 @@ public class VolumeDialogImpl implements VolumeDialog { mWindow.setTitle(VolumeDialogImpl.class.getSimpleName()); mWindow.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); mWindow.setWindowAnimations(com.android.internal.R.style.Animation_Toast); final WindowManager.LayoutParams lp = mWindow.getAttributes(); lp.format = PixelFormat.TRANSLUCENT; lp.setTitle(VolumeDialogImpl.class.getSimpleName()); lp.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL; lp.windowAnimations = -1; mWindow.setAttributes(lp); mWindow.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); mDialog.setCanceledOnTouchOutside(true); mDialog.setContentView(R.layout.volume_dialog); mDialog.setOnShowListener(dialog -> { mDialogView.setTranslationX(mDialogView.getWidth() / 2); Loading @@ -199,8 +209,8 @@ public class VolumeDialogImpl implements VolumeDialog { rescheduleTimeoutH(); return true; }); VolumeUiLayout hardwareLayout = VolumeUiLayout.get(mDialogView); hardwareLayout.setOutsideTouchListener(view -> dismiss(DISMISS_REASON_TOUCH_OUTSIDE)); VolumeUiLayout uiLayout = VolumeUiLayout.get(mDialogView); uiLayout.updateRotation(); mDialogRowsView = mDialog.findViewById(R.id.volume_dialog_rows); mFooter = mDialog.findViewById(R.id.footer); Loading Loading @@ -1014,16 +1024,22 @@ public class VolumeDialogImpl implements VolumeDialog { mHandler.sendEmptyMessage(H.RECHECK_ALL); } @Override public boolean onTouchEvent(MotionEvent event) { if (isShowing()) { if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { dismissH(Events.DISMISS_REASON_TOUCH_OUTSIDE); return true; } } return false; } @Override public boolean dispatchPopulateAccessibilityEvent(@NonNull AccessibilityEvent event) { event.setClassName(getClass().getSuperclass().getName()); event.setPackageName(mContext.getPackageName()); ViewGroup.LayoutParams params = getWindow().getAttributes(); boolean isFullScreen = (params.width == ViewGroup.LayoutParams.MATCH_PARENT) && (params.height == ViewGroup.LayoutParams.MATCH_PARENT); event.setFullScreen(isFullScreen); if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { if (mShowing) { event.getText().add(mContext.getString( Loading
packages/SystemUI/src/com/android/systemui/volume/VolumeUiLayout.java +6 −56 Original line number Diff line number Diff line Loading @@ -37,10 +37,6 @@ import com.android.systemui.util.leak.RotationUtils; public class VolumeUiLayout extends FrameLayout { private View mChild; private int mOldHeight; private boolean mAnimating; private AnimatorSet mAnimation; private boolean mHasOutsideTouch; private int mRotation = ROTATION_NONE; @Nullable private DisplayCutout mDisplayCutout; Loading @@ -52,13 +48,11 @@ public class VolumeUiLayout extends FrameLayout { @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsListener); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getViewTreeObserver().removeOnComputeInternalInsetsListener(mInsetsListener); mDisplayCutout = null; } Loading @@ -68,16 +62,11 @@ public class VolumeUiLayout extends FrameLayout { if (mChild == null) { if (getChildCount() != 0) { mChild = getChildAt(0); mOldHeight = mChild.getMeasuredHeight(); updateRotation(); } else { return; } } int newHeight = mChild.getMeasuredHeight(); if (newHeight != mOldHeight) { animateChild(mOldHeight, newHeight); } } @Override Loading @@ -95,8 +84,13 @@ public class VolumeUiLayout extends FrameLayout { } } private void updateRotation() { public void updateRotation() { setDisplayCutout(); if (mChild == null) { if (getChildCount() != 0) { mChild = getChildAt(0); } } int rotation = RotationUtils.getRotation(getContext()); if (rotation != mRotation) { updateSafeInsets(rotation); Loading Loading @@ -144,43 +138,11 @@ public class VolumeUiLayout extends FrameLayout { return r.bottom - r.top; } private void animateChild(int oldHeight, int newHeight) { if (true) return; if (mAnimating) { mAnimation.cancel(); } mAnimating = true; mAnimation = new AnimatorSet(); mAnimation.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mAnimating = false; } }); int fromTop = mChild.getTop(); int fromBottom = mChild.getBottom(); int toTop = fromTop - ((newHeight - oldHeight) / 2); int toBottom = fromBottom + ((newHeight - oldHeight) / 2); ObjectAnimator top = ObjectAnimator.ofInt(mChild, "top", fromTop, toTop); mAnimation.playTogether(top, ObjectAnimator.ofInt(mChild, "bottom", fromBottom, toBottom)); } @Override public ViewOutlineProvider getOutlineProvider() { return super.getOutlineProvider(); } public void setOutsideTouchListener(OnClickListener onClickListener) { mHasOutsideTouch = true; requestLayout(); setOnClickListener(onClickListener); setClickable(true); setFocusable(true); } public static VolumeUiLayout get(View v) { if (v instanceof VolumeUiLayout) return (VolumeUiLayout) v; if (v.getParent() instanceof View) { Loading @@ -188,16 +150,4 @@ public class VolumeUiLayout extends FrameLayout { } return null; } private final ViewTreeObserver.OnComputeInternalInsetsListener mInsetsListener = inoutInfo -> { if (mHasOutsideTouch || (mChild == null)) { inoutInfo.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME); return; } inoutInfo.setTouchableInsets( ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT); inoutInfo.contentInsets.set(mChild.getLeft(), mChild.getTop(), 0, getBottom() - mChild.getBottom()); }; }