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

Commit c5cbf0f3 authored by Mateusz Cicheński's avatar Mateusz Cicheński
Browse files

Fix entry bounds for 3 button nav

The fix uses the similar approach to shelf height to ensure that the
keep clear area is being updated as soon as possible for quickstep.

Without this, the entry animation finishes before the actual keep
clear area from the view is registered, which causes the PiP to enter
lower right corner and then move up, which was the regression.

Bug: 260779127
Test: manually
Test: http://recall/-/g8x7ZkgdfbqscttAA9wzl9/72aNHwWH5wihwN4gf3mfj

Change-Id: Ide11a903558d7e6cb9e477abe12b81129a7f7afc
parent 90ff89e2
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -80,7 +80,6 @@ import android.view.Display;
import android.view.HapticFeedbackConstants;
import android.view.RemoteAnimationTarget;
import android.view.View;
import android.view.WindowManagerGlobal;
import android.window.BackEvent;
import android.window.OnBackAnimationCallback;
import android.window.OnBackInvokedDispatcher;
@@ -408,7 +407,6 @@ public class QuickstepLauncher extends Launcher {
     */
    private void onStateOrResumeChanging(boolean inTransition) {
        LauncherState state = getStateManager().getState();
        if (!ENABLE_PIP_KEEP_CLEAR_ALGORITHM) {
        boolean started = ((getActivityFlags() & ACTIVITY_STATE_STARTED)) != 0;
        if (started) {
            DeviceProfile profile = getDeviceProfile();
@@ -417,6 +415,10 @@ public class QuickstepLauncher extends Launcher {
            boolean visible = (state == NORMAL || state == OVERVIEW)
                    && (willUserBeActive || isUserActive())
                    && !profile.isVerticalBarLayout();
            if (ENABLE_PIP_KEEP_CLEAR_ALGORITHM)  {
                SystemUiProxy.INSTANCE.get(this)
                        .setLauncherKeepClearAreaHeight(visible, profile.hotseatBarSizePx);
            } else {
                SystemUiProxy.INSTANCE.get(this).setShelfHeight(visible, profile.hotseatBarSizePx);
            }
        }
+35 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ public class SystemUiProxy implements ISystemUiProxy {
            new MainThreadInitializedObject<>(SystemUiProxy::new);

    private static final int MSG_SET_SHELF_HEIGHT = 1;
    private static final int MSG_SET_LAUNCHER_KEEP_CLEAR_AREA_HEIGHT = 2;

    private ISystemUiProxy mSystemUiProxy;
    private IPip mPip;
@@ -121,6 +122,10 @@ public class SystemUiProxy implements ISystemUiProxy {
    private int mLastShelfHeight;
    private boolean mLastShelfVisible;

    // Used to dedupe calls to SystemUI
    private int mLastLauncherKeepClearAreaHeight;
    private boolean mLastLauncherKeepClearAreaHeightVisible;

    private final Context mContext;
    private final Handler mAsyncHandler;

@@ -453,6 +458,33 @@ public class SystemUiProxy implements ISystemUiProxy {
        }
    }

    /**
     * Sets the height of the keep clear area that is going to be reported by
     * the Launcher for the Hotseat.
     */
    public void setLauncherKeepClearAreaHeight(boolean visible, int height) {
        Message.obtain(mAsyncHandler, MSG_SET_LAUNCHER_KEEP_CLEAR_AREA_HEIGHT,
                visible ? 1 : 0 , height).sendToTarget();
    }

    @WorkerThread
    private void setLauncherKeepClearAreaHeight(int visibleInt, int height) {
        boolean visible = visibleInt != 0;
        boolean changed = visible != mLastLauncherKeepClearAreaHeightVisible
                || height != mLastLauncherKeepClearAreaHeight;
        IPip pip = mPip;
        if (pip != null && changed) {
            mLastLauncherKeepClearAreaHeightVisible = visible;
            mLastLauncherKeepClearAreaHeight = height;
            try {
                pip.setLauncherKeepClearAreaHeight(visible, height);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed call setLauncherKeepClearAreaHeight visible: " + visible
                        + " height: " + height, e);
            }
        }
    }

    /**
     * Sets listener to get pip animation callbacks.
     */
@@ -945,6 +977,9 @@ public class SystemUiProxy implements ISystemUiProxy {
            case MSG_SET_SHELF_HEIGHT:
                setShelfHeightAsync(msg.arg1, msg.arg2);
                return true;
            case MSG_SET_LAUNCHER_KEEP_CLEAR_AREA_HEIGHT:
                setLauncherKeepClearAreaHeight(msg.arg1, msg.arg2);
                return true;
        }

        return false;