Prevent rotation during quickscrub gesture.

Bug: 73486148
Change-Id: Ia435608484e49daf93ff4aa675da11ea4f0fd421
diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
index d09daed..5fd483f 100644
--- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
+++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java
@@ -33,6 +33,7 @@
 import android.annotation.TargetApi;
 import android.app.ActivityManager.RunningTaskInfo;
 import android.content.Context;
+import android.content.pm.ActivityInfo;
 import android.content.res.Resources;
 import android.graphics.Matrix;
 import android.graphics.Point;
@@ -280,6 +281,10 @@
         mWasLauncherAlreadyVisible = alreadyOnHome;
         mLauncher = launcher;
 
+        // For the duration of the gesture, set the screen orientation to BEHIND to ensure that we
+        // do not rotate mid-quickscrub
+        mLauncher.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_BEHIND);
+
         LauncherState startState = mLauncher.getStateManager().getState();
         if (startState.disableRestore) {
             startState = mLauncher.getStateManager().getRestState();
@@ -616,6 +621,9 @@
         mLauncherTransitionController = null;
         mLauncherLayoutListener.setHandler(null);
         mLauncherLayoutListener.close(false);
+
+        // Restore the requested orientation to the user preference after the gesture has ended
+        mLauncher.updateRequestedOrientation();
     }
 
     public void layoutListenerClosed() {
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 7905ed0..0ed5de1 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -371,11 +371,7 @@
         // For handling default keys
         setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
 
-        // On large interfaces, or on devices that a user has specifically enabled screen rotation,
-        // we want the screen to auto-rotate based on the current orientation
-        setRequestedOrientation(mRotationEnabled
-                ? SCREEN_ORIENTATION_UNSPECIFIED : SCREEN_ORIENTATION_NOSENSOR);
-
+        updateRequestedOrientation();
         setContentView(mLauncherView);
         getRootView().dispatchInsets();
 
@@ -398,6 +394,13 @@
         TraceHelper.endSection("Launcher-onCreate");
     }
 
+    public void updateRequestedOrientation() {
+        // On large interfaces, or on devices that a user has specifically enabled screen rotation,
+        // we want the screen to auto-rotate based on the current orientation
+        setRequestedOrientation(mRotationEnabled
+                ? SCREEN_ORIENTATION_UNSPECIFIED : SCREEN_ORIENTATION_NOSENSOR);
+    }
+
     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         int diff = newConfig.diff(mOldConfig);