Lock Private space at the end of PS setup.
This change is to call UserManager requestQuietModeEnabled() API at the
end of PS setup to enable quitemode for private space.
Bug: 313652502
Test: atest PrivateSpaceMaintainerTest
Verify Private space is locked state after private space setup completion.
Change-Id: I1d863f6d51ffa4bb58318696603905d35c3109b6
diff --git a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
index 3ec7c92..b5e76920 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
@@ -34,6 +34,7 @@
import android.util.Log;
import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
import com.android.internal.annotations.GuardedBy;
@@ -226,6 +227,26 @@
HIDE_PRIVATE_SPACE_ENTRY_POINT_DISABLED_VAL);
}
+ /**
+ * Returns true if private space exists and quiet mode is successfully enabled, otherwise
+ * returns false
+ */
+ public synchronized boolean lockPrivateSpace() {
+ if (isPrivateProfileRunning()) {
+ return mUserManager.requestQuietModeEnabled(true, mUserHandle);
+ }
+ return false;
+ }
+
+ /** Returns true if private space exists and is running, otherwise returns false */
+ @VisibleForTesting
+ synchronized boolean isPrivateProfileRunning() {
+ if (doesPrivateSpaceExist() && mUserHandle != null) {
+ return mUserManager.isUserRunning(mUserHandle);
+ }
+ return false;
+ }
+
private void resetPrivateSpaceSettings() {
setHidePrivateSpaceEntryPointSetting(HIDE_PRIVATE_SPACE_ENTRY_POINT_DISABLED_VAL);
}
diff --git a/src/com/android/settings/privatespace/SetupSuccessFragment.java b/src/com/android/settings/privatespace/SetupSuccessFragment.java
index 0b1b9d9..ebeae7a 100644
--- a/src/com/android/settings/privatespace/SetupSuccessFragment.java
+++ b/src/com/android/settings/privatespace/SetupSuccessFragment.java
@@ -84,6 +84,8 @@
if (activity != null) {
mMetricsFeatureProvider.action(
getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_DONE);
+ //TODO(b/307729746): Add a test to verify PS is locked after setup completion.
+ PrivateSpaceMaintainer.getInstance(activity).lockPrivateSpace();
Intent allAppsIntent = new Intent(Intent.ACTION_ALL_APPS);
ResolveInfo resolveInfo =
activity.getPackageManager()
diff --git a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java
index 0a2f3d1..1d27326 100644
--- a/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java
+++ b/tests/unit/src/com/android/settings/privatespace/PrivateSpaceMaintainerTest.java
@@ -21,8 +21,11 @@
import static com.google.common.truth.Truth.assertThat;
+import android.app.ActivityManager;
+import android.app.IActivityManager;
import android.content.ContentResolver;
import android.content.Context;
+import android.os.RemoteException;
import android.provider.Settings;
import androidx.test.core.app.ApplicationProvider;
@@ -30,6 +33,8 @@
import com.android.settings.privatespace.PrivateSpaceMaintainer.ErrorDeletingPrivateSpace;
+import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -37,6 +42,7 @@
@RunWith(AndroidJUnit4.class)
public class PrivateSpaceMaintainerTest {
+ private static final String TAG = "PSMaintainerTest";
private Context mContext;
private ContentResolver mContentResolver;
@@ -48,6 +54,13 @@
mContentResolver = mContext.getContentResolver();
}
+ @After
+ public void tearDown() {
+ PrivateSpaceMaintainer privateSpaceMaintainer =
+ PrivateSpaceMaintainer.getInstance(mContext);
+ privateSpaceMaintainer.deletePrivateSpace();
+ }
+
/** Tests that {@link PrivateSpaceMaintainer#deletePrivateSpace()} deletes PS when PS exists. */
@Test
public void deletePrivateSpace_psExists_deletesPS() {
@@ -137,4 +150,52 @@
assertThat(privateSpaceMaintainer.getHidePrivateSpaceEntryPointSetting())
.isEqualTo(HIDE_PRIVATE_SPACE_ENTRY_POINT_ENABLED_VAL);
}
+
+ /**
+ * Tests that {@link PrivateSpaceMaintainer#lockPrivateSpace()} when PS exists and is running
+ * locks the private profile.
+ */
+ @Test
+ public void lockPrivateSpace_psExistsAndPrivateProfileRunning_locksCreatedPrivateSpace() {
+ PrivateSpaceMaintainer privateSpaceMaintainer =
+ PrivateSpaceMaintainer.getInstance(mContext);
+ privateSpaceMaintainer.createPrivateSpace();
+ assertThat(privateSpaceMaintainer.doesPrivateSpaceExist()).isTrue();
+ assertThat(privateSpaceMaintainer.isPrivateProfileRunning()).isTrue();
+ assertThat(privateSpaceMaintainer.isPrivateSpaceLocked()).isFalse();
+ assertThat(privateSpaceMaintainer.lockPrivateSpace()).isTrue();
+ assertThat(privateSpaceMaintainer.isPrivateSpaceLocked()).isTrue();
+ }
+
+ /**
+ * Tests that {@link PrivateSpaceMaintainer#lockPrivateSpace()} when PS exist and private
+ * profile not running returns false.
+ */
+ @Test
+ public void lockPrivateSpace_psExistsAndPrivateProfileNotRunning_returnsFalse() {
+ PrivateSpaceMaintainer privateSpaceMaintainer =
+ PrivateSpaceMaintainer.getInstance(mContext);
+ privateSpaceMaintainer.createPrivateSpace();
+ assertThat(privateSpaceMaintainer.doesPrivateSpaceExist()).isTrue();
+ assertThat(privateSpaceMaintainer.isPrivateProfileRunning()).isTrue();
+ IActivityManager am = ActivityManager.getService();
+ try {
+ am.stopProfile(privateSpaceMaintainer.getPrivateProfileHandle().getIdentifier());
+ } catch (RemoteException e) {
+ Assert.fail("Stop profile failed with exception " + e.getMessage());
+ }
+ assertThat(privateSpaceMaintainer.isPrivateProfileRunning()).isFalse();
+ assertThat(privateSpaceMaintainer.lockPrivateSpace()).isFalse();
+ }
+
+ /**
+ * Tests that {@link PrivateSpaceMaintainer#lockPrivateSpace()} when no PS exists returns false.
+ */
+ @Test
+ public void lockPrivateSpace_psDoesNotExist_returnsFalse() {
+ PrivateSpaceMaintainer privateSpaceMaintainer =
+ PrivateSpaceMaintainer.getInstance(mContext);
+ assertThat(privateSpaceMaintainer.doesPrivateSpaceExist()).isFalse();
+ assertThat(privateSpaceMaintainer.lockPrivateSpace()).isFalse();
+ }
}