Merge "Add PowerOptionsAction to combine Power and Restart when needed." into rvc-dev

This commit is contained in:
Aran Ink
2020-06-05 16:21:10 +00:00
committed by Android (Google) Code Review
3 changed files with 313 additions and 32 deletions

View File

@@ -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" />

View File

@@ -175,7 +175,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
@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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
private MyAdapter mAdapter;
private MyOverflowAdapter mOverflowAdapter;
private MyPowerOptionsAdapter mPowerAdapter;
private boolean mKeyguardShowing = false;
private boolean mDeviceProvisioned = false;
@@ -584,14 +587,19 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
} 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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
} 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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mAdapter = new MyAdapter();
mOverflowAdapter = new MyOverflowAdapter();
mPowerAdapter = new MyPowerOptionsAdapter();
mDepthController.setShowingHomeControls(true);
GlobalActionsPanelPlugin.PanelViewController walletViewController =
@@ -676,7 +699,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
/**
* 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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
public int getMessageResId() {
return mMessageResId;
}
@@ -1846,6 +1971,8 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mAirplaneState = inAirplaneMode ? ToggleState.On : ToggleState.Off;
mAirplaneModeOn.updateState(mAirplaneState);
mAdapter.notifyDataSetChanged();
mOverflowAdapter.notifyDataSetChanged();
mPowerAdapter.notifyDataSetChanged();
}
};
@@ -1928,6 +2055,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
// 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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
resetOrientation();
dismissWallet();
dismissOverflow(true);
dismissPowerOptions(true);
if (mControlsUiController != null) mControlsUiController.hide();
mNotificationShadeWindowController.setForceHasTopUi(mHadTopUi);
mDepthController.updateGlobalDialogVisibility(0, null /* view */);
@@ -2326,6 +2474,16 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
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 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
// ensure dropdown menus are dismissed before re-initializing the dialog
dismissWallet();
dismissOverflow(true);
dismissPowerOptions(true);
if (mControlsUiController != null) {
mControlsUiController.hide();
}

View File

@@ -19,6 +19,7 @@ package com.android.systemui.globalactions;
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 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
}
@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 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
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 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
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 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
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,
};