Adding wellbeing toast test

Bug: 130914022
Change-Id: I777440884c122ec040e5e00bfbed41f2eb86b5b0
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/DigitalWellBeingToast.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/DigitalWellBeingToast.java
index b9791bf..204dd56 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/DigitalWellBeingToast.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/DigitalWellBeingToast.java
@@ -32,7 +32,6 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
@@ -69,6 +68,10 @@
         mLauncherApps = context.getSystemService(LauncherApps.class);
     }
 
+    public TextView getTextView() {
+        return mText;
+    }
+
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
index ec0112d..05fe2d0 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
@@ -212,6 +212,10 @@
         return mMenuView;
     }
 
+    public DigitalWellBeingToast getDigitalWellBeingToast() {
+        return mDigitalWellBeingToast;
+    }
+
     /**
      * Updates this task view to the given {@param task}.
      */
diff --git a/quickstep/tests/src/com/android/quickstep/DigitalWellBeingToastTest.java b/quickstep/tests/src/com/android/quickstep/DigitalWellBeingToastTest.java
new file mode 100644
index 0000000..aa11384
--- /dev/null
+++ b/quickstep/tests/src/com/android/quickstep/DigitalWellBeingToastTest.java
@@ -0,0 +1,76 @@
+package com.android.quickstep;
+
+import static androidx.test.InstrumentationRegistry.getInstrumentation;
+
+import static com.android.launcher3.LauncherState.OVERVIEW;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.app.PendingIntent;
+import android.app.usage.UsageStatsManager;
+import android.content.Intent;
+
+import com.android.launcher3.Launcher;
+import com.android.quickstep.views.DigitalWellBeingToast;
+import com.android.quickstep.views.RecentsView;
+import com.android.quickstep.views.TaskView;
+
+import org.junit.Test;
+
+import java.time.Duration;
+
+public class DigitalWellBeingToastTest extends AbstractQuickStepTest {
+    private static final String CALCULATOR_PACKAGE =
+            resolveSystemApp(Intent.CATEGORY_APP_CALCULATOR);
+
+    @Test
+    public void testToast() throws Exception {
+        final UsageStatsManager usageStatsManager =
+                mTargetContext.getSystemService(UsageStatsManager.class);
+        final int observerId = 0;
+
+        getInstrumentation().getUiAutomation().adoptShellPermissionIdentity();
+        try {
+            final String[] packages = new String[]{CALCULATOR_PACKAGE};
+
+            // Set time limit for app.
+            usageStatsManager.registerAppUsageLimitObserver(observerId, packages,
+                    Duration.ofSeconds(600), Duration.ofSeconds(300),
+                    PendingIntent.getActivity(mTargetContext, -1, new Intent(), 0));
+
+            mLauncher.pressHome();
+            final DigitalWellBeingToast toast = getToast();
+
+            assertTrue("Toast is not visible", toast.isShown());
+            assertEquals("Toast text: ", "5 minutes left today", toast.getTextView().getText());
+
+            // Unset time limit for app.
+            usageStatsManager.unregisterAppUsageLimitObserver(observerId);
+
+            mLauncher.pressHome();
+            assertFalse("Toast is visible", getToast().isShown());
+        } finally {
+            usageStatsManager.unregisterAppUsageLimitObserver(observerId);
+            getInstrumentation().getUiAutomation().dropShellPermissionIdentity();
+        }
+    }
+
+    private DigitalWellBeingToast getToast() {
+        executeOnLauncher(launcher -> launcher.getStateManager().goToState(OVERVIEW));
+        waitForState("Launcher internal state didn't switch to Overview", OVERVIEW);
+        waitForLauncherCondition("No latest task", launcher -> getLatestTask(launcher) != null);
+
+        return getFromLauncher(launcher -> {
+            final TaskView task = getLatestTask(launcher);
+            assertTrue("Latest task is not Calculator",
+                    CALCULATOR_PACKAGE.equals(task.getTask().getTopComponent().getPackageName()));
+            return task.getDigitalWellBeingToast();
+        });
+    }
+
+    private TaskView getLatestTask(Launcher launcher) {
+        return launcher.<RecentsView>getOverviewPanel().getTaskViewAt(0);
+    }
+}
diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
index ab2808d..71e7880 100644
--- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
+++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java
@@ -361,7 +361,7 @@
                 mDevice.wait(Until.hasObject(By.pkg(packageName).depth(0)), LONG_WAIT_TIME_MS));
     }
 
-    protected String resolveSystemApp(String category) {
+    protected static String resolveSystemApp(String category) {
         return getInstrumentation().getContext().getPackageManager().resolveActivity(
                 new Intent(Intent.ACTION_MAIN).addCategory(category),
                 PackageManager.MATCH_SYSTEM_ONLY).