summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java12
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java22
2 files changed, 29 insertions, 5 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java b/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java
index fa41c8349540..f9dc0e4d090e 100644
--- a/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java
+++ b/packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java
@@ -91,8 +91,9 @@ public class SuggestionParser {
// Shared prefs keys for storing dismissed state.
// Index into current dismissed state.
+ @VisibleForTesting
+ static final String DISMISS_INDEX = "_dismiss_index";
public static final String SETUP_TIME = "_setup_time";
- private static final String DISMISS_INDEX = "_dismiss_index";
private static final String IS_DISMISSED = "_is_dismissed";
// Default dismiss control for smart suggestions.
@@ -353,7 +354,8 @@ public class SuggestionParser {
return elapsedTime > category.exclusiveExpireDaysInMillis;
}
- private boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) {
+ @VisibleForTesting
+ boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) {
String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled);
if (dismissControl == null) {
return false;
@@ -370,7 +372,11 @@ public class SuggestionParser {
return false;
}
int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0);
- int currentDismiss = parseDismissString(dismissControl)[index];
+ int[] dismissRules = parseDismissString(dismissControl);
+ if (dismissRules.length <= index) {
+ return true;
+ }
+ int currentDismiss = dismissRules[index];
long time = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0), currentDismiss);
if (System.currentTimeMillis() >= time) {
// Dismiss timeout has passed, undismiss it.
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java
index 60933cfbbbda..83911360bdfe 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java
@@ -16,6 +16,8 @@
package com.android.settingslib.suggestions;
+import static com.google.common.truth.Truth.assertThat;
+
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -42,8 +44,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import static com.google.common.truth.Truth.assertThat;
-
@RunWith(SettingLibRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class SuggestionParserTest {
@@ -190,6 +190,24 @@ public class SuggestionParserTest {
assertThat(sl.getSuggestionForCategory("category2")).hasSize(1);
}
+ @Test
+ public void isSuggestionDismissed_mismatchRule_shouldDismiss() {
+ final Tile suggestion = new Tile();
+ suggestion.metaData = new Bundle();
+ suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3");
+ suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls"));
+
+ // Dismiss suggestion when smart suggestion is not enabled.
+ mSuggestionParser.dismissSuggestion(suggestion, false /* isSmartSuggestionEnabled */);
+ final String suggestionKey = suggestion.intent.getComponent().flattenToShortString();
+ // And point to last rule in dismiss control
+ mPrefs.edit().putInt(suggestionKey + SuggestionParser.DISMISS_INDEX, 2).apply();
+
+ // Turn on smart suggestion, and check if suggestion is enabled.
+ assertThat(mSuggestionParser.isDismissed(suggestion, true /* isSmartSuggestionEnabled */))
+ .isTrue();
+ }
+
private void readAndDismissSuggestion(boolean isSmartSuggestionEnabled) {
mSuggestionsBeforeDismiss = new ArrayList<>();
mSuggestionsAfterDismiss = new ArrayList<>();