diff --git a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java index a0c4cbecaed..6a9ea9dcbca 100644 --- a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java +++ b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java @@ -287,6 +287,14 @@ public class PrivateSpaceMaintainer { } } + /** + * Returns true if private profile can be added to the device or if private space already + * exists, false otherwise. + */ + public boolean isPrivateSpaceEntryPointEnabled() { + return mUserManager.canAddPrivateProfile() || doesPrivateSpaceExist(); + } + /** Returns true if private space exists and is running, otherwise returns false */ @VisibleForTesting synchronized boolean isPrivateProfileRunning() { diff --git a/src/com/android/settings/privatespace/PrivateSpaceSafetySource.java b/src/com/android/settings/privatespace/PrivateSpaceSafetySource.java index 3272f125756..9a018539b0e 100644 --- a/src/com/android/settings/privatespace/PrivateSpaceSafetySource.java +++ b/src/com/android/settings/privatespace/PrivateSpaceSafetySource.java @@ -52,9 +52,7 @@ public final class PrivateSpaceSafetySource { // Do not add the entry point when // -Private Profile is not present and // -Private Profile cannot be added. - if (!privateSpaceMaintainer.doesPrivateSpaceExist() - && userManager != null - && !userManager.canAddPrivateProfile()) { + if (!privateSpaceMaintainer.isPrivateSpaceEntryPointEnabled()) { Log.i(TAG, "Private Space not allowed for user " + context.getUser()); return; } diff --git a/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceController.java b/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceController.java index 274bb2b184b..6e1f0df96d5 100644 --- a/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceController.java +++ b/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceController.java @@ -59,10 +59,9 @@ public class ResetOptionsDeletePrivateSpaceController extends BasePreferenceCont @Override public int getAvailabilityStatus() { - // TODO(b/330396315) : use canAddPrivateProfile() to check if private space is supported - // on the device return android.multiuser.Flags.enablePrivateSpaceFeatures() && android.multiuser.Flags.deletePrivateSpaceFromReset() + && isPrivateSpaceEntryPointEnabled() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } @@ -107,6 +106,11 @@ public class ResetOptionsDeletePrivateSpaceController extends BasePreferenceCont return mHostFragment.getFragmentManager(); } + @VisibleForTesting + boolean isPrivateSpaceEntryPointEnabled() { + return PrivateSpaceMaintainer.getInstance(mContext).isPrivateSpaceEntryPointEnabled(); + } + /* Dialog shown when deleting private space from Reset Options. */ public static class DeletePrivateSpaceDialogFragment extends InstrumentedDialogFragment { private static final String TAG = "PrivateSpaceResetFrag"; diff --git a/tests/robotests/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceControllerTest.java b/tests/robotests/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceControllerTest.java index ebff07a44d3..a17859ad9ae 100644 --- a/tests/robotests/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceControllerTest.java +++ b/tests/robotests/src/com/android/settings/privatespace/delete/ResetOptionsDeletePrivateSpaceControllerTest.java @@ -103,11 +103,23 @@ public class ResetOptionsDeletePrivateSpaceControllerTest { } @Test - public void getAvailabilityStatus_flagsEnabled_returnsAvailable() { + public void getAvailabilityStatus_flagsEnabledCanAddProfile_returnsAvailable() { mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_DELETE_PRIVATE_SPACE_FROM_RESET); + ResetOptionsDeletePrivateSpaceController spyController = spy(mController); + doReturn(true).when(spyController).isPrivateSpaceEntryPointEnabled(); - assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + assertThat(spyController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + public void getAvailabilityStatus_flagsEnabledCannotAddProfile_returnsUnsupported() { + mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + mSetFlagsRule.enableFlags(android.multiuser.Flags.FLAG_DELETE_PRIVATE_SPACE_FROM_RESET); + ResetOptionsDeletePrivateSpaceController spyController = spy(mController); + doReturn(false).when(spyController).isPrivateSpaceEntryPointEnabled(); + + assertThat(spyController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); } @Test diff --git a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java index 50f67d3c55b..98797d5cfcd 100644 --- a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java +++ b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java @@ -25,12 +25,18 @@ import static com.android.settings.privatespace.PrivateSpaceMaintainer.PRIVATE_S import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assume.assumeFalse; +import static org.junit.Assume.assumeTrue; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + import android.app.ActivityManager; import android.app.IActivityManager; import android.content.ContentResolver; import android.content.Context; import android.os.Flags; import android.os.RemoteException; +import android.os.UserManager; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; @@ -300,6 +306,61 @@ public class PrivateSpaceMaintainerTest { .isEqualTo(privateSpaceAutLockValue); } + @Test + public void isPrivateSpaceEntryPointEnabled_psExistCanAddProfileTrue_returnsTrue() { + mSetFlagsRule.enableFlags( + Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); + PrivateSpaceMaintainer privateSpaceMaintainer = + PrivateSpaceMaintainer.getInstance(mContext); + privateSpaceMaintainer.createPrivateSpace(); + assertThat(privateSpaceMaintainer.doesPrivateSpaceExist()).isTrue(); + + assertThat(privateSpaceMaintainer.isPrivateSpaceEntryPointEnabled()).isTrue(); + } + + @Test + public void isPrivateSpaceEntryPointEnabled_psNotExistsCanAddProfileTrue_returnsTrue() { + mSetFlagsRule.enableFlags( + Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeTrue(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); + PrivateSpaceMaintainer privateSpaceMaintainer = + PrivateSpaceMaintainer.getInstance(mContext); + privateSpaceMaintainer.deletePrivateSpace(); + assertThat(privateSpaceMaintainer.doesPrivateSpaceExist()).isFalse(); + + assertThat(privateSpaceMaintainer.isPrivateSpaceEntryPointEnabled()).isTrue(); + } + + @Test + public void isPrivateSpaceEntryPointEnabled_psExistsCanAddProfileFalse_returnsTrue() { + mSetFlagsRule.enableFlags( + Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeFalse(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); + PrivateSpaceMaintainer privateSpaceMaintainer = + spy(PrivateSpaceMaintainer.getInstance(mContext)); + when(privateSpaceMaintainer.doesPrivateSpaceExist()).thenReturn(true); + + assertThat(privateSpaceMaintainer.isPrivateSpaceEntryPointEnabled()).isTrue(); + } + + @Test + public void isPrivateSpaceEntryPointEnabled_psNotExistsCanAddProfileFalse_returnsFalse() { + mSetFlagsRule.enableFlags( + Flags.FLAG_ALLOW_PRIVATE_PROFILE, + android.multiuser.Flags.FLAG_ENABLE_PRIVATE_SPACE_FEATURES); + assumeFalse(mContext.getSystemService(UserManager.class).canAddPrivateProfile()); + PrivateSpaceMaintainer privateSpaceMaintainer = + PrivateSpaceMaintainer.getInstance(mContext); + privateSpaceMaintainer.deletePrivateSpace(); + assertThat(privateSpaceMaintainer.doesPrivateSpaceExist()).isFalse(); + + assertThat(privateSpaceMaintainer.isPrivateSpaceEntryPointEnabled()).isFalse(); + } + private int getSecureUserSetupComplete() { PrivateSpaceMaintainer privateSpaceMaintainer = PrivateSpaceMaintainer.getInstance(mContext);