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

Commit 60887155 authored by Saumya Pathak's avatar Saumya Pathak Committed by Android (Google) Code Review
Browse files

Merge "Add new HideInSettingsInQuietMode user property" into main

parents 2a6cd0fc ea3c9abe
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ public final class UserProperties implements Parcelable {
    private static final String ATTR_SHOW_IN_LAUNCHER = "showInLauncher";
    private static final String ATTR_START_WITH_PARENT = "startWithParent";
    private static final String ATTR_SHOW_IN_SETTINGS = "showInSettings";
    private static final String ATTR_HIDE_IN_SETTINGS_IN_QUIET_MODE = "hideInSettingsInQuietMode";
    private static final String ATTR_INHERIT_DEVICE_POLICY = "inheritDevicePolicy";
    private static final String ATTR_USE_PARENTS_CONTACTS = "useParentsContacts";
    private static final String ATTR_UPDATE_CROSS_PROFILE_INTENT_FILTERS_ON_OTA =
@@ -78,6 +79,7 @@ public final class UserProperties implements Parcelable {
            INDEX_CREDENTIAL_SHAREABLE_WITH_PARENT,
            INDEX_DELETE_APP_WITH_PARENT,
            INDEX_ALWAYS_VISIBLE,
            INDEX_HIDE_IN_SETTINGS_IN_QUIET_MODE,
    })
    @Retention(RetentionPolicy.SOURCE)
    private @interface PropertyIndex {
@@ -94,6 +96,7 @@ public final class UserProperties implements Parcelable {
    private static final int INDEX_CREDENTIAL_SHAREABLE_WITH_PARENT = 9;
    private static final int INDEX_DELETE_APP_WITH_PARENT = 10;
    private static final int INDEX_ALWAYS_VISIBLE = 11;
    private static final int INDEX_HIDE_IN_SETTINGS_IN_QUIET_MODE = 12;
    /** A bit set, mapping each PropertyIndex to whether it is present (1) or absent (0). */
    private long mPropertiesPresent = 0;

@@ -324,6 +327,7 @@ public final class UserProperties implements Parcelable {
        if (hasManagePermission) {
            // Add items that require MANAGE_USERS or stronger.
            setShowInSettings(orig.getShowInSettings());
            setHideInSettingsInQuietMode(orig.getHideInSettingsInQuietMode());
            setUseParentsContacts(orig.getUseParentsContacts());
        }
        if (hasQueryOrManagePermission) {
@@ -408,6 +412,42 @@ public final class UserProperties implements Parcelable {
    }
    private @ShowInSettings int mShowInSettings;

    /**
     * Returns whether a user should be shown in the Settings app depending on the quiet mode.
     * This is generally inapplicable for non-profile users.
     *
     * <p> {@link #getShowInSettings()} returns whether / how a user should be shown in Settings.
     * However, if this behaviour should be changed based on the quiet mode of the user, then this
     * property can be used. If the property is not set then the user is shown in the Settings app
     * irrespective of whether the user is in quiet mode or not. If the property is set, then the
     * user is shown in the Settings app only if the user is not in the quiet mode. Please note that
     * this property takes effect only if {@link #getShowInSettings()} does not return
     * {@link #SHOW_IN_SETTINGS_NO}.
     *
     * <p> The caller must have {@link android.Manifest.permission#MANAGE_USERS} to query this
     * property.
     *
     * @return true if a profile should be shown in the Settings only when the user is not in the
     * quiet mode.
     *
     * See also {@link #getShowInSettings()}, {@link #setShowInSettings(int)},
     * {@link ShowInSettings}
     *
     * @hide
     */
    public boolean getHideInSettingsInQuietMode() {
        if (isPresent(INDEX_HIDE_IN_SETTINGS_IN_QUIET_MODE)) return mHideInSettingsInQuietMode;
        if (mDefaultProperties != null) return mDefaultProperties.mHideInSettingsInQuietMode;
        throw new SecurityException(
                "You don't have permission to query HideInSettingsInQuietMode");
    }
    /** @hide */
    public void setHideInSettingsInQuietMode(boolean hideInSettingsInQuietMode) {
        this.mHideInSettingsInQuietMode = hideInSettingsInQuietMode;
        setPresent(INDEX_HIDE_IN_SETTINGS_IN_QUIET_MODE);
    }
    private boolean mHideInSettingsInQuietMode;

    /**
     * Returns whether a profile should be started when its parent starts (unless in quiet mode).
     * This only applies for users that have parents (i.e. for profiles).
@@ -724,6 +764,9 @@ public final class UserProperties implements Parcelable {
                case ATTR_SHOW_IN_SETTINGS:
                    setShowInSettings(parser.getAttributeInt(i));
                    break;
                case ATTR_HIDE_IN_SETTINGS_IN_QUIET_MODE:
                    setHideInSettingsInQuietMode(parser.getAttributeBoolean(i));
                    break;
                case ATTR_INHERIT_DEVICE_POLICY:
                    setInheritDevicePolicy(parser.getAttributeInt(i));
                    break;
@@ -777,6 +820,10 @@ public final class UserProperties implements Parcelable {
        if (isPresent(INDEX_SHOW_IN_SETTINGS)) {
            serializer.attributeInt(null, ATTR_SHOW_IN_SETTINGS, mShowInSettings);
        }
        if (isPresent(INDEX_HIDE_IN_SETTINGS_IN_QUIET_MODE)) {
            serializer.attributeBoolean(null, ATTR_HIDE_IN_SETTINGS_IN_QUIET_MODE,
                    mHideInSettingsInQuietMode);
        }
        if (isPresent(INDEX_INHERIT_DEVICE_POLICY)) {
            serializer.attributeInt(null, ATTR_INHERIT_DEVICE_POLICY,
                    mInheritDevicePolicy);
@@ -823,6 +870,7 @@ public final class UserProperties implements Parcelable {
        dest.writeInt(mShowInLauncher);
        dest.writeBoolean(mStartWithParent);
        dest.writeInt(mShowInSettings);
        dest.writeBoolean(mHideInSettingsInQuietMode);
        dest.writeInt(mInheritDevicePolicy);
        dest.writeBoolean(mUseParentsContacts);
        dest.writeBoolean(mUpdateCrossProfileIntentFiltersOnOTA);
@@ -845,6 +893,7 @@ public final class UserProperties implements Parcelable {
        mShowInLauncher = source.readInt();
        mStartWithParent = source.readBoolean();
        mShowInSettings = source.readInt();
        mHideInSettingsInQuietMode = source.readBoolean();
        mInheritDevicePolicy = source.readInt();
        mUseParentsContacts = source.readBoolean();
        mUpdateCrossProfileIntentFiltersOnOTA = source.readBoolean();
@@ -881,6 +930,7 @@ public final class UserProperties implements Parcelable {
        private @ShowInLauncher int mShowInLauncher = SHOW_IN_LAUNCHER_WITH_PARENT;
        private boolean mStartWithParent = false;
        private @ShowInSettings int mShowInSettings = SHOW_IN_SETTINGS_WITH_PARENT;
        private boolean mHideInSettingsInQuietMode = false;
        private @InheritDevicePolicy int mInheritDevicePolicy = INHERIT_DEVICE_POLICY_NO;
        private boolean mUseParentsContacts = false;
        private boolean mUpdateCrossProfileIntentFiltersOnOTA = false;
@@ -910,6 +960,12 @@ public final class UserProperties implements Parcelable {
            return this;
        }

        /** Sets the value for {@link #mHideInSettingsInQuietMode} */
        public Builder setHideInSettingsInQuietMode(boolean hideInSettingsInQuietMode) {
            mHideInSettingsInQuietMode = hideInSettingsInQuietMode;
            return this;
        }

        /** Sets the value for {@link #mInheritDevicePolicy}*/
        public Builder setInheritDevicePolicy(
                @InheritDevicePolicy int inheritRestrictionsDevicePolicy) {
@@ -972,6 +1028,7 @@ public final class UserProperties implements Parcelable {
                    mShowInLauncher,
                    mStartWithParent,
                    mShowInSettings,
                    mHideInSettingsInQuietMode,
                    mInheritDevicePolicy,
                    mUseParentsContacts,
                    mUpdateCrossProfileIntentFiltersOnOTA,
@@ -989,6 +1046,7 @@ public final class UserProperties implements Parcelable {
            @ShowInLauncher int showInLauncher,
            boolean startWithParent,
            @ShowInSettings int showInSettings,
            boolean hideInSettingsInQuietMode,
            @InheritDevicePolicy int inheritDevicePolicy,
            boolean useParentsContacts, boolean updateCrossProfileIntentFiltersOnOTA,
            @CrossProfileIntentFilterAccessControlLevel int crossProfileIntentFilterAccessControl,
@@ -1001,6 +1059,7 @@ public final class UserProperties implements Parcelable {
        setShowInLauncher(showInLauncher);
        setStartWithParent(startWithParent);
        setShowInSettings(showInSettings);
        setHideInSettingsInQuietMode(hideInSettingsInQuietMode);
        setInheritDevicePolicy(inheritDevicePolicy);
        setUseParentsContacts(useParentsContacts);
        setUpdateCrossProfileIntentFiltersOnOTA(updateCrossProfileIntentFiltersOnOTA);
+2 −0
Original line number Diff line number Diff line
@@ -295,6 +295,8 @@ public final class UserTypeFactory {
                        .setCredentialShareableWithParent(false)
                        .setMediaSharedWithParent(false)
                        .setShowInLauncher(UserProperties.SHOW_IN_LAUNCHER_SEPARATE)
                        .setShowInSettings(UserProperties.SHOW_IN_SETTINGS_SEPARATE)
                        .setHideInSettingsInQuietMode(true)
                        .setCrossProfileIntentFilterAccessControl(
                                UserProperties.CROSS_PROFILE_INTENT_FILTER_ACCESS_LEVEL_SYSTEM)
                        .setInheritDevicePolicy(UserProperties.INHERIT_DEVICE_POLICY_FROM_PARENT));
+1 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@
            mediaSharedWithParent='true'
            credentialShareableWithParent='false'
            showInSettings='23'
            hideInSettingsInQuietMode='true'
            inheritDevicePolicy='450'
            deleteAppWithParent='false'
            alwaysVisible='true'
+4 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ public class UserManagerServiceUserPropertiesTest {
                .setShowInLauncher(21)
                .setStartWithParent(false)
                .setShowInSettings(45)
                .setHideInSettingsInQuietMode(false)
                .setInheritDevicePolicy(67)
                .setUseParentsContacts(false)
                .setCrossProfileIntentFilterAccessControl(10)
@@ -72,6 +73,7 @@ public class UserManagerServiceUserPropertiesTest {
        final UserProperties actualProps = new UserProperties(defaultProps);
        actualProps.setShowInLauncher(14);
        actualProps.setShowInSettings(32);
        actualProps.setHideInSettingsInQuietMode(true);
        actualProps.setInheritDevicePolicy(51);
        actualProps.setUseParentsContacts(true);
        actualProps.setCrossProfileIntentFilterAccessControl(20);
@@ -228,6 +230,8 @@ public class UserManagerServiceUserPropertiesTest {
        assertThat(expected.getShowInLauncher()).isEqualTo(actual.getShowInLauncher());
        assertThat(expected.getStartWithParent()).isEqualTo(actual.getStartWithParent());
        assertThat(expected.getShowInSettings()).isEqualTo(actual.getShowInSettings());
        assertThat(expected.getHideInSettingsInQuietMode())
                .isEqualTo(actual.getHideInSettingsInQuietMode());
        assertThat(expected.getInheritDevicePolicy()).isEqualTo(actual.getInheritDevicePolicy());
        assertThat(expected.getUseParentsContacts()).isEqualTo(actual.getUseParentsContacts());
        assertThat(expected.getCrossProfileIntentFilterAccessControl())
+6 −0
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ public class UserManagerServiceUserTypeTest {
                .setMediaSharedWithParent(true)
                .setCredentialShareableWithParent(false)
                .setShowInSettings(900)
                .setHideInSettingsInQuietMode(true)
                .setInheritDevicePolicy(340)
                .setDeleteAppWithParent(true)
                .setAlwaysVisible(true);
@@ -160,6 +161,7 @@ public class UserManagerServiceUserTypeTest {
        assertTrue(type.getDefaultUserPropertiesReference().isMediaSharedWithParent());
        assertFalse(type.getDefaultUserPropertiesReference().isCredentialShareableWithParent());
        assertEquals(900, type.getDefaultUserPropertiesReference().getShowInSettings());
        assertTrue(type.getDefaultUserPropertiesReference().getHideInSettingsInQuietMode());
        assertEquals(340, type.getDefaultUserPropertiesReference()
                .getInheritDevicePolicy());
        assertTrue(type.getDefaultUserPropertiesReference().getDeleteAppWithParent());
@@ -217,6 +219,7 @@ public class UserManagerServiceUserTypeTest {
        assertFalse(props.isCredentialShareableWithParent());
        assertFalse(props.getDeleteAppWithParent());
        assertFalse(props.getAlwaysVisible());
        assertFalse(props.getHideInSettingsInQuietMode());

        assertFalse(type.hasBadge());
    }
@@ -304,6 +307,7 @@ public class UserManagerServiceUserTypeTest {
                .setMediaSharedWithParent(false)
                .setCredentialShareableWithParent(true)
                .setShowInSettings(20)
                .setHideInSettingsInQuietMode(false)
                .setInheritDevicePolicy(21)
                .setDeleteAppWithParent(true)
                .setAlwaysVisible(false);
@@ -344,6 +348,7 @@ public class UserManagerServiceUserTypeTest {
        assertTrue(aospType.getDefaultUserPropertiesReference()
                .isCredentialShareableWithParent());
        assertEquals(20, aospType.getDefaultUserPropertiesReference().getShowInSettings());
        assertFalse(aospType.getDefaultUserPropertiesReference().getHideInSettingsInQuietMode());
        assertEquals(21, aospType.getDefaultUserPropertiesReference()
                .getInheritDevicePolicy());
        assertTrue(aospType.getDefaultUserPropertiesReference().getDeleteAppWithParent());
@@ -390,6 +395,7 @@ public class UserManagerServiceUserTypeTest {
        assertFalse(aospType.getDefaultUserPropertiesReference()
                .isCredentialShareableWithParent());
        assertEquals(23, aospType.getDefaultUserPropertiesReference().getShowInSettings());
        assertTrue(aospType.getDefaultUserPropertiesReference().getHideInSettingsInQuietMode());
        assertEquals(450, aospType.getDefaultUserPropertiesReference()
                .getInheritDevicePolicy());
        assertFalse(aospType.getDefaultUserPropertiesReference().getDeleteAppWithParent());