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

Commit 70536b52 authored by Jacqueline Bronger's avatar Jacqueline Bronger
Browse files

TV: handle PiP density changes

- Makes sure dimensions are reloaded
- Repositions PiP and reloads menu after density change
- Changes PiP menu button padding that was squishing the buttons in some
  cases

Bug: 274750784
Test: manual - open PiP, change screen resolution in display settings
> PiP (including border and menu) should stay the same size relative to
the screen.
Test: manual - open PiP, change density via 'adb shell wm density xxx'
where xxx is a density, e.g. 140 or 340 > PiP should stay the same size,
but border, buttons and distance to the edge of the screen should
change with the density.

Change-Id: I46a5bb6db7c9e54c3d674450b41702e51bdd194b
parent 6b135b01
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:padding="@dimen/pip_menu_button_start_end_offset"
            android:clipToPadding="false"
            android:alpha="0"
            android:contentDescription="@string/a11y_pip_menu_entered"/>
+1 −0
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ public class TvPipBoundsState extends PipBoundsState {

    @Override
    public void onConfigurationChanged() {
        super.onConfigurationChanged();
        updateDefaultGravity();
    }

+20 −2
Original line number Diff line number Diff line
@@ -223,10 +223,9 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
        mShellController = shellController;
        mDisplayController = displayController;

        DisplayLayout layout = new DisplayLayout(context, context.getDisplay());

        mTvPipBoundsState = tvPipBoundsState;

        DisplayLayout layout = new DisplayLayout(context, context.getDisplay());
        mPipDisplayLayoutState = pipDisplayLayoutState;
        mPipDisplayLayoutState.setDisplayLayout(layout);
        mPipDisplayLayoutState.setDisplayId(context.getDisplayId());
@@ -291,6 +290,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
        mPipNotificationController.onConfigurationChanged();
        mTvPipBoundsAlgorithm.onConfigurationChanged(mContext);
        mTvPipBoundsState.onConfigurationChanged();
        mPipDisplayLayoutState.onConfigurationChanged();

        int defaultGravityX = mTvPipBoundsState.getDefaultGravity()
                & Gravity.HORIZONTAL_GRAVITY_MASK;
@@ -299,6 +299,24 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
        }
    }

    @Override
    public void onDensityOrFontScaleChanged() {
        ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                "%s: onDensityOrFontScaleChanged()", TAG);
        updatePinnedStackBounds();
        mTvPipMenuController.reloadMenu();
    }

    @Override
    public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) {
        ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                "%s: onDisplayConfigurationChanged(), displayId %d, saved display id %d",
                TAG, displayId, mPipDisplayLayoutState.getDisplayId());
        mPipDisplayLayoutState.setDisplayLayout(
                new DisplayLayout(mContext, mContext.getDisplay()));
        mPipDisplayLayoutState.setDisplayId(mContext.getDisplayId());
    }

    private void reloadResources() {
        final Resources res = mContext.getResources();
        mResizeAnimationDuration = res.getInteger(R.integer.config_pipResizeAnimationDuration);
+27 −5
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
    private TvPipMenuView mPipMenuView;
    private TvPipBackgroundView mPipBackgroundView;

    private boolean mIsReloading;

    @TvPipMenuMode
    private int mCurrentMenuMode = MODE_NO_MENU;
    @TvPipMenuMode
@@ -134,6 +136,18 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
        mTvPipActionsProvider = tvPipActionsProvider;
    }

    void reloadMenu() {
        if (mLeash == null) {
            return;
        }
        mPrevMenuMode = mCurrentMenuMode;
        detachPipMenu();
        mCurrentMenuMode = MODE_NO_MENU;
        attachPipMenu(/* showEduText */ false);
        mPipMenuView.onCloseEduTextAnimationEnd();
        mIsReloading = true;
    }

    @Override
    public void attach(SurfaceControl leash) {
        if (mDelegate == null) {
@@ -141,10 +155,10 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
        }

        mLeash = leash;
        attachPipMenu();
        attachPipMenu(/* showEduText */ true);
    }

    private void attachPipMenu() {
    private void attachPipMenu(boolean showEduText) {
        ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,
                "%s: attachPipMenu()", TAG);

@@ -155,13 +169,17 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
        attachPipBackgroundView();
        attachPipMenuView();

        int pipEduTextHeight = mContext.getResources()
                .getDimensionPixelSize(R.dimen.pip_menu_edu_text_view_height);
        int pipMenuBorderWidth = mContext.getResources()
                .getDimensionPixelSize(R.dimen.pip_menu_border_width);
        mTvPipBoundsState.setPipMenuPermanentDecorInsets(Insets.of(-pipMenuBorderWidth,
                -pipMenuBorderWidth, -pipMenuBorderWidth, -pipMenuBorderWidth));
        if (showEduText) {
            int pipEduTextHeight = mContext.getResources()
                    .getDimensionPixelSize(R.dimen.pip_menu_edu_text_view_height);
            mTvPipBoundsState.setPipMenuTemporaryDecorInsets(Insets.of(0, 0, 0, -pipEduTextHeight));
        } else {
            mTvPipBoundsState.setPipMenuTemporaryDecorInsets(Insets.NONE);
        }
    }

    private void attachPipMenuView() {
@@ -223,6 +241,10 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
        mMainHandler.post(() -> {
            if (mPipMenuView != null) {
                mPipMenuView.onPipTransitionFinished(enterTransition);
                if (mIsReloading) {
                    requestMenuMode(mPrevMenuMode);
                    mIsReloading = false;
                }
            }
        });
    }
+0 −3
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.wm.shell.pip.tv;

import static android.view.Gravity.BOTTOM;
import static android.view.Gravity.CENTER;
import static android.view.View.GONE;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE;
@@ -36,7 +35,6 @@ import android.text.TextUtils;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.TextView;

import androidx.annotation.NonNull;
@@ -267,7 +265,6 @@ class TvPipMenuEduTextDrawer extends FrameLayout {
    }

    public void onCloseEduTextAnimationEnd() {
        setVisibility(GONE);
        mListener.onCloseEduTextAnimationEnd();
    }

Loading