From 15a6f672ddf06e67cf946f89000afcab054257c9 Mon Sep 17 00:00:00 2001 From: Nikhil Kumar Date: Thu, 10 Nov 2022 14:26:58 +0000 Subject: [PATCH] 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 --- .../GlobalActionsDialogLite.java | 7 +++-- .../GlobalActionsDialogLiteTest.java | 29 +++++++++++++++++-- .../server/policy/LegacyGlobalActions.java | 6 ++-- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java index db2cd91374e5a..c3e163fbeecc4 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java @@ -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(); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java index d52616bfefcc0..c8a352dd7cd27 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java @@ -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); + + } } diff --git a/services/core/java/com/android/server/policy/LegacyGlobalActions.java b/services/core/java/com/android/server/policy/LegacyGlobalActions.java index 54ece7384f7a3..983b7f463a1c2 100644 --- a/services/core/java/com/android/server/policy/LegacyGlobalActions.java +++ b/services/core/java/com/android/server/policy/LegacyGlobalActions.java @@ -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 items) {