Add support to show first impression type suggestions

- Add FIRST_IMPRESSION type in suggestion order list.
- Make rule changes for a few suggestions.

Bug: 37947647
Test: manual

Change-Id: I2101f5e0f6424723bacc9f5febf2ffaab9398896
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2852b6b..11fd8ac 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -766,9 +766,9 @@
                 android:icon="@drawable/ic_settings_notifications"
                 android:exported="true"
                 android:taskAffinity="">
-            <intent-filter android:priority="1">
+            <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.SETTINGS_ONLY" />
+                <category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.ZenModeSettings" />
@@ -792,7 +792,7 @@
                   android:label="@string/wallpaper_settings_title"
                   android:icon="@drawable/ic_wallpaper"
                   android:theme="@android:style/Theme.NoDisplay">
-            <intent-filter android:priority="1">
+            <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.suggested.category.SETTINGS_ONLY" />
             </intent-filter>
@@ -1561,10 +1561,10 @@
             android:icon="@drawable/ic_suggestion_fingerprint">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.SETTINGS_ONLY" />
+                <category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
             </intent-filter>
             <meta-data android:name="com.android.settings.dismiss"
-                android:value="10,30" />
+                android:value="4,8,30" />
             <meta-data android:name="com.android.settings.require_feature"
                 android:value="android.hardware.fingerprint" />
             <meta-data android:name="com.android.settings.title"
@@ -2769,7 +2769,7 @@
                   android:taskAffinity="">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.SETTINGS_ONLY" />
+                <category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.WifiCallingSettings" />
@@ -3082,10 +3082,16 @@
             android:label="@string/camera_lift_trigger_title"
             android:icon="@drawable/ic_settings_camera"
             android:enabled="@bool/config_cameraLiftTriggerAvailable">
-            <intent-filter android:priority="1">
+            <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="com.android.settings.suggested.category.GESTURE" />
             </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.dismiss"
+                       android:value="3,7,30" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.gestures.CameraLiftTriggerSettings"/>
             <meta-data android:name="com.android.settings.title"
diff --git a/res/xml/suggestion_ordering.xml b/res/xml/suggestion_ordering.xml
index f02ac15..f0388a3 100644
--- a/res/xml/suggestion_ordering.xml
+++ b/res/xml/suggestion_ordering.xml
@@ -16,16 +16,20 @@
 
 <optional-steps>
     <step category="com.android.settings.suggested.category.DEFERRED_SETUP"
-        exclusive="true" />
+          exclusive="true" />
+    <step category="com.android.settings.suggested.category.FIRST_IMPRESSION"
+          exclusiveExpireDays="7"
+          exclusive="true"
+          multiple="true" />
     <step category="com.android.settings.suggested.category.LOCK_SCREEN" />
     <step category="com.android.settings.suggested.category.TRUST_AGENT" />
     <step category="com.android.settings.suggested.category.EMAIL" />
     <step category="com.android.settings.suggested.category.PARTNER_ACCOUNT"
-        multiple="true" />
+          multiple="true" />
     <step category="com.android.settings.suggested.category.GESTURE" />
     <step category="com.android.settings.suggested.category.HOTWORD" />
     <step category="com.android.settings.suggested.category.DEFAULT"
-        multiple="true" />
+          multiple="true" />
     <step category="com.android.settings.suggested.category.SETTINGS_ONLY"
-        multiple="true" />
+          multiple="true" />
 </optional-steps>
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index f3f8af9..01097bc 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -78,7 +78,6 @@
                 suggestion.intent.getComponent(),
                 PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                 PackageManager.DONT_KILL_APP);
-        parser.markCategoryDone(suggestion.category);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
index 6183acc..9eddd04 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
@@ -111,9 +111,9 @@
     public void getSuggestionIdentifier_nullContext_shouldNotCrash() {
         final Tile suggestion = new Tile();
         suggestion.intent = new Intent()
-            .setClassName(RuntimeEnvironment.application.getPackageName(), "123");
+                .setClassName(RuntimeEnvironment.application.getPackageName(), "123");
         assertThat(mProvider.getSuggestionIdentifier(null, suggestion))
-            .isNotEmpty();
+                .isNotEmpty();
     }
 
     @Test
@@ -152,6 +152,5 @@
                 .setComponentEnabledSetting(mSuggestion.intent.getComponent(),
                         PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                         PackageManager.DONT_KILL_APP);
-        verify(mSuggestionParser).markCategoryDone(mSuggestion.category);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
index ad035bd..86f3bd6 100644
--- a/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
+++ b/tests/robotests/src/com/android/settings/suggestions/SettingsSuggestionsTest.java
@@ -16,17 +16,13 @@
 
 package com.android.settings.suggestions;
 
-import static com.android.settings.TestConfig.MANIFEST_PATH;
-import static com.google.common.truth.Truth.assertThat;
-
 import android.annotation.StringRes;
 import android.content.Context;
+
 import com.android.settings.R;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RuntimeEnvironment;
@@ -36,59 +32,78 @@
 import org.robolectric.manifest.IntentFilterData;
 import org.robolectric.shadows.ShadowApplication;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static com.android.settings.TestConfig.MANIFEST_PATH;
