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

Commit c7b8957b authored by Tony Wickham's avatar Tony Wickham
Browse files

Report contentInsets only based on what they will be inside apps

This avoids changing them when going from an app to launcher (most obvious when going to overview).

This also allows us to not change insets on apps when opening/closing IME, which reduces potential jumpiness.

Finally, also use this logic for 3P launchers by calling directly from TaskbarDragLayerController instead of TaskbarUIController (which was only overridden by LauncherTaskbarUIController). This fixes some bad issues like sending fullscreen insets when opening a folder from taskbar.

Test: Open Calculator, unstash taskbar, go to overview and ensure no jump as taskbar stashes.
Fixes: 200805319
Change-Id: I4f1cc187398d0051863ff44ea90b7ab9c6aaa8f9
parent b5a051ca
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static com.android.systemui.shared.system.WindowManagerWrapper.ITYPE_EXTR

import android.animation.Animator;
import android.annotation.ColorInt;
import android.graphics.Rect;
import android.os.RemoteException;
import android.util.Log;
import android.view.MotionEvent;
@@ -114,13 +113,6 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
        return !mTaskbarLauncherStateController.isAnimatingToLauncher();
    }

    @Override
    protected void updateContentInsets(Rect outContentInsets) {
        int contentHeight = mControllers.taskbarStashController.getContentHeight();
        TaskbarDragLayer dragLayer = mControllers.taskbarActivityContext.getDragLayer();
        outContentInsets.top = dragLayer.getHeight() - contentHeight;
    }

    /**
     * Should be called from onResume() and onPause(), and animates the Taskbar accordingly.
     */
+5 −2
Original line number Diff line number Diff line
@@ -181,10 +181,13 @@ public class TaskbarDragLayerController {
        }

        /**
         * Called to update the {@link InsetsInfo#contentInsets}.
         * Called to update the {@link InsetsInfo#contentInsets}. This is reported to apps but our
         * internal launcher will ignore these insets.
         */
        public void updateContentInsets(Rect outContentInsets) {
            mControllers.uiController.updateContentInsets(outContentInsets);
            int contentHeight = mControllers.taskbarStashController
                    .getContentHeightToReportToApps();
            outContentInsets.top = mTaskbarDragLayer.getHeight() - contentHeight;
        }

        /**
+13 −3
Original line number Diff line number Diff line
@@ -53,10 +53,17 @@ public class TaskbarStashController {
    public static final int FLAG_IN_STASHED_LAUNCHER_STATE = 1 << 6;

    // If we're in an app and any of these flags are enabled, taskbar should be stashed.
    public static final int FLAGS_STASHED_IN_APP = FLAG_STASHED_IN_APP_MANUAL
    private static final int FLAGS_STASHED_IN_APP = FLAG_STASHED_IN_APP_MANUAL
            | FLAG_STASHED_IN_APP_PINNED | FLAG_STASHED_IN_APP_EMPTY | FLAG_STASHED_IN_APP_SETUP
            | FLAG_STASHED_IN_APP_IME;

    // If any of these flags are enabled, inset apps by our stashed height instead of our unstashed
    // height. This way the reported insets are consistent even during transitions out of the app.
    // Currently any flag that causes us to stash in an app is included, except for IME since that
    // covers the underlying app anyway and thus the app shouldn't change insets.
    private static final int FLAGS_REPORT_STASHED_INSETS_TO_APP = FLAGS_STASHED_IN_APP
            & ~FLAG_STASHED_IN_APP_IME;

    /**
     * How long to stash/unstash when manually invoked via long press.
     */
@@ -239,8 +246,11 @@ public class TaskbarStashController {
        return !mIsStashed && (mState & FLAG_IN_APP) != 0;
    }

    public int getContentHeight() {
        if (isStashed()) {
    /**
     * Returns the height that taskbar will inset when inside apps.
     */
    public int getContentHeightToReportToApps() {
        if (hasAnyFlag(FLAGS_REPORT_STASHED_INSETS_TO_APP)) {
            boolean isAnimating = mAnimator != null && mAnimator.isStarted();
            return mControllers.stashedHandleViewController.isStashedHandleVisible() || isAnimating
                    ? mStashedHeight : 0;
+0 −3
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
 */
package com.android.launcher3.taskbar;

import android.graphics.Rect;
import android.view.View;

import androidx.annotation.CallSuper;
@@ -49,8 +48,6 @@ public class TaskbarUIController {
        return true;
    }

    protected void updateContentInsets(Rect outContentInsets) { }

    protected void onStashedInAppChanged() { }

    public Stream<ItemInfoWithIcon> getAppIconsForEdu() {