Merge "Calling requestQuietMode with peindingIntent to match PS settings with PS state" into main
diff --git a/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivity.java b/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivity.java
index a118221..69c4d9d 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivity.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceAuthenticationActivity.java
@@ -20,6 +20,7 @@
 
 import android.app.AlertDialog;
 import android.app.KeyguardManager;
+import android.app.PendingIntent;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -53,11 +54,12 @@
     private KeyguardManager mKeyguardManager;
 
     private final ActivityResultLauncher<Intent> mSetDeviceLock =
-            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+            registerForActivityResult(
+                    new ActivityResultContracts.StartActivityForResult(),
                     this::onSetDeviceLockResult);
     private final ActivityResultLauncher<Intent> mVerifyDeviceLock =
-            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
-                    this::onVerifyDeviceLock);
+            registerForActivityResult(
+                    new ActivityResultContracts.StartActivityForResult(), this::onVerifyDeviceLock);
 
     static class Injector {
         PrivateSpaceMaintainer injectPrivateSpaceMaintainer(Context context) {
@@ -71,17 +73,14 @@
 
         if (Flags.allowPrivateProfile()) {
             ThemeHelper.trySetDynamicColor(this);
-            mPrivateSpaceMaintainer = new Injector().injectPrivateSpaceMaintainer(
-                    getApplicationContext());
+            mPrivateSpaceMaintainer =
+                    new Injector().injectPrivateSpaceMaintainer(getApplicationContext());
             if (getKeyguardManager().isDeviceSecure()) {
                 if (savedInstanceState == null) {
-                    Intent credentialIntent =
-                            mPrivateSpaceMaintainer.getPrivateProfileLockCredentialIntent();
-                    if (credentialIntent != null) {
-                        mVerifyDeviceLock.launch(credentialIntent);
+                    if (mPrivateSpaceMaintainer.doesPrivateSpaceExist()) {
+                        unlockAndLaunchPrivateSpaceSettings(this);
                     } else {
-                        Log.e(TAG, "verifyCredentialIntent is null even though device lock is set");
-                        finish();
+                        authenticatePrivateSpaceEntry();
                     }
                 }
             } else {
@@ -96,14 +95,10 @@
     @VisibleForTesting
     public void onLockAuthentication(Context context) {
         if (mPrivateSpaceMaintainer.doesPrivateSpaceExist()) {
-            new SubSettingLauncher(context)
-                    .setDestination(PrivateSpaceDashboardFragment.class.getName())
-                    .setTransitionType(
-                            SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE)
-                    .setSourceMetricsCategory(SettingsEnums.PRIVATE_SPACE_SETTINGS)
-                    .launch();
+            unlockAndLaunchPrivateSpaceSettings(context);
         } else {
             startActivity(new Intent(context, PrivateSpaceSetupActivity.class));
+            finish();
         }
     }
 
@@ -135,22 +130,54 @@
         if (mKeyguardManager == null) {
             mKeyguardManager = getSystemService(KeyguardManager.class);
         }
-        return  mKeyguardManager;
+        return mKeyguardManager;
     }
 
     private void onSetDeviceLockResult(@Nullable ActivityResult result) {
         if (result != null) {
             if (getKeyguardManager().isDeviceSecure()) {
                 onLockAuthentication(this);
+            } else {
+                finish();
             }
-            finish();
         }
     }
 
     private void onVerifyDeviceLock(@Nullable ActivityResult result) {
         if (result != null && result.getResultCode() == RESULT_OK) {
             onLockAuthentication(this);
+        } else {
+            finish();
+        }
+    }
+
+    private void unlockAndLaunchPrivateSpaceSettings(Context context) {
+        SubSettingLauncher privateSpaceSettings =
+                new SubSettingLauncher(context)
+                        .setDestination(PrivateSpaceDashboardFragment.class.getName())
+                        .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE)
+                        .setSourceMetricsCategory(SettingsEnums.PRIVATE_SPACE_SETTINGS);
+        if (mPrivateSpaceMaintainer.isPrivateSpaceLocked()) {
+            mPrivateSpaceMaintainer.unlockPrivateSpace(
+                    PendingIntent.getActivity(
+                                    context, /* requestCode */
+                                    0,
+                                    privateSpaceSettings.toIntent(),
+                                    PendingIntent.FLAG_IMMUTABLE)
+                            .getIntentSender());
+        } else {
+            privateSpaceSettings.launch();
         }
         finish();
     }
+
+    private void authenticatePrivateSpaceEntry() {
+        Intent credentialIntent = mPrivateSpaceMaintainer.getPrivateProfileLockCredentialIntent();
+        if (credentialIntent != null) {
+            mVerifyDeviceLock.launch(credentialIntent);
+        } else {
+            Log.e(TAG, "verifyCredentialIntent is null even though device lock is set");
+            finish();
+        }
+    }
 }
diff --git a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
index b8f140f..c565ace 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceMaintainer.java
@@ -25,6 +25,7 @@
 import android.app.KeyguardManager;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentSender;
 import android.content.pm.UserInfo;
 import android.os.Flags;
 import android.os.RemoteException;
@@ -241,6 +242,17 @@
         return false;
     }
 
+    /**
+     * Checks if private space exists and requests to disable quiet mode.
+     *
+     * @param intentSender target to start when the user is unlocked
+     */
+    public synchronized void unlockPrivateSpace(IntentSender intentSender) {
+        if (mUserHandle != null) {
+            mUserManager.requestQuietModeEnabled(false, mUserHandle, intentSender);
+        }
+    }
+
     /** Returns true if private space exists and is running, otherwise returns false */
     @VisibleForTesting
     synchronized boolean isPrivateProfileRunning() {