+import static com.google.common.truth.Truth.assertThat;
+
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
 public class SettingsSuggestionsTest {
 
-  @Test
-  public void zenModeAutomationSuggestion_isValid() {
-    assertSuggestionEquals("Settings$ZenModeAutomationSuggestionActivity",
-        R.string.zen_mode_automation_suggestion_title,
-        R.string.zen_mode_automation_suggestion_summary);
-  }
+    private static final String CATEGORY_FIRST_IMPRESSION =
+            "com.android.settings.suggested.category.FIRST_IMPRESSION";
 
-  @Test
-  public void wallpaperSuggestion_isValid() {
-    assertSuggestionEquals("com.android.settings.wallpaper.WallpaperSuggestionActivity",
-        R.string.wallpaper_suggestion_title, R.string.wallpaper_suggestion_summary);
-  }
+    private static final String CATEGORY_SETTINGS_ONLY =
+            "com.android.settings.suggested.category.SETTINGS_ONLY";
 
-  @Test
-  public void fingerprintSuggestion_isValid() {
-    assertSuggestionEquals("com.android.settings.Settings$FingerprintSuggestionActivity",
-        R.string.suggestion_additional_fingerprints,
-        R.string.suggestion_additional_fingerprints_summary);
-  }
-
-  @Test
-  public void wifiCallingSuggestion_isValid() {
-    assertSuggestionEquals("Settings$WifiCallingSuggestionActivity",
-        R.string.wifi_calling_suggestion_title, R.string.wifi_calling_suggestion_summary);
-  }
-
-  private void assertSuggestionEquals(String activityName, @StringRes int title,
-      @StringRes int summary) {
-    final AndroidManifest androidManifest = ShadowApplication.getInstance().getAppManifest();
-    final ActivityData activityData = androidManifest.getActivityData(activityName);
-    final Map<String, Object> metaData = activityData.getMetaData().getValueMap();
-    final Context context = RuntimeEnvironment.application;
-    final String expectedTitle = context.getString(title);
-    final String expectedSummary = context.getString(summary);
-
-    final String pName= context.getPackageName();
-    final String actualTitle = context.getString(context.getResources().getIdentifier(
-        ((String) metaData.get("com.android.settings.title")).substring(8), "string", pName));
-    final String actualSummary = context.getString(context.getResources().getIdentifier(
-        ((String) metaData.get("com.android.settings.summary")).substring(8), "string", pName));
-    assertThat(actualTitle).isEqualTo(expectedTitle);
-    assertThat(actualSummary).isEqualTo(expectedSummary);
-
-    final List<IntentFilterData> intentFilters = activityData.getIntentFilters();
-    final List<String> categories = new ArrayList<>();
-    for (IntentFilterData intentFilter : intentFilters) {
-      categories.addAll(intentFilter.getCategories());
+    @Test
+    public void zenModeAutomationSuggestion_isValid() {
+        assertSuggestionEquals("Settings$ZenModeAutomationSuggestionActivity",
+                CATEGORY_FIRST_IMPRESSION,
+                R.string.zen_mode_automation_suggestion_title,
+                R.string.zen_mode_automation_suggestion_summary);
     }
 
-    assertThat(categories).contains("com.android.settings.suggested.category.SETTINGS_ONLY");
-  }
+    @Test
+    public void wallpaperSuggestion_isValid() {
+        assertSuggestionEquals("com.android.settings.wallpaper.WallpaperSuggestionActivity",
+                CATEGORY_SETTINGS_ONLY,
+                R.string.wallpaper_suggestion_title, R.string.wallpaper_suggestion_summary);
+    }
+
+    @Test
+    public void fingerprintSuggestion_isValid() {
+        assertSuggestionEquals("com.android.settings.Settings$FingerprintSuggestionActivity",
+                CATEGORY_FIRST_IMPRESSION,
+                R.string.suggestion_additional_fingerprints,
+                R.string.suggestion_additional_fingerprints_summary);
+    }
+
+    @Test
+    public void wifiCallingSuggestion_isValid() {
+        assertSuggestionEquals("Settings$WifiCallingSuggestionActivity",
+                CATEGORY_FIRST_IMPRESSION,
+                R.string.wifi_calling_suggestion_title, R.string.wifi_calling_suggestion_summary);
+    }
+
+    private void assertSuggestionEquals(String activityName, String category, @StringRes int title,
+            @StringRes int summary) {
+        final AndroidManifest androidManifest = ShadowApplication.getInstance().getAppManifest();
+        final ActivityData activityData = androidManifest.getActivityData(activityName);
+        final Map<String, Object> metaData = activityData.getMetaData().getValueMap();
+        final Context context = RuntimeEnvironment.application;
+        final String expectedTitle = context.getString(title);
+        final String expectedSummary = context.getString(summary);
+
+        final String pName = context.getPackageName();
+        final String actualTitle = context.getString(context.getResources().getIdentifier(
+                ((String) metaData.get("com.android.settings.title")).substring(8), "string",
+                pName));
+        final String actualSummary = context.getString(context.getResources().getIdentifier(
+                ((String) metaData.get("com.android.settings.summary")).substring(8), "string",
+                pName));
+        assertThat(actualTitle).isEqualTo(expectedTitle);
+        assertThat(actualSummary).isEqualTo(expectedSummary);
+
+        final List<IntentFilterData> intentFilters = activityData.getIntentFilters();
+        final List<String> categories = new ArrayList<>();
+        for (IntentFilterData intentFilter : intentFilters) {
+            categories.addAll(intentFilter.getCategories());
+        }
+
+        assertThat(categories).contains(category);
+    }
 }