Merge "Settings ChooseLockscreen* dismiss in background." into main
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 0bf1255..714f3ee 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -201,6 +201,14 @@
         }
 
         @Override
+        public void onPause() {
+            super.onPause();
+            if (!getActivity().isChangingConfigurations() && !mWaitingForConfirmation) {
+                finish();
+            }
+        }
+
+        @Override
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             final Activity activity = getActivity();
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 800adb0..e74a2ff 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -219,6 +219,13 @@
         findViewById(R.id.content_parent).setFitsSystemWindows(false);
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
     }
+    @Override
+    public void onPause() {
+        super.onPause();
+        if (!isChangingConfigurations()) {
+            finish();
+        }
+    }
 
     public static class ChooseLockPasswordFragment extends InstrumentedFragment
             implements OnEditorActionListener, TextWatcher, SaveAndFinishWorker.Listener {
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 20d1e7d..f0c432e 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -98,6 +98,14 @@
         return modIntent;
     }
 
+    @Override
+    public void onPause() {
+        super.onPause();
+        if (!isChangingConfigurations()) {
+            finish();
+        }
+    }
+
     public static class IntentBuilder {
         private final Intent mIntent;
 
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index e625827..a099a39 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -54,7 +54,9 @@
 import android.provider.Settings.Global;
 
 import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
 import androidx.preference.Preference;
+import androidx.test.core.app.ActivityScenario;
 
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.LockscreenCredential;
@@ -613,15 +615,29 @@
                 mFragment.getString(R.string.face_unlock_set_unlock_password));
     }
 
+    @Test
+    public void activity_dismisses_InBackground() {
+        ActivityScenario<ChooseLockPassword> scenario =
+                ActivityScenario.launchActivityForResult(getChooseLockGenericIntent(null));
+        scenario.moveToState(Lifecycle.State.RESUMED);
+        scenario.moveToState(Lifecycle.State.CREATED);
+        assertThat(scenario.getResult()).isNotNull();
+    }
+
     private void initActivity(@Nullable Intent intent) {
+        final Intent theIntent = getChooseLockGenericIntent(intent);
+        // TODO(b/275023433) This presents the activity from being made 'visible` is workaround
+        mActivity = Robolectric.buildActivity(ChooseLockGeneric.InternalActivity.class, theIntent)
+                .create().start().postCreate(null).resume().get();
+        mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commitNow();
+    }
+
+    private Intent getChooseLockGenericIntent(@Nullable Intent intent) {
         if (intent == null) {
             intent = new Intent();
         }
         intent.putExtra(ChooseLockGeneric.CONFIRM_CREDENTIALS, false);
-        // TODO(b/275023433) This presents the activity from being made 'visible` is workaround
-        mActivity = Robolectric.buildActivity(ChooseLockGeneric.InternalActivity.class, intent)
-                .create().start().postCreate(null).resume().get();
-        mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commitNow();
+        return intent;
     }
 
     private static String capitalize(final String input) {
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
index dea936d..ed8179b 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
@@ -47,6 +47,9 @@
 import android.widget.CheckBox;
 import android.widget.TextView;
 
+import androidx.lifecycle.Lifecycle;
+import androidx.test.core.app.ActivityScenario;
+
 import com.android.internal.widget.LockscreenCredential;
 import com.android.settings.R;
 import com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment;
@@ -515,16 +518,31 @@
         assertThat(pinAutoConfirmOption.isChecked()).isFalse();
     }
 
+    @Test
+    public void activity_dismisses_InBackground() {
+        ActivityScenario<ChooseLockPassword> scenario =
+                ActivityScenario.launchActivityForResult(getLockPasswordIntent());
+        scenario.moveToState(Lifecycle.State.RESUMED);
+        scenario.moveToState(Lifecycle.State.CREATED);
+        assertThat(scenario.getResult()).isNotNull();
+    }
+
     private ChooseLockPassword setupActivityWithPinTypeAndDefaultPolicy() {
         PasswordPolicy policy = new PasswordPolicy();
         policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
 
         return buildChooseLockPasswordActivity(
-                new IntentBuilder(application)
-                        .setUserId(UserHandle.myUserId())
-                        .setPasswordType(PASSWORD_QUALITY_NUMERIC)
-                        .setPasswordRequirement(PASSWORD_COMPLEXITY_NONE, policy.getMinMetrics())
-                        .build());
+                getLockPasswordIntent());
+    }
+
+    private Intent getLockPasswordIntent() {
+        PasswordPolicy policy = new PasswordPolicy();
+        policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
+        return new IntentBuilder(application)
+                .setUserId(UserHandle.myUserId())
+                .setPasswordType(PASSWORD_QUALITY_NUMERIC)
+                .setPasswordRequirement(PASSWORD_COMPLEXITY_NONE, policy.getMinMetrics())
+                .build();
     }
 
     private ChooseLockPassword buildChooseLockPasswordActivity(Intent intent) {
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
index 7715c62..da12ee4 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
@@ -30,6 +30,9 @@
 import android.os.UserHandle;
 import android.view.View;
 
+import androidx.lifecycle.Lifecycle;
+import androidx.test.core.app.ActivityScenario;
+
 import com.android.internal.widget.LockPatternUtils;
 import com.android.internal.widget.LockscreenCredential;
 import com.android.settings.R;
@@ -137,16 +140,29 @@
                 R.string.lockpassword_draw_your_pattern_again_header));
     }
 
+    @Test
+    public void activity_dismisses_InBackground() {
+        ActivityScenario<ChooseLockPattern> scenario =
+                ActivityScenario.launchActivityForResult(getLockPatternIntent(false));
+        scenario.moveToState(Lifecycle.State.RESUMED);
+        scenario.moveToState(Lifecycle.State.CREATED);
+        assertThat(scenario.getResult()).isNotNull();
+    }
+
     private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
         return Robolectric.buildActivity(
-                ChooseLockPattern.class,
-                new IntentBuilder(application)
-                        .setUserId(UserHandle.myUserId())
-                        .setForFingerprint(addFingerprintExtra)
-                        .build())
+                        ChooseLockPattern.class,
+                        getLockPatternIntent(addFingerprintExtra))
                 .setup().get();
     }
 
+    private Intent getLockPatternIntent(boolean addFingerprintExtra) {
+        return new IntentBuilder(application)
+                .setUserId(UserHandle.myUserId())
+                .setForFingerprint(addFingerprintExtra)
+                .build();
+    }
+
     private LockscreenCredential createPattern(String patternString) {
         return LockscreenCredential.createPattern(LockPatternUtils.byteArrayToPattern(
                 patternString.getBytes()));