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

Commit fbc747d8 authored by Matt Pietal's avatar Matt Pietal Committed by Automerger Merge Worker
Browse files

Merge "User switcher - Update when multiple users enabled/disabled" into tm-dev am: 287c0093

parents 56d9f385 287c0093
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -63,7 +63,6 @@ public final class Prefs {
            Key.QS_WORK_ADDED,
            Key.QS_NIGHTDISPLAY_ADDED,
            Key.QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT,
            Key.SEEN_MULTI_USER,
            Key.SEEN_RINGER_GUIDANCE_COUNT,
            Key.QS_HAS_TURNED_OFF_MOBILE_DATA,
            Key.TOUCHED_RINGER_TOGGLE,
@@ -106,7 +105,6 @@ public final class Prefs {
         * Settings panel.
         */
        String QS_LONG_PRESS_TOOLTIP_SHOWN_COUNT = "QsLongPressTooltipShownCount";
        String SEEN_MULTI_USER = "HasSeenMultiUser";
        String SEEN_RINGER_GUIDANCE_COUNT = "RingerGuidanceCount";
        String QS_TILE_SPECS_REVEALED = "QsTileSpecsRevealed";
        String QS_HAS_TURNED_OFF_MOBILE_DATA = "QsHasTurnedOffMobileData";
+22 −11
Original line number Diff line number Diff line
@@ -64,8 +64,6 @@ import com.android.settingslib.users.UserCreatingDialog;
import com.android.settingslib.utils.ThreadUtils;
import com.android.systemui.Dumpable;
import com.android.systemui.GuestResumeSessionReceiver;
import com.android.systemui.Prefs;
import com.android.systemui.Prefs.Key;
import com.android.systemui.R;
import com.android.systemui.SystemUISecondaryUserService;
import com.android.systemui.animation.DialogLaunchAnimator;
@@ -84,6 +82,7 @@ import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.SystemUIDialog;
import com.android.systemui.telephony.TelephonyListenerManager;
import com.android.systemui.user.CreateUserActivity;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;

import java.io.PrintWriter;
@@ -144,6 +143,7 @@ public class UserSwitcherController implements Dumpable {
    // When false, there won't be any visual affordance to add a new user from the keyguard even if
    // the user is unlocked
    private boolean mAddUsersFromLockScreen;
    private boolean mUserSwitcherEnabled;
    @VisibleForTesting
    boolean mPauseRefreshUsers;
    private int mSecondaryUser = UserHandle.USER_NULL;
@@ -160,6 +160,7 @@ public class UserSwitcherController implements Dumpable {
    private FalsingManager mFalsingManager;
    private View mView;
    private String mCreateSupervisedUserPackage;
    private GlobalSettings mGlobalSettings;

    @Inject
    public UserSwitcherController(Context context,
@@ -177,6 +178,7 @@ public class UserSwitcherController implements Dumpable {
            FalsingManager falsingManager,
            TelephonyListenerManager telephonyListenerManager,
            SecureSettings secureSettings,
            GlobalSettings globalSettings,
            @Background Executor bgExecutor,
            @LongRunning Executor longRunningExecutor,
            @Main Executor uiExecutor,
@@ -194,6 +196,7 @@ public class UserSwitcherController implements Dumpable {
        mFalsingManager = falsingManager;
        mInteractionJankMonitor = interactionJankMonitor;
        mLatencyTracker = latencyTracker;
        mGlobalSettings = globalSettings;
        mGuestResumeSessionReceiver = new GuestResumeSessionReceiver(
                this, mUserTracker, mUiEventLogger, secureSettings);
        mBgExecutor = bgExecutor;
@@ -237,14 +240,19 @@ public class UserSwitcherController implements Dumpable {
            @Override
            public void onChange(boolean selfChange) {
                mSimpleUserSwitcher = shouldUseSimpleUserSwitcher();
                mAddUsersFromLockScreen = Settings.Global.getInt(mContext.getContentResolver(),
                        Settings.Global.ADD_USERS_WHEN_LOCKED, 0) != 0;
                mAddUsersFromLockScreen = mGlobalSettings.getIntForUser(
                        Settings.Global.ADD_USERS_WHEN_LOCKED, 0, UserHandle.USER_SYSTEM) != 0;
                mUserSwitcherEnabled = mGlobalSettings.getIntForUser(
                        Settings.Global.USER_SWITCHER_ENABLED, 0, UserHandle.USER_SYSTEM) != 0;
                refreshUsers(UserHandle.USER_NULL);
            };
        };
        mContext.getContentResolver().registerContentObserver(
                Settings.Global.getUriFor(SIMPLE_USER_SWITCHER_GLOBAL_SETTING), true,
                mSettingsObserver);
        mContext.getContentResolver().registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.USER_SWITCHER_ENABLED), true,
                mSettingsObserver);
        mContext.getContentResolver().registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.ADD_USERS_WHEN_LOCKED), true,
                mSettingsObserver);
@@ -314,6 +322,10 @@ public class UserSwitcherController implements Dumpable {
            for (UserInfo info : infos) {
                boolean isCurrent = currentId == info.id;
                boolean switchToEnabled = canSwitchUsers || isCurrent;
                if (!mUserSwitcherEnabled && !info.isPrimary()) {
                    continue;
                }

                if (info.isEnabled()) {
                    if (info.isGuest()) {
                        // Tapping guest icon triggers remove and a user switch therefore
@@ -340,9 +352,6 @@ public class UserSwitcherController implements Dumpable {
                    }
                }
            }
            if (records.size() > 1 || guestRecord != null) {
                Prefs.putBoolean(mContext, Key.SEEN_MULTI_USER, true);
            }

            if (guestRecord == null) {
                if (mGuestUserAutoCreated) {
@@ -411,12 +420,14 @@ public class UserSwitcherController implements Dumpable {
    }

    boolean canCreateGuest(boolean hasExistingGuest) {
        return (currentUserCanCreateUsers() || anyoneCanCreateUsers())
        return mUserSwitcherEnabled
                && (currentUserCanCreateUsers() || anyoneCanCreateUsers())
                && !hasExistingGuest;
    }

    boolean canCreateUser() {
        return (currentUserCanCreateUsers() || anyoneCanCreateUsers())
        return mUserSwitcherEnabled
                && (currentUserCanCreateUsers() || anyoneCanCreateUsers())
                && mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_SECONDARY);
    }

@@ -1034,8 +1045,8 @@ public class UserSwitcherController implements Dumpable {
    private boolean shouldUseSimpleUserSwitcher() {
        int defaultSimpleUserSwitcher = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_expandLockScreenUserSwitcher) ? 1 : 0;
        return Settings.Global.getInt(mContext.getContentResolver(),
                SIMPLE_USER_SWITCHER_GLOBAL_SETTING, defaultSimpleUserSwitcher) != 0;
        return mGlobalSettings.getIntForUser(SIMPLE_USER_SWITCHER_GLOBAL_SETTING,
                defaultSimpleUserSwitcher, UserHandle.USER_SYSTEM) != 0;
    }

    public void startActivity(Intent intent) {
+60 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.hardware.fingerprint.FingerprintManager
import android.os.Handler
import android.os.UserHandle
import android.os.UserManager
import android.provider.Settings
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.ThreadedRenderer
@@ -51,6 +52,7 @@ import com.android.systemui.settings.UserTracker
import com.android.systemui.statusbar.phone.NotificationShadeWindowView
import com.android.systemui.telephony.TelephonyListenerManager
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.settings.GlobalSettings
import com.android.systemui.util.settings.SecureSettings
import com.android.systemui.util.time.FakeSystemClock
import org.junit.Assert.assertEquals
@@ -67,6 +69,7 @@ import org.mockito.Mockito.`when`
import org.mockito.Mockito.any
import org.mockito.Mockito.doNothing
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.eq
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
@@ -95,6 +98,7 @@ class UserSwitcherControllerTest : SysuiTestCase() {
    @Mock private lateinit var notificationShadeWindowView: NotificationShadeWindowView
    @Mock private lateinit var threadedRenderer: ThreadedRenderer
    @Mock private lateinit var dialogLaunchAnimator: DialogLaunchAnimator
    @Mock private lateinit var globalSettings: GlobalSettings
    private lateinit var testableLooper: TestableLooper
    private lateinit var bgExecutor: FakeExecutor
    private lateinit var longRunningExecutor: FakeExecutor
@@ -148,6 +152,22 @@ class UserSwitcherControllerTest : SysuiTestCase() {
        `when`(userTracker.userId).thenReturn(ownerId)
        `when`(userTracker.userInfo).thenReturn(ownerInfo)

        `when`(
            globalSettings.getIntForUser(
                eq(Settings.Global.ADD_USERS_WHEN_LOCKED),
                anyInt(),
                eq(UserHandle.USER_SYSTEM)
            )
        ).thenReturn(0)

        `when`(
            globalSettings.getIntForUser(
                eq(Settings.Global.USER_SWITCHER_ENABLED),
                anyInt(),
                eq(UserHandle.USER_SYSTEM)
            )
        ).thenReturn(1)

        setupController()
    }

@@ -168,6 +188,7 @@ class UserSwitcherControllerTest : SysuiTestCase() {
                falsingManager,
                telephonyListenerManager,
                secureSettings,
                globalSettings,
                bgExecutor,
                longRunningExecutor,
                uiExecutor,
@@ -469,4 +490,43 @@ class UserSwitcherControllerTest : SysuiTestCase() {
        // THEN a supervised user can NOT be constructed
        assertFalse(userSwitcherController.canCreateSupervisedUser())
    }

    @Test
    fun testCannotCreateUserWhenUserSwitcherDisabled() {
        `when`(
            globalSettings.getIntForUser(
                eq(Settings.Global.USER_SWITCHER_ENABLED),
                anyInt(),
                eq(UserHandle.USER_SYSTEM)
            )
        ).thenReturn(0)
        setupController()
        assertFalse(userSwitcherController.canCreateUser())
    }

    @Test
    fun testCannotCreateGuestUserWhenUserSwitcherDisabled() {
        `when`(
            globalSettings.getIntForUser(
                eq(Settings.Global.USER_SWITCHER_ENABLED),
                anyInt(),
                eq(UserHandle.USER_SYSTEM)
            )
        ).thenReturn(0)
        setupController()
        assertFalse(userSwitcherController.canCreateGuest(false))
    }

    @Test
    fun testCannotCreateSupervisedUserWhenUserSwitcherDisabled() {
        `when`(
            globalSettings.getIntForUser(
                eq(Settings.Global.USER_SWITCHER_ENABLED),
                anyInt(),
                eq(UserHandle.USER_SYSTEM)
            )
        ).thenReturn(0)
        setupController()
        assertFalse(userSwitcherController.canCreateSupervisedUser())
    }
}