Allow admin users to have bugreport icon in the power menu
Existing implementation only allows primary user to have bugreport icon in power menu (options displayed on device power off shortcut) With headless implementation primary/system (user 0) user will not be visible and there will be secondary admin users which are allowed to take bugreports. Refactor the implementation to allow admin users to have bug report icon in the power menu. Test: manually checked icon is visible on power menu for admin user Bug: 258647848 Change-Id: I60a5e1aec3cd463bc085ec899e00564fe11a8371
This commit is contained in:
@@ -733,7 +733,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
@VisibleForTesting
|
||||
boolean shouldDisplayBugReport(UserInfo currentUser) {
|
||||
return mGlobalSettings.getInt(Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0
|
||||
&& (currentUser == null || currentUser.isPrimary());
|
||||
&& (currentUser == null || currentUser.isAdmin());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1058,8 +1058,9 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
|
||||
|
||||
@Override
|
||||
public boolean showBeforeProvisioning() {
|
||||
return Build.isDebuggable() && mGlobalSettings.getInt(
|
||||
Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0;
|
||||
return Build.isDebuggable() && mGlobalSettings.getIntForUser(
|
||||
Settings.Global.BUGREPORT_IN_POWER_MENU, 0, getCurrentUser().id) != 0
|
||||
&& getCurrentUser().isAdmin();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,11 +16,12 @@
|
||||
|
||||
package com.android.systemui.globalactions;
|
||||
|
||||
import static android.content.pm.UserInfo.FLAG_ADMIN;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
@@ -32,11 +33,13 @@ import android.app.IActivityManager;
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Handler;
|
||||
import android.os.UserManager;
|
||||
import android.provider.Settings;
|
||||
import android.service.dreams.IDreamManager;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
@@ -552,10 +555,32 @@ public class GlobalActionsDialogLiteTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void testBugreportAction_whenDebugMode_shouldOfferBugreportButtonBeforeProvisioning() {
|
||||
doReturn(1).when(mGlobalSettings).getInt(anyString(), anyInt());
|
||||
UserInfo currentUser = mockCurrentUser(FLAG_ADMIN);
|
||||
|
||||
when(mGlobalActionsDialogLite.getCurrentUser()).thenReturn(currentUser);
|
||||
doReturn(1).when(mGlobalSettings)
|
||||
.getIntForUser(Settings.Global.BUGREPORT_IN_POWER_MENU, 0, currentUser.id);
|
||||
|
||||
GlobalActionsDialogLite.BugReportAction bugReportAction =
|
||||
mGlobalActionsDialogLite.makeBugReportActionForTesting();
|
||||
assertThat(bugReportAction.showBeforeProvisioning()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBugreportAction_whenUserIsNotAdmin_noBugReportActionBeforeProvisioning() {
|
||||
UserInfo currentUser = mockCurrentUser(0);
|
||||
|
||||
when(mGlobalActionsDialogLite.getCurrentUser()).thenReturn(currentUser);
|
||||
doReturn(1).when(mGlobalSettings)
|
||||
.getIntForUser(Settings.Global.BUGREPORT_IN_POWER_MENU, 0, currentUser.id);
|
||||
|
||||
GlobalActionsDialogLite.BugReportAction bugReportAction =
|
||||
mGlobalActionsDialogLite.makeBugReportActionForTesting();
|
||||
assertThat(bugReportAction.showBeforeProvisioning()).isFalse();
|
||||
}
|
||||
|
||||
private UserInfo mockCurrentUser(int flags) {
|
||||
return new UserInfo(10, "A User", flags);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,7 +283,7 @@ class LegacyGlobalActions implements DialogInterface.OnDismissListener, DialogIn
|
||||
mItems.add(mAirplaneModeOn);
|
||||
} else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey)) {
|
||||
if (Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0 && isCurrentUserOwner()) {
|
||||
Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0 && isCurrentUserAdmin()) {
|
||||
mItems.add(new BugReportAction());
|
||||
}
|
||||
} else if (GLOBAL_ACTION_KEY_SILENT.equals(actionKey)) {
|
||||
@@ -535,9 +535,9 @@ class LegacyGlobalActions implements DialogInterface.OnDismissListener, DialogIn
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isCurrentUserOwner() {
|
||||
private boolean isCurrentUserAdmin() {
|
||||
UserInfo currentUser = getCurrentUser();
|
||||
return currentUser == null || currentUser.isPrimary();
|
||||
return currentUser == null || currentUser.isAdmin();
|
||||
}
|
||||
|
||||
private void addUsersToMenu(ArrayList<Action> items) {
|
||||
|
||||
Reference in New Issue
Block a user