Autofill: tests Save UI is dismissed when new activity launches.

Test: cts-tradefed run commandAndExit cts-dev -m CtsAutoFillServiceTestCases -tandroid.autofillservice.cts.SimpleSaveActivityTest#testDismissSave_byLaunchingNewActivity
Test: cts-tradefed run commandAndExit cts-dev -m CtsAutoFillServiceTestCases -tandroid.autofillservice.cts.LoginActivityTest#testSaveGoesAwayWhenLaunchingNewActivity
Test: cts-tradefed run commandAndExit cts-dev -m CtsAutoFillServiceTestCases

Bug: 64693551

Change-Id: I958cdabfe4896e292d694d4aee932d2084d2217a
diff --git a/tests/autofillservice/src/android/autofillservice/cts/DismissType.java b/tests/autofillservice/src/android/autofillservice/cts/DismissType.java
index fd0cbd5..e8e7689 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/DismissType.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/DismissType.java
@@ -17,11 +17,15 @@
 
 /**
  * A simple enum for test cases where the Save UI is dismissed.
+ *
+ * <p><b>Note:</b> When new values are added to the enum, the equivalent tests must be added to
+ * both {@link LoginActivityTest} and {@link SimpleSaveActivityTest}.
  */
 enum DismissType {
     BACK_BUTTON,
     HOME_BUTTON,
     RECENTS_BUTTON,
     TOUCH_OUTSIDE,
-    FOCUS_OUTSIDE
+    FOCUS_OUTSIDE,
+    LAUNCH_ACTIVITY
 }
diff --git a/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java b/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java
index 0a0ba85..0911e19 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/LoginActivityTest.java
@@ -1194,12 +1194,7 @@
     @Test
     public void testSaveGoesAwayWhenTappingRecentsButton() throws Exception {
         // Launches new activity first...
-        final Context context = getContext();
-        final Intent intent = new Intent(context, CheckoutActivity.class);
-        intent.setFlags(
-                Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
-        context.startActivity(intent);
-        sUiBot.assertShownByRelativeId(CheckoutActivity.ID_ADDRESS);
+        startCheckoutActivityAsNewTask();
         try {
             // .. then the real activity being tested.
             sUiBot.switchAppsUsingRecents();
@@ -1216,6 +1211,15 @@
         saveGoesAway(DismissType.TOUCH_OUTSIDE);
     }
 
+    @Test
+    public void testSaveGoesAwayWhenLaunchingNewActivity() throws Exception {
+        try {
+            saveGoesAway(DismissType.LAUNCH_ACTIVITY);
+        } finally {
+            CheckoutActivity.finishIt();
+        }
+    }
+
     private void saveGoesAway(DismissType dismissType) throws Exception {
         enableService();
 
@@ -1261,6 +1265,9 @@
                 sUiBot.switchAppsUsingRecents();
                 sUiBot.assertShownByRelativeId(CheckoutActivity.ID_ADDRESS);
                 break;
+            case LAUNCH_ACTIVITY:
+                startCheckoutActivityAsNewTask();
+                break;
             default:
                 throw new IllegalArgumentException("invalid dismiss type: " + dismissType);
         }
@@ -3175,6 +3182,7 @@
                 .isEqualTo(5);
     }
 
+    @Test
     public void testAutofillLargeNumberOfDatasets() throws Exception {
         // Set service.
         enableService();
@@ -3214,4 +3222,13 @@
 
         // TODO: once it supports scrolling, selects the last dataset and asserts it's filled.
     }
+
+    private void startCheckoutActivityAsNewTask() {
+        final Context context = getContext();
+        final Intent intent = new Intent(context, CheckoutActivity.class);
+        intent.setFlags(
+                Intent.FLAG_ACTIVITY_NEW_DOCUMENT | Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
+        context.startActivity(intent);
+        sUiBot.assertShownByRelativeId(CheckoutActivity.ID_ADDRESS);
+    }
 }
diff --git a/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java b/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java
index debbedc..c82fa42 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java
@@ -630,7 +630,7 @@
         // Trigger save...
         mActivity.save();
 
-        // ...and make sure the snack bar is shown.
+        // ...and make sure the snack bar is not shown.
         sUiBot.assertSaveNotShowing(SAVE_DATA_TYPE_ADDRESS);
     }
 
diff --git a/tests/autofillservice/src/android/autofillservice/cts/SimpleSaveActivityTest.java b/tests/autofillservice/src/android/autofillservice/cts/SimpleSaveActivityTest.java
index 542e3a6..5f7713c 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/SimpleSaveActivityTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/SimpleSaveActivityTest.java
@@ -179,11 +179,7 @@
     @Test
     public void testDismissSave_byTappingRecents() throws Exception {
         // Launches a different activity first.
-        final Intent intent = new Intent(mContext, WelcomeActivity.class);
-        intent.setFlags(
-                Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
-        mContext.startActivity(intent);
-        WelcomeActivity.assertShowingDefaultMessage(sUiBot);
+        startWelcomeActivityOnNewTask();
 
         // Then launches the main activity.
         startActivity(true);
@@ -193,6 +189,16 @@
         dismissSaveTest(DismissType.RECENTS_BUTTON);
     }
 
+    @Test
+    public void testDismissSave_byLaunchingNewActivity() throws Exception {
+        startActivity();
+        try {
+            dismissSaveTest(DismissType.LAUNCH_ACTIVITY);
+        } finally {
+            WelcomeActivity.finishIt();
+        }
+    }
+
     private void dismissSaveTest(DismissType dismissType) throws Exception {
         // Set service.
         enableService();
@@ -233,9 +239,20 @@
                 sUiBot.switchAppsUsingRecents();
                 WelcomeActivity.assertShowingDefaultMessage(sUiBot);
                 break;
+            case LAUNCH_ACTIVITY:
+                startWelcomeActivityOnNewTask();
+                break;
             default:
                 throw new IllegalArgumentException("invalid dismiss type: " + dismissType);
         }
         sUiBot.assertSaveNotShowing(SAVE_DATA_TYPE_GENERIC);
     }
+
+    private void startWelcomeActivityOnNewTask() throws Exception {
+        final Intent intent = new Intent(mContext, WelcomeActivity.class);
+        intent.setFlags(
+                Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+        mContext.startActivity(intent);
+        WelcomeActivity.assertShowingDefaultMessage(sUiBot);
+    }
 }