Merge "Add disable2 flag for rotate suggestions" into pi-dev

This commit is contained in:
Mike Digman
2018-03-19 17:13:30 +00:00
committed by Android (Google) Code Review
3 changed files with 40 additions and 5 deletions

View 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 {}

View 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 -----

View 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);