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

Commit cce00a0b authored by Galia Peycheva's avatar Galia Peycheva
Browse files

Fix tv pip menu rounded corner artifacts

While the tv pip menu edu text is showing, we draw a "pip border"
around the pip content to draw rounded corners on top of the
non-rounded corners of the pip surface.

Separately, we draw a "pip frame" around the whole pip menu, including
the edu text, which turns white when the pip menu is focused.

The pip frame and the pip border have the same width and rounded corners
values. When the edu text closes, the pip border and the pip frame
overlap exactly and theoretically, the pip border should not be visible
behind the pip frame. However, when the pip frame is highlighted, the
pip border is slightly visible at the rounded corners.

To mitigate this, in this CL we change the visibility of the pip border
to GONE when the edu text animation ends. At that point the pip border
and the pip frame overlap exactly, so there is no need for the pip
border anymore.

Bug: 275693800
Test: manual

Change-Id: If3cceb8e01253ae2fb1ffd37dd2287927ad4ac58
parent aff4a412
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@

    <!-- Temporarily extending the background to show an edu text hint for opening the menu -->
    <FrameLayout
        android:id="@+id/tv_pip_menu_edu_text_drawer_placeholder"
        android:id="@+id/tv_pip_menu_edu_text_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/tv_pip"
+4 −6
Original line number Diff line number Diff line
@@ -260,11 +260,12 @@ class TvPipMenuEduTextDrawer extends FrameLayout {
        });
        heightAnimator.start();

        mListener.onCloseEduText();
        mListener.onCloseEduTextAnimationStart();
    }

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

    /**
@@ -295,11 +296,8 @@ class TvPipMenuEduTextDrawer extends FrameLayout {
     * A listener for edu text drawer event states.
     */
    interface Listener {
        /**
         *  The edu text closing impacts the size of the Picture-in-Picture window and influences
         *  how it is positioned on the screen.
         */
        void onCloseEduText();
        void onCloseEduTextAnimationStart();
        void onCloseEduTextAnimationEnd();
    }

}
+31 −10
Original line number Diff line number Diff line
@@ -57,7 +57,8 @@ import java.util.List;
 * A View that represents Pip Menu on TV. It's responsible for displaying the Pip menu actions from
 * the TvPipActionsProvider as well as the buttons for manually moving the PiP.
 */
public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.Listener {
public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.Listener,
        TvPipMenuEduTextDrawer.Listener {
    private static final String TAG = "TvPipMenuView";

    private final TvPipMenuView.Listener mListener;
@@ -76,6 +77,7 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
    private final View mDimLayer;

    private final TvPipMenuEduTextDrawer mEduTextDrawer;
    private final ViewGroup mEduTextContainer;

    private final int mPipMenuOuterSpace;
    private final int mPipMenuBorderWidth;
@@ -139,9 +141,9 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
        mPipMenuBorderWidth = context.getResources()
                .getDimensionPixelSize(R.dimen.pip_menu_border_width);

        mEduTextDrawer = new TvPipMenuEduTextDrawer(mContext, mainHandler, mListener);
        ((FrameLayout) findViewById(R.id.tv_pip_menu_edu_text_drawer_placeholder))
                .addView(mEduTextDrawer);
        mEduTextDrawer = new TvPipMenuEduTextDrawer(mContext, mainHandler, this);
        mEduTextContainer = (ViewGroup) findViewById(R.id.tv_pip_menu_edu_text_container);
        mEduTextContainer.addView(mEduTextDrawer);
    }

    void onPipTransitionToTargetBoundsStarted(Rect targetBounds) {
@@ -235,12 +237,14 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
     * pip menu when it gains focus.
     */
    private void updatePipFrameBounds() {
        if (mPipFrameView.getVisibility() == VISIBLE) {
            final ViewGroup.LayoutParams pipFrameParams = mPipFrameView.getLayoutParams();
            if (pipFrameParams != null) {
                pipFrameParams.width = mCurrentPipBounds.width() + 2 * mPipMenuBorderWidth;
                pipFrameParams.height = mCurrentPipBounds.height() + 2 * mPipMenuBorderWidth;
                mPipFrameView.setLayoutParams(pipFrameParams);
            }
        }

        final ViewGroup.LayoutParams pipViewParams = mPipView.getLayoutParams();
        if (pipViewParams != null) {
@@ -405,6 +409,17 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
        }
    }

    @Override
    public void onCloseEduTextAnimationStart() {
        mListener.onCloseEduText();
    }

    @Override
    public void onCloseEduTextAnimationEnd() {
        mPipFrameView.setVisibility(GONE);
        mEduTextContainer.setVisibility(GONE);
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == ACTION_UP) {
@@ -551,7 +566,7 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
        }
    }

    interface Listener extends TvPipMenuEduTextDrawer.Listener {
    interface Listener {

        void onBackPress();

@@ -573,5 +588,11 @@ public class TvPipMenuView extends FrameLayout implements TvPipActionsProvider.L
         * has lost focus.
         */
        void onPipWindowFocusChanged(boolean focused);

        /**
         *  The edu text closing impacts the size of the Picture-in-Picture window and influences
         *  how it is positioned on the screen.
         */
        void onCloseEduText();
    }
}