Fix toggle when no_user_switch is applied without EnforcedAdmin

If EnforcedAdmin is null, calling setDisabledByEnforcedAdmin does not disable the setting. So if this restriction was applied by a source different than admin, the toggle was still active for users to change (even non-main).

After this change, the restriction is correctly processed both when it is applied by admin or by some other source.

Bug: 356387759
Test: atest MultiUserSwitchBarControllerTest
Flag: android.multiuser.fix_disabling_of_mu_toggle_when_restriction_applied
Change-Id: I5d38e250359ccbee67ac747f1d8a0a2143f4c216
This commit is contained in:
Tetiana Meronyk
2024-07-31 13:55:10 +00:00
parent d21dec33d1
commit 061669815a
2 changed files with 74 additions and 5 deletions

View File

@@ -17,6 +17,7 @@
package com.android.settings.users;
import android.content.Context;
import android.multiuser.Flags;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -25,6 +26,7 @@ import android.util.Log;
import androidx.annotation.VisibleForTesting;
import com.android.settings.widget.SwitchWidgetController;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -53,12 +55,24 @@ public class MultiUserSwitchBarController implements SwitchWidgetController.OnSw
mUserCapabilities = UserCapabilities.create(context);
mSwitchBar.setChecked(mUserCapabilities.mUserSwitcherEnabled);
if (mUserCapabilities.mDisallowSwitchUser) {
mSwitchBar.setDisabledByAdmin(RestrictedLockUtilsInternal
if (Flags.fixDisablingOfMuToggleWhenRestrictionApplied()) {
RestrictedLockUtils.EnforcedAdmin enforcedAdmin = RestrictedLockUtilsInternal
.checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_USER_SWITCH,
UserHandle.myUserId()));
UserHandle.myUserId());
if (enforcedAdmin != null) {
mSwitchBar.setDisabledByAdmin(enforcedAdmin);
} else {
mSwitchBar.setEnabled(mUserCapabilities.mIsMain
&& !mUserCapabilities.mDisallowSwitchUser);
}
} else {
mSwitchBar.setEnabled(mUserCapabilities.mIsMain);
if (mUserCapabilities.mDisallowSwitchUser) {
mSwitchBar.setDisabledByAdmin(RestrictedLockUtilsInternal
.checkIfRestrictionEnforced(mContext, UserManager.DISALLOW_USER_SWITCH,
UserHandle.myUserId()));
} else {
mSwitchBar.setEnabled(mUserCapabilities.mIsMain);
}
}
mSwitchBar.setListener(this);
}