Maintain fake nav bar position in overview for landscape
NavBar defaults to display when quickswitch ends,
which is always portrait since home is now always
in portrait. We keep the same nav region that the
user used to swipe up to enter recents and reset once
they swipe to home.
Fixes: 156053957
Test: Swipe up from landscape app, then swipe up
from the same nav bar region to go home.
Change-Id: Ia4cf8172850b991aa5e145897622be3b2afa3779
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java
index 343f28a..5194940 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java
@@ -779,12 +779,6 @@
}
}
- if (endTarget == RECENTS || endTarget == HOME) {
- // Since we're now done quickStepping, we want to only listen for touch events
- // for the main orientation's nav bar, instead of multiple
- mDeviceState.enableMultipleRegions(false);
- }
-
if (mDeviceState.isOverviewDisabled() && (endTarget == RECENTS || endTarget == LAST_TASK)) {
return LAST_TASK;
}
@@ -1242,6 +1236,7 @@
}
ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", true);
doLogGesture(HOME);
+ mDeviceState.enableMultipleRegions(false);
}
protected abstract void finishRecentsControllerToHome(Runnable callback);
@@ -1257,6 +1252,7 @@
SystemUiProxy.INSTANCE.get(mContext).onOverviewShown(false, TAG);
doLogGesture(RECENTS);
+ mDeviceState.onSwipeUpToOverview(mActivityInterface);
reset();
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java
index 7d08fac..c9ff884 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java
@@ -140,6 +140,11 @@
}
@Override
+ public void onExitOverview(RecentsAnimationDeviceState deviceState, Runnable exitRunnable) {
+ // no-op, fake landscape not supported for 3P
+ }
+
+ @Override
public int getContainerType() {
RecentsActivity activity = getCreatedActivity();
boolean visible = activity != null && activity.isStarted() && activity.hasWindowFocus();
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java
index dae2f41..13b84e0 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java
@@ -44,6 +44,7 @@
import com.android.launcher3.appprediction.PredictionUiStateManager;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statehandlers.DepthController.ClampedDepthProperty;
+import com.android.launcher3.statemanager.StateManager;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.userevent.nano.LauncherLogProto;
@@ -225,6 +226,27 @@
@Override
+ public void onExitOverview(RecentsAnimationDeviceState deviceState, Runnable exitRunnable) {
+ final StateManager<LauncherState> stateManager = getCreatedActivity().getStateManager();
+ stateManager.addStateListener(
+ new StateManager.StateListener<LauncherState>() {
+ @Override
+ public void onStateTransitionComplete(LauncherState toState) {
+ // Are we going from Recents to Workspace?
+ if (toState == LauncherState.NORMAL) {
+ exitRunnable.run();
+
+ // reset layout on swipe to home
+ RecentsView recentsView = getCreatedActivity().getOverviewPanel();
+ recentsView.setLayoutRotation(deviceState.getCurrentActiveRotation(),
+ deviceState.getDisplayRotation());
+ stateManager.removeStateListener(this);
+ }
+ }
+ });
+ }
+
+ @Override
public Rect getOverviewWindowBounds(Rect homeBounds, RemoteAnimationTargetCompat target) {
return homeBounds;
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
index a0bb631..ef3d174 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
@@ -554,7 +554,6 @@
|| previousGestureState.isRecentsAnimationRunning()
? newBaseConsumer(previousGestureState, newGestureState, event)
: mResetGestureInputConsumer;
- // TODO(b/149880412): 2 button landscape mode is wrecked. Fixit!
if (mDeviceState.isGesturalNavMode()) {
handleOrientationSetup(base);
}
diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
index 022977b..9124925 100644
--- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java
+++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java
@@ -150,6 +150,9 @@
return deviceState.isInDeferredGestureRegion(ev);
}
+ public abstract void onExitOverview(RecentsAnimationDeviceState deviceState,
+ Runnable exitRunnable);
+
/**
* Updates the prediction state to the overview state.
*/
diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
index a892ddc..1da7ccf 100644
--- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
+++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java
@@ -45,7 +45,6 @@
import android.os.Process;
import android.os.UserManager;
import android.text.TextUtils;
-import android.util.Log;
import android.view.MotionEvent;
import androidx.annotation.BinderThread;
@@ -107,7 +106,7 @@
if (frozen) {
return;
}
- mOrientationTouchTransformer.enableMultipleRegions(false, mDefaultDisplay.getInfo());
+ enableMultipleRegions(false);
}
};
@@ -118,6 +117,13 @@
private final List<ComponentName> mGestureBlockedActivities;
private Runnable mOnDestroyFrozenTaskRunnable;
+ /**
+ * Set to true when user swipes to recents. In recents, we ignore the state of the recents
+ * task list being frozen or not to allow the user to keep interacting with nav bar rotation
+ * they went into recents with as opposed to defaulting to the default display rotation.
+ * TODO: (b/156984037) For when user rotates after entering overview
+ */
+ private boolean mInOverview;
public RecentsAnimationDeviceState(Context context) {
mContext = context;
@@ -508,7 +514,18 @@
mOrientationTouchTransformer.transform(event);
}
+ void onSwipeUpToOverview(BaseActivityInterface activityInterface) {
+ mInOverview = true;
+ activityInterface.onExitOverview(this, () -> {
+ mInOverview = false;
+ enableMultipleRegions(false);
+ });
+ }
+
void enableMultipleRegions(boolean enable) {
+ if (mInOverview) {
+ return;
+ }
mOrientationTouchTransformer.enableMultipleRegions(enable, mDefaultDisplay.getInfo());
UI_HELPER_EXECUTOR.execute(() -> {
int quickStepStartingRotation =