diff options
3 files changed, 40 insertions, 5 deletions
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 85a9be355878..b83b44d295b4 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -74,11 +74,12 @@ public class StatusBarManager { public static final int DISABLE2_SYSTEM_ICONS = 1 << 1; public static final int DISABLE2_NOTIFICATION_SHADE = 1 << 2; public static final int DISABLE2_GLOBAL_ACTIONS = 1 << 3; + public static final int DISABLE2_ROTATE_SUGGESTIONS = 1 << 4; public static final int DISABLE2_NONE = 0x00000000; public static final int DISABLE2_MASK = DISABLE2_QUICK_SETTINGS | DISABLE2_SYSTEM_ICONS - | DISABLE2_NOTIFICATION_SHADE | DISABLE2_GLOBAL_ACTIONS; + | DISABLE2_NOTIFICATION_SHADE | DISABLE2_GLOBAL_ACTIONS | DISABLE2_ROTATE_SUGGESTIONS; @IntDef(flag = true, prefix = { "DISABLE2_" }, value = { DISABLE2_NONE, @@ -86,7 +87,8 @@ public class StatusBarManager { DISABLE2_QUICK_SETTINGS, DISABLE2_SYSTEM_ICONS, DISABLE2_NOTIFICATION_SHADE, - DISABLE2_GLOBAL_ACTIONS + DISABLE2_GLOBAL_ACTIONS, + DISABLE2_ROTATE_SUGGESTIONS }) @Retention(RetentionPolicy.SOURCE) public @interface Disable2Flags {} 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 91483bcd358c..b493d7a0e7ed 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java @@ -114,6 +114,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { private static final boolean DEBUG = false; private static final boolean DEBUG_ROTATION = true; private static final String EXTRA_DISABLE_STATE = "disabled_state"; + private static final String EXTRA_DISABLE2_STATE = "disabled2_state"; private final static int BUTTON_FADE_IN_OUT_DURATION_MS = 100; private final static int NAVBAR_HIDDEN_PENDING_ICON_TIMEOUT_MS = 20000; @@ -137,6 +138,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); private int mDisabledFlags1; + private int mDisabledFlags2; private StatusBar mStatusBar; private Recents mRecents; private Divider mDivider; @@ -212,6 +214,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { if (savedInstanceState != null) { mDisabledFlags1 = savedInstanceState.getInt(EXTRA_DISABLE_STATE, 0); + mDisabledFlags2 = savedInstanceState.getInt(EXTRA_DISABLE2_STATE, 0); } mAssistManager = Dependency.get(AssistManager.class); mOverviewProxyService = Dependency.get(OverviewProxyService.class); @@ -277,6 +280,8 @@ public class NavigationBarFragment extends Fragment implements Callbacks { prepareNavigationBarView(); checkNavBarModes(); + setDisabled2Flags(mDisabledFlags2); + IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); getContext().registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null); @@ -296,6 +301,7 @@ public class NavigationBarFragment extends Fragment implements Callbacks { public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(EXTRA_DISABLE_STATE, mDisabledFlags1); + outState.putInt(EXTRA_DISABLE2_STATE, mDisabledFlags2); if (mNavigationBarView != null) { mNavigationBarView.getLightTransitionsController().saveState(outState); } @@ -398,15 +404,20 @@ public class NavigationBarFragment extends Fragment implements Callbacks { @Override public void onRotationProposal(final int rotation, boolean isValid) { final int winRotation = mWindowManager.getDefaultDisplay().getRotation(); + final boolean rotateSuggestionsDisabled = hasDisable2RotateSuggestionFlag(mDisabledFlags2); if (DEBUG_ROTATION) { Log.v(TAG, "onRotationProposal proposedRotation=" + Surface.rotationToString(rotation) + ", winRotation=" + Surface.rotationToString(winRotation) + ", isValid=" + isValid + ", mNavBarWindowState=" + StatusBarManager.windowStateToString(mNavigationBarWindowState) + + ", rotateSuggestionsDisabled=" + rotateSuggestionsDisabled + ", isRotateButtonVisible=" + (mNavigationBarView == null ? "null" : mNavigationBarView.isRotateButtonVisible())); } + // Respect the disabled flag, no need for action as flag change callback will handle hiding + if (rotateSuggestionsDisabled) return; + // This method will be called on rotation suggestion changes even if the proposed rotation // is not valid for the top app. Use invalid rotation choices as a signal to remove the // rotate button if shown. @@ -450,6 +461,12 @@ public class NavigationBarFragment extends Fragment implements Callbacks { } } + private void onRotationSuggestionsDisabled() { + // Immediately hide the rotate button and clear any planned removal + setRotateSuggestionButtonState(false, true); + getView().removeCallbacks(mRemoveRotationProposal); + } + private void showAndLogRotationSuggestion() { setRotateSuggestionButtonState(true); rescheduleRotationTimeout(false); @@ -643,8 +660,8 @@ public class NavigationBarFragment extends Fragment implements Callbacks { @Override public void disable(int state1, int state2, boolean animate) { - // All navigation bar flags are in state1. - int masked = state1 & (StatusBarManager.DISABLE_HOME + // Navigation bar flags are in both state1 and state2. + final int masked = state1 & (StatusBarManager.DISABLE_HOME | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_BACK | StatusBarManager.DISABLE_SEARCH); @@ -653,6 +670,22 @@ public class NavigationBarFragment extends Fragment implements Callbacks { if (mNavigationBarView != null) mNavigationBarView.setDisabledFlags(state1); updateScreenPinningGestures(); } + + final int masked2 = state2 & (StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS); + if (masked2 != mDisabledFlags2) { + mDisabledFlags2 = masked2; + setDisabled2Flags(masked2); + } + } + + private void setDisabled2Flags(int state2) { + // Method only called on change of disable2 flags + final boolean rotateSuggestionsDisabled = hasDisable2RotateSuggestionFlag(state2); + if (rotateSuggestionsDisabled) onRotationSuggestionsDisabled(); + } + + private boolean hasDisable2RotateSuggestionFlag(int disable2Flags) { + return (disable2Flags & StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS) != 0; } // ----- Internal stuffz ----- diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 59fce64b2f2c..0678d0805b82 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -629,7 +629,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub { */ @Override public void disable2ForUser(int what, IBinder token, String pkg, int userId) { - enforceStatusBarService(); + enforceStatusBar(); synchronized (mLock) { disableLocked(userId, what, token, pkg, 2); |