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);
+ }
}