Merge "Adjust recents onboarding logic" into pi-dev
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java
index 127361a..d9359a4 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsOnboarding.java
@@ -21,6 +21,7 @@
 
 import android.annotation.TargetApi;
 import android.app.ActivityManager;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -65,6 +66,8 @@
     private static final long SHOW_HIDE_DURATION_MS = 300;
     // Don't show the onboarding until the user has launched this number of apps.
     private static final int SHOW_ON_APP_LAUNCH = 2;
+    // After explicitly dismissing, show again after launching this number of apps.
+    private static final int SHOW_ON_APP_LAUNCH_AFTER_DISMISS = 5;
 
     private final Context mContext;
     private final WindowManager mWindowManager;
@@ -84,6 +87,9 @@
     private boolean mTaskListenerRegistered;
     private boolean mLayoutAttachedToWindow;
     private boolean mBackgroundIsLight;
+    private int mLastTaskId;
+    private boolean mHasDismissed;
+    private int mNumAppsLaunchedSinceDismiss;
 
     private final SysUiTaskStackChangeListener mTaskListener = new SysUiTaskStackChangeListener() {
         @Override
@@ -94,14 +100,26 @@
                 hide(true);
                 return;
             }
+            if (info.id == mLastTaskId) {
+                // We only count launches that go to a new task.
+                return;
+            }
             int activityType = info.configuration.windowConfiguration.getActivityType();
-            int numAppsLaunched = Prefs.getInt(mContext, Prefs.Key.NUM_APPS_LAUNCHED, 0);
             if (activityType == ACTIVITY_TYPE_STANDARD) {
+                mLastTaskId = info.id;
+                int numAppsLaunched = mHasDismissed ? mNumAppsLaunchedSinceDismiss
+                        : Prefs.getInt(mContext, Prefs.Key.NUM_APPS_LAUNCHED, 0);
+                int showOnAppLaunch = mHasDismissed ? SHOW_ON_APP_LAUNCH_AFTER_DISMISS
+                        : SHOW_ON_APP_LAUNCH;
                 numAppsLaunched++;
-                if (numAppsLaunched >= SHOW_ON_APP_LAUNCH) {
+                if (numAppsLaunched >= showOnAppLaunch) {
                     show();
                 } else {
-                    Prefs.putInt(mContext, Prefs.Key.NUM_APPS_LAUNCHED, numAppsLaunched);
+                    if (mHasDismissed) {
+                        mNumAppsLaunchedSinceDismiss = numAppsLaunched;
+                    } else {
+                        Prefs.putInt(mContext, Prefs.Key.NUM_APPS_LAUNCHED, numAppsLaunched);
+                    }
                 }
             } else {
                 hide(false);
@@ -115,6 +133,7 @@
         public void onViewAttachedToWindow(View view) {
             if (view == mLayout) {
                 mLayoutAttachedToWindow = true;
+                mHasDismissed = false;
             }
         }
 
@@ -149,7 +168,11 @@
 
         mLayout.addOnAttachStateChangeListener(mOnAttachStateChangeListener);
         mLayout.setBackground(mBackgroundDrawable);
-        mDismissView.setOnClickListener(v -> hide(true));
+        mDismissView.setOnClickListener(v -> {
+            hide(true);
+            mHasDismissed = true;
+            mNumAppsLaunchedSinceDismiss = 0;
+        });
 
         if (RESET_PREFS_FOR_DEBUG) {
             Prefs.putBoolean(mContext, Prefs.Key.HAS_SEEN_RECENTS_ONBOARDING, false);
@@ -180,6 +203,8 @@
             ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mTaskListener);
             mTaskListenerRegistered = false;
         }
+        mHasDismissed = false;
+        mNumAppsLaunchedSinceDismiss = 0;
         hide(false);
     }