Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15a6f672 authored by Nikhil Kumar's avatar Nikhil Kumar
Browse files

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
parent 38087fca
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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();
        }
    }

+27 −2
Original line number Diff line number Diff line
@@ -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);

    }
}
+3 −3
Original line number Diff line number Diff line
@@ -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) {