From c7b8957bbb80f3132d304b4af4affa9b27770741 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Fri, 10 Dec 2021 22:02:37 +0000 Subject: [PATCH] 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 --- .../taskbar/LauncherTaskbarUIController.java | 8 -------- .../taskbar/TaskbarDragLayerController.java | 7 +++++-- .../taskbar/TaskbarStashController.java | 16 +++++++++++++--- .../launcher3/taskbar/TaskbarUIController.java | 3 --- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java index 2622700871..5e8db69f2b 100644 --- a/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/LauncherTaskbarUIController.java @@ -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. */ diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java index 806b39093f..a918016cc6 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java @@ -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; } /** diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java index a3ad83504c..5c31e05996 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java @@ -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; diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java index f6bc785a14..abad9060ab 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarUIController.java @@ -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 getAppIconsForEdu() {