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

Commit d503f256 authored by Manish Singh's avatar Manish Singh
Browse files

Check purely for the presence of a managed profile

including the parent user, as here we care only about the existence of
the managed profile.

This maintains the behaviour prior to private space changes.

Bug: 313128792
Test: manual
Test: atest ProfileSelectFragmentTest
Change-Id: I1d253f95ca534b48acfdb4c1c8b84368d731dded
parent eaafcbcb
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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<UserInfo> 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;
+4 −3
Original line number Diff line number Diff line
@@ -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);
        }
    }

+10 −11
Original line number Diff line number Diff line
@@ -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);