Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit effa40ca authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "The volume dialog window size should match content"

parents 7cc9c01d 30dd125a
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -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" >
@@ -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" >

@@ -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>
@@ -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" >

+2 −0
Original line number Diff line number Diff line
@@ -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>

+24 −8
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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);
@@ -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);
@@ -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(
+6 −56
Original line number Diff line number Diff line
@@ -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;
@@ -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;
    }

@@ -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
@@ -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);
@@ -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) {
@@ -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());
    };
}