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

Commit 07f1af57 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Cache quiet mode state in UserManager" into main

parents dde51111 6e5ce492
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -5668,6 +5668,33 @@ public class UserManager {
        }
    }

    private static final String CACHE_KEY_QUIET_MODE_ENABLED_PROPERTY =
        PropertyInvalidatedCache.createPropertyName(
            PropertyInvalidatedCache.MODULE_SYSTEM, "quiet_mode_enabled");

    private final PropertyInvalidatedCache<Integer, Boolean> mQuietModeEnabledCache =
            new PropertyInvalidatedCache<Integer, Boolean>(
                32, CACHE_KEY_QUIET_MODE_ENABLED_PROPERTY) {
                @Override
                public Boolean recompute(Integer query) {
                    try {
                        return mService.isQuietModeEnabled(query);
                    } catch (RemoteException re) {
                        throw re.rethrowFromSystemServer();
                    }
                }
                @Override
                public boolean bypass(Integer query) {
                    return query < 0;
                }
            };


    /** @hide */
    public static final void invalidateQuietModeEnabledCache() {
        PropertyInvalidatedCache.invalidateCache(CACHE_KEY_QUIET_MODE_ENABLED_PROPERTY);
    }

    /**
     * Returns whether the given profile is in quiet mode or not.
     *
@@ -5675,6 +5702,13 @@ public class UserManager {
     * @return true if the profile is in quiet mode, false otherwise.
     */
    public boolean isQuietModeEnabled(UserHandle userHandle) {
        if (android.multiuser.Flags.cacheQuietModeState()){
            final int userId = userHandle.getIdentifier();
            if (userId < 0) {
                return false;
            }
            return mQuietModeEnabledCache.query(userId);
        }
        try {
            return mService.isQuietModeEnabled(userHandle.getIdentifier());
        } catch (RemoteException re) {
+1 −0
Original line number Diff line number Diff line
@@ -1901,6 +1901,7 @@ public class UserManagerService extends IUserManager.Stub {
                Slog.i(LOG_TAG, "Quiet mode is already " + enableQuietMode);
                return;
            }
            UserManager.invalidateQuietModeEnabledCache();
            profile.flags ^= UserInfo.FLAG_QUIET_MODE;
            profileUserData = getUserDataLU(profile.id);
        }
+19 −0
Original line number Diff line number Diff line
@@ -1862,6 +1862,25 @@ public final class UserManagerTest {
        assertThat(profilesExcludingHidden).asList().doesNotContain(profile.id);
    }

    /**
     * Test that UserManager.isQuietModeEnabled return false for unsupported
     * arguments such as UserHandle.NULL, UserHandle.CURRENT or UserHandle.ALL.
     **/
    @MediumTest
    @Test
    public void testQuietModeEnabledForUnsupportedUserHandles() throws Exception {
        assumeManagedUsersSupported();
        final int mainUserId = mUserManager.getMainUser().getIdentifier();
        UserInfo userInfo = createProfileForUser("Profile",
                UserManager.USER_TYPE_PROFILE_MANAGED, mainUserId);
        mUserManager.requestQuietModeEnabled(true, userInfo.getUserHandle());
        assertThat(mUserManager.isQuietModeEnabled(userInfo.getUserHandle())).isTrue();
        assertThat(mUserManager.isQuietModeEnabled(UserHandle.of(UserHandle.USER_NULL))).isFalse();
        assertThat(mUserManager.isQuietModeEnabled(UserHandle.CURRENT)).isFalse();
        assertThat(mUserManager.isQuietModeEnabled(UserHandle.CURRENT_OR_SELF)).isFalse();
        assertThat(mUserManager.isQuietModeEnabled(UserHandle.ALL)).isFalse();
    }

    private String generateLongString() {
        String partialString = "Test Name Test Name Test Name Test Name Test Name Test Name Test "
                + "Name Test Name Test Name Test Name "; //String of length 100