diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
index 24eae18..18e8768 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
@@ -285,6 +285,9 @@
         }
     };
 
+    private final RecentsOrientedState.SystemRotationChangeListener mSystemRotationChangeListener =
+            enabled -> toggleOrientationEventListener();
+
     private final PinnedStackAnimationListener mIPinnedStackAnimationListener =
             new PinnedStackAnimationListener();
 
@@ -484,6 +487,7 @@
         SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(
                 mIPinnedStackAnimationListener);
         mOrientationState.init();
+        mOrientationState.addSystemRotationChangeListener(mSystemRotationChangeListener);
     }
 
     @Override
@@ -498,6 +502,7 @@
         mIdp.removeOnChangeListener(this);
         SystemUiProxy.INSTANCE.get(getContext()).setPinnedStackAnimationListener(null);
         mIPinnedStackAnimationListener.setActivity(null);
+        mOrientationState.removeSystemRotationChangeListener(mSystemRotationChangeListener);
         mOrientationState.destroy();
     }
 
@@ -554,13 +559,6 @@
     }
 
     public void setOverviewStateEnabled(boolean enabled) {
-        if (canEnableOverviewRotationAnimation()) {
-            if (enabled) {
-                mOrientationListener.enable();
-            } else {
-                mOrientationListener.disable();
-            }
-        }
         mOverviewStateEnabled = enabled;
         updateTaskStackListenerState();
         if (!enabled) {
@@ -568,13 +566,26 @@
             // its thumbnail
             mTmpRunningTask = null;
         }
+        toggleOrientationEventListener();
+    }
+
+    private void toggleOrientationEventListener() {
+        boolean canEnable = canEnableOverviewRotationAnimation() && mOverviewStateEnabled;
+        UI_HELPER_EXECUTOR.execute(() -> {
+            if (canEnable) {
+                mOrientationListener.enable();
+            } else {
+                mOrientationListener.disable();
+            }
+        });
     }
 
     private boolean canEnableOverviewRotationAnimation() {
         return supportsVerticalLandscape() // not 3P launcher
                 && !TestProtocol.sDisableSensorRotation // Ignore hardware dependency for tests..
                 && mOrientationListener.canDetectOrientation() // ..but does the hardware even work?
-                && !mOrientationState.canLauncherAutoRotate(); // launcher is going to rotate itself
+                && (mOrientationState.isSystemRotationAllowed() &&
+                    !mOrientationState.canLauncherRotate()); // launcher is going to rotate itself
     }
 
     public void onDigitalWellbeingToastShown() {
diff --git a/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java b/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
index eefe8ac..bc0d2cc 100644
--- a/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
+++ b/quickstep/src/com/android/quickstep/util/RecentsOrientedState.java
@@ -51,6 +51,8 @@
 import com.android.launcher3.touch.PortraitPagedViewHandler;
 
 import java.lang.annotation.Retention;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Container to hold orientation/rotation related information for Launcher.
@@ -81,6 +83,10 @@
     private @SurfaceRotation int mDisplayRotation = ROTATION_0;
     private @SurfaceRotation int mLauncherRotation = Surface.ROTATION_0;
 
+    public interface SystemRotationChangeListener {
+        void onSystemRotationChanged(boolean enabled);
+    }
+
     /**
      * If {@code true} we default to {@link PortraitPagedViewHandler} and don't support any fake
      * launcher orientations.
@@ -93,6 +99,7 @@
     private final SharedPreferences mSharedPrefs;
     private final boolean mAllowConfigurationDefaultValue;
 
+    private List<SystemRotationChangeListener> mSystemRotationChangeListeners = new ArrayList<>();
 
     private final Matrix mTmpMatrix = new Matrix();
     private final Matrix mTmpInverseMatrix = new Matrix();
@@ -167,14 +174,6 @@
         return true;
     }
 
-    public boolean areMultipleLayoutOrientationsDisabled() {
-        return mDisableMultipleOrientations;
-    }
-
-    public boolean canLauncherAutoRotate() {
-        return mIsHomeRotationAllowed && mIsSystemRotationAllowed;
-    }
-
     /**
      * Setting this preference renders future calls to {@link #update(int, int, int)} as a no-op.
      */
@@ -198,6 +197,10 @@
         } catch (Settings.SettingNotFoundException e) {
             Log.e(TAG, "autorotate setting not found", e);
         }
+
+        for (SystemRotationChangeListener listener : mSystemRotationChangeListeners) {
+            listener.onSystemRotationChanged(mIsSystemRotationAllowed);
+        }
     }
 
     private void updateHomeRotationSetting() {
@@ -205,6 +208,15 @@
                 mAllowConfigurationDefaultValue);
     }
 
+    public void addSystemRotationChangeListener(SystemRotationChangeListener listener) {
+        mSystemRotationChangeListeners.add(listener);
+        listener.onSystemRotationChanged(mIsSystemRotationAllowed);
+    }
+
+    public void removeSystemRotationChangeListener(SystemRotationChangeListener listener) {
+        mSystemRotationChangeListeners.remove(listener);
+    }
+
     public void init() {
         mSharedPrefs.registerOnSharedPreferenceChangeListener(this);
         mContentResolver.registerContentObserver(
@@ -217,6 +229,7 @@
     public void destroy() {
         mSharedPrefs.unregisterOnSharedPreferenceChangeListener(this);
         mContentResolver.unregisterContentObserver(mSystemAutoRotateObserver);
+        mSystemRotationChangeListeners.clear();
     }
 
     @SurfaceRotation
@@ -229,12 +242,25 @@
         return mTouchRotation;
     }
 
+    @SurfaceRotation
+    public int getLauncherRotation() {
+        return mLauncherRotation;
+    }
+
+    public boolean areMultipleLayoutOrientationsDisabled() {
+        return mDisableMultipleOrientations;
+    }
+
+    public boolean isSystemRotationAllowed() {
+        return mIsSystemRotationAllowed;
+    }
+
     public boolean isHomeRotationAllowed() {
         return mIsHomeRotationAllowed;
     }
 
-    public int getLauncherRotation() {
-        return mLauncherRotation;
+    public boolean canLauncherRotate() {
+        return isSystemRotationAllowed() && isHomeRotationAllowed();
     }
 
     public int getTouchRotationDegrees() {
