OSDN Git Service

Merge "Add disable2 flag for rotate suggestions" into pi-dev
authorMike Digman <digman@google.com>
Mon, 19 Mar 2018 17:13:30 +0000 (17:13 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Mon, 19 Mar 2018 17:13:30 +0000 (17:13 +0000)
core/java/android/app/StatusBarManager.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
services/core/java/com/android/server/statusbar/StatusBarManagerService.java

index 85a9be3..b83b44d 100644 (file)
@@ -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 {}
index 91483bc..b493d7a 100644 (file)
@@ -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 -----
index 59fce64..0678d08 100644 (file)
@@ -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);