Add PowerOptionsAction to combine Power and Restart when needed.
Fixes: 152623348
Test: atest GlobalActionsDialogTest
Test: Manual -- With Lockdown enabled, Power + Restart combine into one action, and Lockdown leaves overflow.
Change-Id: Icda81fc3b256c05eb6fd0270d14442887baa7bf5
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index f30d482e..2f5deb0 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1785,6 +1785,7 @@
<java-symbol type="string" name="faceunlock_multiple_failures" />
<java-symbol type="string" name="global_actions" />
<java-symbol type="string" name="global_action_power_off" />
+ <java-symbol type="string" name="global_action_power_options" />
<java-symbol type="string" name="global_action_restart" />
<java-symbol type="string" name="global_actions_airplane_mode_off_status" />
<java-symbol type="string" name="global_actions_airplane_mode_on_status" />
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 7e009b4..5e5ebe9 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -175,7 +175,7 @@
private static final String GLOBAL_ACTION_KEY_SILENT = "silent";
private static final String GLOBAL_ACTION_KEY_USERS = "users";
private static final String GLOBAL_ACTION_KEY_SETTINGS = "settings";
- private static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown";
+ static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown";
private static final String GLOBAL_ACTION_KEY_VOICEASSIST = "voiceassist";
private static final String GLOBAL_ACTION_KEY_ASSIST = "assist";
static final String GLOBAL_ACTION_KEY_RESTART = "restart";
@@ -213,7 +213,9 @@
@VisibleForTesting
protected final ArrayList<Action> mItems = new ArrayList<>();
@VisibleForTesting
- final ArrayList<Action> mOverflowItems = new ArrayList<>();
+ protected final ArrayList<Action> mOverflowItems = new ArrayList<>();
+ @VisibleForTesting
+ protected final ArrayList<Action> mPowerItems = new ArrayList<>();
@VisibleForTesting
protected ActionsDialog mDialog;
@@ -223,6 +225,7 @@
private MyAdapter mAdapter;
private MyOverflowAdapter mOverflowAdapter;
+ private MyPowerOptionsAdapter mPowerAdapter;
private boolean mKeyguardShowing = false;
private boolean mDeviceProvisioned = false;
@@ -584,14 +587,19 @@
mItems.clear();
mOverflowItems.clear();
-
+ mPowerItems.clear();
String[] defaultActions = getDefaultActions();
+
+ ShutDownAction shutdownAction = new ShutDownAction();
+ RestartAction restartAction = new RestartAction();
+ ArraySet<String> addedKeys = new ArraySet<String>();
+
// make sure emergency affordance action is first, if needed
if (mEmergencyAffordanceManager.needsEmergencyAffordance()) {
addActionItem(new EmergencyAffordanceAction());
+ addedKeys.add(GLOBAL_ACTION_KEY_EMERGENCY);
}
- ArraySet<String> addedKeys = new ArraySet<String>();
for (int i = 0; i < defaultActions.length; i++) {
String actionKey = defaultActions[i];
if (addedKeys.contains(actionKey)) {
@@ -599,7 +607,7 @@
continue;
}
if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) {
- addActionItem(new PowerAction());
+ addActionItem(shutdownAction);
} else if (GLOBAL_ACTION_KEY_AIRPLANE.equals(actionKey)) {
addActionItem(mAirplaneModeOn);
} else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey)) {
@@ -618,10 +626,7 @@
} else if (GLOBAL_ACTION_KEY_SETTINGS.equals(actionKey)) {
addActionItem(getSettingsAction());
} else if (GLOBAL_ACTION_KEY_LOCKDOWN.equals(actionKey)) {
- int userId = getCurrentUser().id;
- if (Settings.Secure.getIntForUser(mContentResolver,
- Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0, userId) != 0
- && shouldDisplayLockdown(userId)) {
+ if (shouldDisplayLockdown(getCurrentUser())) {
addActionItem(getLockdownAction());
}
} else if (GLOBAL_ACTION_KEY_VOICEASSIST.equals(actionKey)) {
@@ -629,7 +634,7 @@
} else if (GLOBAL_ACTION_KEY_ASSIST.equals(actionKey)) {
addActionItem(getAssistAction());
} else if (GLOBAL_ACTION_KEY_RESTART.equals(actionKey)) {
- addActionItem(new RestartAction());
+ addActionItem(restartAction);
} else if (GLOBAL_ACTION_KEY_SCREENSHOT.equals(actionKey)) {
addActionItem(new ScreenshotAction());
} else if (GLOBAL_ACTION_KEY_LOGOUT.equals(actionKey)) {
@@ -638,15 +643,32 @@
addActionItem(new LogoutAction());
}
} else if (GLOBAL_ACTION_KEY_EMERGENCY.equals(actionKey)) {
- if (!mEmergencyAffordanceManager.needsEmergencyAffordance()) {
- addActionItem(new EmergencyDialerAction());
- }
+ addActionItem(new EmergencyDialerAction());
} else {
Log.e(TAG, "Invalid global action key " + actionKey);
}
// Add here so we don't add more than one.
addedKeys.add(actionKey);
}
+
+ // replace power and restart with a single power options action, if needed
+ if (mItems.contains(shutdownAction) && mItems.contains(restartAction)
+ && mOverflowItems.size() > 0) {
+ // transfer shutdown and restart to their own list of power actions
+ mItems.remove(shutdownAction);
+ mItems.remove(restartAction);
+ mPowerItems.add(shutdownAction);
+ mPowerItems.add(restartAction);
+
+ // add the PowerOptionsAction after Emergency, if present
+ int powerIndex = addedKeys.contains(GLOBAL_ACTION_KEY_EMERGENCY) ? 1 : 0;
+ mItems.add(powerIndex, new PowerOptionsAction());
+
+ // transfer the first overflow action to the main set of items
+ Action firstOverflowAction = mOverflowItems.get(0);
+ mOverflowItems.remove(0);
+ mItems.add(firstOverflowAction);
+ }
}
private void onRotate() {
@@ -664,6 +686,7 @@
mAdapter = new MyAdapter();
mOverflowAdapter = new MyOverflowAdapter();
+ mPowerAdapter = new MyPowerOptionsAdapter();
mDepthController.setShowingHomeControls(true);
GlobalActionsPanelPlugin.PanelViewController walletViewController =
@@ -676,7 +699,7 @@
walletViewController, mDepthController, mSysuiColorExtractor,
mStatusBarService, mNotificationShadeWindowController,
controlsAvailable(), uiController,
- mSysUiState, this::onRotate, mKeyguardShowing);
+ mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter);
boolean walletViewAvailable = walletViewController != null
&& walletViewController.getPanelContent() != null;
if (shouldShowLockMessage(walletViewAvailable)) {
@@ -689,7 +712,20 @@
return dialog;
}
- private boolean shouldDisplayLockdown(int userId) {
+ @VisibleForTesting
+ protected boolean shouldDisplayLockdown(UserInfo user) {
+ if (user == null) {
+ return false;
+ }
+
+ int userId = user.id;
+
+ // No lockdown option if it's not turned on in Settings
+ if (Settings.Secure.getIntForUser(mContentResolver,
+ Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0, userId) == 0) {
+ return false;
+ }
+
// Lockdown is meaningless without a place to go.
if (!mKeyguardStateController.isMethodSecure()) {
return false;
@@ -740,8 +776,32 @@
mActivityStarter.startPendingIntentDismissingKeyguard(pendingIntent);
}
- private final class PowerAction extends SinglePressAction implements LongPressAction {
- private PowerAction() {
+ @VisibleForTesting
+ protected final class PowerOptionsAction extends SinglePressAction {
+ private PowerOptionsAction() {
+ super(R.drawable.ic_lock_power_off, R.string.global_action_power_options);
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+
+ @Override
+ public void onPress() {
+ if (mDialog != null) {
+ mDialog.showPowerOptionsMenu();
+ }
+ }
+ }
+
+ private final class ShutDownAction extends SinglePressAction implements LongPressAction {
+ private ShutDownAction() {
super(R.drawable.ic_lock_power_off,
R.string.global_action_power_off);
}
@@ -772,7 +832,8 @@
}
}
- private abstract class EmergencyAction extends SinglePressAction {
+ @VisibleForTesting
+ protected abstract class EmergencyAction extends SinglePressAction {
EmergencyAction(int iconResId, int messageResId) {
super(iconResId, messageResId);
}
@@ -1317,7 +1378,10 @@
Action item = mAdapter.getItem(position);
if (!(item instanceof SilentModeTriStateAction)) {
if (mDialog != null) {
- mDialog.dismiss();
+ // don't dismiss the dialog if we're opening the power options menu
+ if (!(item instanceof PowerOptionsAction)) {
+ mDialog.dismiss();
+ }
} else {
Log.w(TAG, "Action clicked while mDialog is null.");
}
@@ -1334,6 +1398,70 @@
/**
* The adapter used for items in the overflow menu.
*/
+ public class MyPowerOptionsAdapter extends BaseAdapter {
+ @Override
+ public int getCount() {
+ return mPowerItems.size();
+ }
+
+ @Override
+ public Action getItem(int position) {
+ return mPowerItems.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ Action action = getItem(position);
+ if (action == null) {
+ Log.w(TAG, "No power options action found at position: " + position);
+ return null;
+ }
+ int viewLayoutResource = com.android.systemui.R.layout.controls_more_item;
+ View view = convertView != null ? convertView
+ : LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false);
+ TextView textView = (TextView) view;
+ if (action.getMessageResId() != 0) {
+ textView.setText(action.getMessageResId());
+ } else {
+ textView.setText(action.getMessage());
+ }
+ return textView;
+ }
+
+ private boolean onLongClickItem(int position) {
+ final Action action = getItem(position);
+ if (action instanceof LongPressAction) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ } else {
+ Log.w(TAG, "Action long-clicked while mDialog is null.");
+ }
+ return ((LongPressAction) action).onLongPress();
+ }
+ return false;
+ }
+
+ private void onClickItem(int position) {
+ Action item = getItem(position);
+ if (!(item instanceof SilentModeTriStateAction)) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ } else {
+ Log.w(TAG, "Action clicked while mDialog is null.");
+ }
+ item.onPress();
+ }
+ }
+ }
+
+ /**
+ * The adapter used for items in the power options menu, triggered by the PowerOptionsAction.
+ */
public class MyOverflowAdapter extends BaseAdapter {
@Override
public int getCount() {
@@ -1373,7 +1501,6 @@
final Action action = getItem(position);
if (action instanceof LongPressAction) {
if (mDialog != null) {
- mDialog.hidePowerOverflowMenu();
mDialog.dismiss();
} else {
Log.w(TAG, "Action long-clicked while mDialog is null.");
@@ -1387,7 +1514,6 @@
Action item = getItem(position);
if (!(item instanceof SilentModeTriStateAction)) {
if (mDialog != null) {
- mDialog.hidePowerOverflowMenu();
mDialog.dismiss();
} else {
Log.w(TAG, "Action clicked while mDialog is null.");
@@ -1495,7 +1621,6 @@
}
}
-
public int getMessageResId() {
return mMessageResId;
}
@@ -1846,6 +1971,8 @@
mAirplaneState = inAirplaneMode ? ToggleState.On : ToggleState.Off;
mAirplaneModeOn.updateState(mAirplaneState);
mAdapter.notifyDataSetChanged();
+ mOverflowAdapter.notifyDataSetChanged();
+ mPowerAdapter.notifyDataSetChanged();
}
};
@@ -1928,6 +2055,7 @@
private final Context mContext;
private final MyAdapter mAdapter;
private final MyOverflowAdapter mOverflowAdapter;
+ private final MyPowerOptionsAdapter mPowerOptionsAdapter;
private final IStatusBarService mStatusBarService;
private final IBinder mToken = new Binder();
private MultiListLayout mGlobalActionsLayout;
@@ -1943,6 +2071,7 @@
private final NotificationShadeDepthController mDepthController;
private final SysUiState mSysUiState;
private ListPopupWindow mOverflowPopup;
+ private ListPopupWindow mPowerOptionsPopup;
private final Runnable mOnRotateCallback;
private final boolean mControlsAvailable;
@@ -1958,11 +2087,13 @@
SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService,
NotificationShadeWindowController notificationShadeWindowController,
boolean controlsAvailable, @Nullable ControlsUiController controlsUiController,
- SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing) {
+ SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing,
+ MyPowerOptionsAdapter powerAdapter) {
super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions);
mContext = context;
mAdapter = adapter;
mOverflowAdapter = overflowAdapter;
+ mPowerOptionsAdapter = powerAdapter;
mDepthController = depthController;
mColorExtractor = sysuiColorExtractor;
mStatusBarService = statusBarService;
@@ -2076,6 +2207,21 @@
}
}
+ private ListPopupWindow createPowerOptionsPopup() {
+ GlobalActionsPopupMenu popup = new GlobalActionsPopupMenu(
+ new ContextThemeWrapper(
+ mContext,
+ com.android.systemui.R.style.Control_ListPopupWindow
+ ), false /* isDropDownMode */);
+ popup.setOnItemClickListener(
+ (parent, view, position, id) -> mPowerOptionsAdapter.onClickItem(position));
+ popup.setOnItemLongClickListener(
+ (parent, view, position, id) -> mPowerOptionsAdapter.onLongClickItem(position));
+ popup.setAnchorView(mGlobalActionsLayout);
+ popup.setAdapter(mPowerOptionsAdapter);
+ return popup;
+ }
+
private ListPopupWindow createPowerOverflowPopup() {
GlobalActionsPopupMenu popup = new GlobalActionsPopupMenu(
new ContextThemeWrapper(
@@ -2093,16 +2239,16 @@
return popup;
}
+ public void showPowerOptionsMenu() {
+ mPowerOptionsPopup = createPowerOptionsPopup();
+ mPowerOptionsPopup.show();
+ }
+
private void showPowerOverflowMenu() {
mOverflowPopup = createPowerOverflowPopup();
mOverflowPopup.show();
}
- private void hidePowerOverflowMenu() {
- mOverflowPopup.dismiss();
- mOverflowPopup = null;
- }
-
private void initializeLayout() {
setContentView(com.android.systemui.R.layout.global_actions_grid_v2);
fixNavBarClipping();
@@ -2278,6 +2424,7 @@
// close first, as popup windows will not fade during the animation
dismissOverflow(false);
+ dismissPowerOptions(false);
if (mControlsUiController != null) mControlsUiController.closeDialogs(false);
});
}
@@ -2302,6 +2449,7 @@
resetOrientation();
dismissWallet();
dismissOverflow(true);
+ dismissPowerOptions(true);
if (mControlsUiController != null) mControlsUiController.hide();
mNotificationShadeWindowController.setForceHasTopUi(mHadTopUi);
mDepthController.updateGlobalDialogVisibility(0, null /* view */);
@@ -2326,6 +2474,16 @@
}
}
+ private void dismissPowerOptions(boolean immediate) {
+ if (mPowerOptionsPopup != null) {
+ if (immediate) {
+ mPowerOptionsPopup.dismissImmediate();
+ } else {
+ mPowerOptionsPopup.dismiss();
+ }
+ }
+ }
+
private void setRotationSuggestionsEnabled(boolean enabled) {
try {
final int userId = Binder.getCallingUserHandle().getIdentifier();
@@ -2369,6 +2527,7 @@
// ensure dropdown menus are dismissed before re-initializing the dialog
dismissWallet();
dismissOverflow(true);
+ dismissPowerOptions(true);
if (mControlsUiController != null) {
mControlsUiController.hide();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
index 3254633..329af2b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
@@ -19,6 +19,7 @@
import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -244,7 +245,7 @@
}
@Test
- public void testCreateActionItems_maxThree() {
+ public void testCreateActionItems_maxThree_noOverflow() {
mGlobalActionsDialog = spy(mGlobalActionsDialog);
// allow 3 items to be shown
doReturn(3).when(mGlobalActionsDialog).getMaxShownPowerItems();
@@ -254,13 +255,129 @@
GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
+ };
+ doReturn(actions).when(mGlobalActionsDialog).getDefaultActions();
+ mGlobalActionsDialog.createActionItems();
+
+ assertEquals(3, mGlobalActionsDialog.mItems.size());
+ assertEquals(0, mGlobalActionsDialog.mOverflowItems.size());
+ assertEquals(0, mGlobalActionsDialog.mPowerItems.size());
+ }
+
+ @Test
+ public void testCreateActionItems_maxThree_condensePower() {
+ mGlobalActionsDialog = spy(mGlobalActionsDialog);
+ // allow 3 items to be shown
+ doReturn(3).when(mGlobalActionsDialog).getMaxShownPowerItems();
+ // ensure items are not blocked by keyguard or device provisioning
+ doReturn(true).when(mGlobalActionsDialog).shouldShowAction(any());
+ // make sure lockdown action will be shown
+ doReturn(true).when(mGlobalActionsDialog).shouldDisplayLockdown(any());
+ String[] actions = {
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
+ };
+ doReturn(actions).when(mGlobalActionsDialog).getDefaultActions();
+ mGlobalActionsDialog.createActionItems();
+
+ assertEquals(3, mGlobalActionsDialog.mItems.size());
+ assertEquals(0, mGlobalActionsDialog.mOverflowItems.size());
+ assertEquals(2, mGlobalActionsDialog.mPowerItems.size());
+
+ // PowerOptionsAction should appear immediately after the Emergency action
+
+ GlobalActionsDialog.Action firstItem = mGlobalActionsDialog.mItems.get(0);
+ GlobalActionsDialog.Action secondItem = mGlobalActionsDialog.mItems.get(1);
+
+ assertTrue(firstItem instanceof GlobalActionsDialog.EmergencyAction);
+ assertTrue(secondItem instanceof GlobalActionsDialog.PowerOptionsAction);
+ }
+
+ @Test
+ public void testCreateActionItems_maxThree_condensePower_noEmergency() {
+ mGlobalActionsDialog = spy(mGlobalActionsDialog);
+ // allow 3 items to be shown
+ doReturn(3).when(mGlobalActionsDialog).getMaxShownPowerItems();
+ // make sure lockdown action will be shown
+ doReturn(true).when(mGlobalActionsDialog).shouldDisplayLockdown(any());
+ // ensure items are not blocked by keyguard or device provisioning
+ doReturn(true).when(mGlobalActionsDialog).shouldShowAction(any());
+ String[] actions = {
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
GlobalActionsDialog.GLOBAL_ACTION_KEY_SCREENSHOT,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
+ };
+ doReturn(actions).when(mGlobalActionsDialog).getDefaultActions();
+ mGlobalActionsDialog.createActionItems();
+
+ assertEquals(3, mGlobalActionsDialog.mItems.size());
+ assertEquals(0, mGlobalActionsDialog.mOverflowItems.size());
+ assertEquals(2, mGlobalActionsDialog.mPowerItems.size());
+
+ // When Emergency isn't used, PowerOptionsAction should be first
+
+ GlobalActionsDialog.Action firstItem = mGlobalActionsDialog.mItems.get(0);
+ GlobalActionsDialog.Action secondItem = mGlobalActionsDialog.mItems.get(1);
+
+ assertTrue(firstItem instanceof GlobalActionsDialog.PowerOptionsAction);
+ assertTrue(secondItem instanceof GlobalActionsDialog.ScreenshotAction);
+ }
+
+ @Test
+ public void testCreateActionItems_maxFour_condensePower() {
+ mGlobalActionsDialog = spy(mGlobalActionsDialog);
+ // allow 3 items to be shown
+ doReturn(4).when(mGlobalActionsDialog).getMaxShownPowerItems();
+ // make sure lockdown action will be shown
+ doReturn(true).when(mGlobalActionsDialog).shouldDisplayLockdown(any());
+ // ensure items are not blocked by keyguard or device provisioning
+ doReturn(true).when(mGlobalActionsDialog).shouldShowAction(any());
+ String[] actions = {
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_SCREENSHOT
+ };
+ doReturn(actions).when(mGlobalActionsDialog).getDefaultActions();
+ mGlobalActionsDialog.createActionItems();
+
+ assertEquals(4, mGlobalActionsDialog.mItems.size());
+ assertEquals(0, mGlobalActionsDialog.mOverflowItems.size());
+ assertEquals(2, mGlobalActionsDialog.mPowerItems.size());
+
+ // with four items, make sure power still shows up immediately after Emergency
+ GlobalActionsDialog.Action firstItem = mGlobalActionsDialog.mItems.get(0);
+ GlobalActionsDialog.Action secondItem = mGlobalActionsDialog.mItems.get(1);
+
+ assertTrue(firstItem instanceof GlobalActionsDialog.EmergencyAction);
+ assertTrue(secondItem instanceof GlobalActionsDialog.PowerOptionsAction);
+ }
+
+ @Test
+ public void testCreateActionItems_maxThree_doNotCondensePower() {
+ mGlobalActionsDialog = spy(mGlobalActionsDialog);
+ // allow 3 items to be shown
+ doReturn(3).when(mGlobalActionsDialog).getMaxShownPowerItems();
+ // make sure lockdown action will be shown
+ doReturn(true).when(mGlobalActionsDialog).shouldDisplayLockdown(any());
+ // ensure items are not blocked by keyguard or device provisioning
+ doReturn(true).when(mGlobalActionsDialog).shouldShowAction(any());
+ String[] actions = {
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_SCREENSHOT,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
};
doReturn(actions).when(mGlobalActionsDialog).getDefaultActions();
mGlobalActionsDialog.createActionItems();
assertEquals(3, mGlobalActionsDialog.mItems.size());
assertEquals(1, mGlobalActionsDialog.mOverflowItems.size());
+ assertEquals(0, mGlobalActionsDialog.mPowerItems.size());
}
@Test
@@ -270,11 +387,13 @@
doReturn(Integer.MAX_VALUE).when(mGlobalActionsDialog).getMaxShownPowerItems();
// ensure items are not blocked by keyguard or device provisioning
doReturn(true).when(mGlobalActionsDialog).shouldShowAction(any());
+ // make sure lockdown action will be shown
+ doReturn(true).when(mGlobalActionsDialog).shouldDisplayLockdown(any());
String[] actions = {
GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
- GlobalActionsDialog.GLOBAL_ACTION_KEY_SCREENSHOT,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
};
doReturn(actions).when(mGlobalActionsDialog).getDefaultActions();
mGlobalActionsDialog.createActionItems();
@@ -288,10 +407,12 @@
mGlobalActionsDialog = spy(mGlobalActionsDialog);
// allow only 3 items to be shown
doReturn(3).when(mGlobalActionsDialog).getMaxShownPowerItems();
+ // make sure lockdown action will NOT be shown
+ doReturn(false).when(mGlobalActionsDialog).shouldDisplayLockdown(any());
String[] actions = {
GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
- // screenshot blocked because device not provisioned
- GlobalActionsDialog.GLOBAL_ACTION_KEY_SCREENSHOT,
+ // lockdown action not allowed
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
};