From ab65025833344b3b55bd146a86d48cabe254a89d Mon Sep 17 00:00:00 2001 From: Mike Digman Date: Tue, 6 Mar 2018 11:01:41 -0800 Subject: [PATCH] Reset user rotate pref on navbar create System appears in portrait after restart, however rotation watcher callbacks don't fire leaving user rotate pref stale from last boot. Reset in onCreate and replace override logic with policy's natural rotation. Test: manual Change-Id: Ia1f1e5f637708e5c678edbb5cbf9f4125e451103 --- .../com/android/internal/view/RotationPolicy.java | 3 ++- .../statusbar/phone/NavigationBarFragment.java | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/view/RotationPolicy.java b/core/java/com/android/internal/view/RotationPolicy.java index d7b91325c961b..e9472fa0f464f 100644 --- a/core/java/com/android/internal/view/RotationPolicy.java +++ b/core/java/com/android/internal/view/RotationPolicy.java @@ -41,7 +41,8 @@ import com.android.internal.R; public final class RotationPolicy { private static final String TAG = "RotationPolicy"; private static final int CURRENT_ROTATION = -1; - private static final int NATURAL_ROTATION = Surface.ROTATION_0; + + public static final int NATURAL_ROTATION = Surface.ROTATION_0; private RotationPolicy() { } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java index da042d2bb8ce1..49ae7340a8e98 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -19,6 +19,8 @@ import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN; import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; import static android.app.StatusBarManager.windowStateToString; +import static com.android.internal.view.RotationPolicy.NATURAL_ROTATION; + import static com.android.systemui.shared.system.NavigationBarCompat.InteractionType; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; import static com.android.systemui.statusbar.phone.StatusBar.DEBUG_WINDOW_STATE; @@ -219,6 +221,13 @@ public class NavigationBarFragment extends Fragment implements Callbacks { mRotationLockController = Dependency.get(RotationLockController.class); + // Reset user rotation pref to match that of the WindowManager if starting in locked mode + // This will automatically happen when switching from auto-rotate to locked mode + if (mRotationLockController.isRotationLocked()) { + final int winRotation = mWindowManager.getDefaultDisplay().getRotation(); + mRotationLockController.setRotationLockedAtAngle(true, winRotation); + } + // Register the task stack listener mTaskStackListener = new TaskStackListenerImpl(); ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener); @@ -974,9 +983,9 @@ public class NavigationBarFragment extends Fragment implements Callbacks { } private boolean shouldOverrideUserLockPrefs(final int rotation) { - // Only override user prefs when returning to portrait. + // Only override user prefs when returning to the natural rotation (normally portrait). // Don't let apps that force landscape or 180 alter user lock. - return rotation == Surface.ROTATION_0; + return rotation == NATURAL_ROTATION; } };