diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index e268d1b0e8..0457fc4ec4 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -83,7 +83,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; @@ -421,15 +420,18 @@ 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(); - boolean willUserBeActive = - (getActivityFlags() & ACTIVITY_STATE_USER_WILL_BE_ACTIVE) != 0; - boolean visible = (state == NORMAL || state == OVERVIEW) - && (willUserBeActive || isUserActive()) - && !profile.isVerticalBarLayout(); + boolean started = ((getActivityFlags() & ACTIVITY_STATE_STARTED)) != 0; + if (started) { + DeviceProfile profile = getDeviceProfile(); + boolean willUserBeActive = + (getActivityFlags() & ACTIVITY_STATE_USER_WILL_BE_ACTIVE) != 0; + 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); } } diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java index 86b02aa61a..7c09805dbb 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -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;