Merge "Allow Watch Unlock to exit back to Device Unlock settings." into main
diff --git a/aconfig/settings_biometrics_framework_flag_declarations.aconfig b/aconfig/settings_biometrics_framework_flag_declarations.aconfig
index e787da0..e81c68e 100644
--- a/aconfig/settings_biometrics_framework_flag_declarations.aconfig
+++ b/aconfig/settings_biometrics_framework_flag_declarations.aconfig
@@ -14,3 +14,10 @@
   description: "This flag enables or disables the Fingerprint v2 enrollment"
   bug: "295206723"
 }
+
+flag {
+  name: "active_unlock_finish_parent"
+  namespace: "biometrics_framework"
+  description: "This flag enables the Active Unlock settings activity to finish its parent activity"
+  bug: "343576960"
+}
diff --git a/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java b/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java
index 671a5b6..7b3a724 100644
--- a/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java
+++ b/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java
@@ -24,14 +24,19 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
 import androidx.annotation.Nullable;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
+import com.android.settings.biometrics.BiometricEnrollBase;
 import com.android.settings.biometrics.activeunlock.ActiveUnlockContentListener.OnContentChangedListener;
 import com.android.settings.biometrics.activeunlock.ActiveUnlockDeviceNameListener;
 import com.android.settings.biometrics.activeunlock.ActiveUnlockRequireBiometricSetup;
 import com.android.settings.biometrics.activeunlock.ActiveUnlockStatusUtils;
+import com.android.settings.flags.Flags;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 
@@ -52,6 +57,10 @@
     private CombinedBiometricStatusUtils mCombinedBiometricStatusUtils;
     @Nullable private ActiveUnlockDeviceNameListener mActiveUnlockDeviceNameListener;
 
+    private final ActivityResultLauncher<Intent> mActiveUnlockPreferenceLauncher =
+            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+                    this::onActiveUnlockPreferenceResult);
+
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
@@ -158,12 +167,25 @@
             intent = mActiveUnlockStatusUtils.getIntent();
         }
         if (intent != null) {
-            startActivityForResult(intent, ACTIVE_UNLOCK_REQUEST);
+            if (Flags.activeUnlockFinishParent()) {
+                mActiveUnlockPreferenceLauncher.launch(intent);
+            } else {
+                startActivityForResult(intent, ACTIVE_UNLOCK_REQUEST);
+            }
         }
         return true;
 
     }
 
+    private void onActiveUnlockPreferenceResult(@Nullable ActivityResult result) {
+        if (result != null && result.getResultCode() == BiometricEnrollBase.RESULT_TIMEOUT) {
+            mDoNotFinishActivity = false;
+            // When "Watch Unlock" is closed due to entering onStop(),
+            // "Face & Fingerprint Unlock" shall also close itself and back to "Security" page.
+            finish();
+        }
+    }
+
     @Override
     protected String getUseAnyBiometricSummary() {
         // either Active Unlock is not enabled or no device is enrolled.