diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 2113b5d2c62..a4466fb35b2 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -467,6 +467,22 @@ public final class Utils extends com.android.settingslib.Utils { return null; } + /** + * Returns true if a profile of specified userType exists. Note that it considers all profiles, + * including the disabled profiles and the parent user itself. + */ + public static boolean doesProfileOfTypeExists( + @NonNull UserManager userManager, @ProfileType int userType) { + final List userProfiles = userManager.getProfiles(UserHandle.myUserId()); + String umUserType = getUmUserType(userType); + for (UserInfo profile : userProfiles) { + if (Objects.equals(umUserType, profile.userType)) { + return true; + } + } + return false; + } + private static String getUmUserType(@ProfileType int userType) throws IllegalArgumentException { if (userType == ProfileType.WORK) { return USER_TYPE_PROFILE_MANAGED; diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java index dc1b792efad..a70d7d8a9ce 100644 --- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java +++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java @@ -322,7 +322,7 @@ public abstract class ProfileSelectFragment extends DashboardFragment { personalFragment.setArguments(personalOnly); fragments.add(personalFragment); - if (managedProfileInfoProvider.getManagedProfile(context) != null) { + if (managedProfileInfoProvider.isManagedProfilePresent(context)) { final Bundle workOnly = bundle != null ? bundle.deepCopy() : new Bundle(); workOnly.putInt(EXTRA_PROFILE, ProfileType.WORK); final Fragment workFragment = @@ -361,8 +361,9 @@ public abstract class ProfileSelectFragment extends DashboardFragment { } interface ManagedProfileInfoProvider { - default UserHandle getManagedProfile(Context context) { - return Utils.getManagedProfile(context.getSystemService(UserManager.class)); + default boolean isManagedProfilePresent(Context context) { + return Utils.doesProfileOfTypeExists( + context.getSystemService(UserManager.class), ProfileType.WORK); } } diff --git a/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectFragmentTest.java index 0f0de56da22..302c8f36b4c 100644 --- a/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectFragmentTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/profileselector/ProfileSelectFragmentTest.java @@ -32,7 +32,6 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Flags; -import android.os.UserHandle; import android.platform.test.flag.junit.SetFlagsRule; import androidx.fragment.app.Fragment; @@ -177,8 +176,8 @@ public class ProfileSelectFragmentTest { }, new ProfileSelectFragment.ManagedProfileInfoProvider() { @Override - public UserHandle getManagedProfile(Context context) { - return null; + public boolean isManagedProfilePresent(Context context) { + return false; } }); assertThat(fragments).hasLength(1); @@ -201,8 +200,8 @@ public class ProfileSelectFragmentTest { }, new ProfileSelectFragment.ManagedProfileInfoProvider() { @Override - public UserHandle getManagedProfile(Context context) { - return null; + public boolean isManagedProfilePresent(Context context) { + return false; } }); assertThat(fragments).hasLength(2); @@ -225,8 +224,8 @@ public class ProfileSelectFragmentTest { }, new ProfileSelectFragment.ManagedProfileInfoProvider() { @Override - public UserHandle getManagedProfile(Context context) { - return new UserHandle(123); + public boolean isManagedProfilePresent(Context context) { + return true; } }); assertThat(fragments).hasLength(2); @@ -249,8 +248,8 @@ public class ProfileSelectFragmentTest { }, new ProfileSelectFragment.ManagedProfileInfoProvider() { @Override - public UserHandle getManagedProfile(Context context) { - return new UserHandle(123); + public boolean isManagedProfilePresent(Context context) { + return true; } }); assertThat(fragments).hasLength(3); @@ -274,8 +273,8 @@ public class ProfileSelectFragmentTest { }, new ProfileSelectFragment.ManagedProfileInfoProvider() { @Override - public UserHandle getManagedProfile(Context context) { - return new UserHandle(123); + public boolean isManagedProfilePresent(Context context) { + return true; } }); assertThat(fragments).hasLength(3);