Loading packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java +29 −44 Original line number Original line Diff line number Diff line Loading @@ -91,28 +91,25 @@ public class SuggestionParser { // Shared prefs keys for storing dismissed state. // Shared prefs keys for storing dismissed state. // Index into current dismissed state. // Index into current dismissed state. @VisibleForTesting static final String DISMISS_INDEX = "_dismiss_index"; public static final String SETUP_TIME = "_setup_time"; public static final String SETUP_TIME = "_setup_time"; private static final String IS_DISMISSED = "_is_dismissed"; private static final String IS_DISMISSED = "_is_dismissed"; // Default dismiss control for smart suggestions. // Default dismiss control for smart suggestions. private static final String DEFAULT_SMART_DISMISS_CONTROL = "0,10"; private static final String DEFAULT_SMART_DISMISS_CONTROL = "0"; private final Context mContext; private final Context mContext; private final List<SuggestionCategory> mSuggestionList; private final List<SuggestionCategory> mSuggestionList; private final ArrayMap<Pair<String, String>, Tile> mAddCache = new ArrayMap<>(); private final ArrayMap<Pair<String, String>, Tile> mAddCache = new ArrayMap<>(); private final SharedPreferences mSharedPrefs; private final SharedPreferences mSharedPrefs; private final String mSmartDismissControl; private final String mDefaultDismissControl; public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml, public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml, String smartDismissControl) { String defaultDismissControl) { this( this( context, context, sharedPrefs, sharedPrefs, (List<SuggestionCategory>) new SuggestionOrderInflater(context).parse(orderXml), (List<SuggestionCategory>) new SuggestionOrderInflater(context).parse(orderXml), smartDismissControl); defaultDismissControl); } } public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml) { public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml) { Loading @@ -124,11 +121,11 @@ public class SuggestionParser { Context context, Context context, SharedPreferences sharedPrefs, SharedPreferences sharedPrefs, List<SuggestionCategory> suggestionList, List<SuggestionCategory> suggestionList, String smartDismissControl) { String defaultDismissControl) { mContext = context; mContext = context; mSuggestionList = suggestionList; mSuggestionList = suggestionList; mSharedPrefs = sharedPrefs; mSharedPrefs = sharedPrefs; mSmartDismissControl = smartDismissControl; mDefaultDismissControl = defaultDismissControl; } } public SuggestionList getSuggestions(boolean isSmartSuggestionEnabled) { public SuggestionList getSuggestions(boolean isSmartSuggestionEnabled) { Loading Loading @@ -161,25 +158,16 @@ public class SuggestionParser { return suggestionList; return suggestionList; } } public boolean dismissSuggestion(Tile suggestion) { return dismissSuggestion(suggestion, false); } /** /** * Dismisses a suggestion, returns true if the suggestion has no more dismisses left and should * Dismisses a suggestion, returns true if the suggestion has no more dismisses left and should * be disabled. * be disabled. */ */ public boolean dismissSuggestion(Tile suggestion, boolean isSmartSuggestionEnabled) { public boolean dismissSuggestion(Tile suggestion) { String keyBase = suggestion.intent.getComponent().flattenToShortString(); final String keyBase = suggestion.intent.getComponent().flattenToShortString(); int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0); String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled); if (dismissControl == null || parseDismissString(dismissControl).length == index) { return true; } mSharedPrefs.edit() mSharedPrefs.edit() .putBoolean(keyBase + IS_DISMISSED, true) .putBoolean(keyBase + IS_DISMISSED, true) .commit(); .commit(); return false; return true; } } @VisibleForTesting @VisibleForTesting Loading Loading @@ -357,32 +345,29 @@ public class SuggestionParser { @VisibleForTesting @VisibleForTesting boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) { boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) { String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled); String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled); if (dismissControl == null) { return false; } String keyBase = suggestion.intent.getComponent().flattenToShortString(); String keyBase = suggestion.intent.getComponent().flattenToShortString(); if (!mSharedPrefs.contains(keyBase + SETUP_TIME)) { if (!mSharedPrefs.contains(keyBase + SETUP_TIME)) { mSharedPrefs.edit() mSharedPrefs.edit() .putLong(keyBase + SETUP_TIME, System.currentTimeMillis()) .putLong(keyBase + SETUP_TIME, System.currentTimeMillis()) .commit(); .commit(); } } // Default to dismissed, so that we can have suggestions that only first appear after // Check if it's already manually dismissed // some number of days. final boolean isDismissed = mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, false); if (!mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, true)) { if (isDismissed) { return false; } int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0); int[] dismissRules = parseDismissString(dismissControl); if (dismissRules.length <= index) { return true; return true; } } int currentDismiss = dismissRules[index]; if (dismissControl == null) { long time = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0), currentDismiss); return false; if (System.currentTimeMillis() >= time) { } // Parse when suggestion should first appear. return true to artificially hide suggestion // before then. int firstAppearDay = parseDismissString(dismissControl); long firstAppearDayInMs = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0), firstAppearDay); if (System.currentTimeMillis() >= firstAppearDayInMs) { // Dismiss timeout has passed, undismiss it. // Dismiss timeout has passed, undismiss it. mSharedPrefs.edit() mSharedPrefs.edit() .putBoolean(keyBase + IS_DISMISSED, false) .putBoolean(keyBase + IS_DISMISSED, false) .putInt(keyBase + DISMISS_INDEX, index + 1) .commit(); .commit(); return false; return false; } } Loading @@ -394,18 +379,18 @@ public class SuggestionParser { return startTime + days; return startTime + days; } } private int[] parseDismissString(String dismissControl) { /** String[] dismissStrs = dismissControl.split(","); * Parse the first int from a string formatted as "0,1,2..." int[] dismisses = new int[dismissStrs.length]; * The value means suggestion should first appear on Day X. for (int i = 0; i < dismissStrs.length; i++) { */ dismisses[i] = Integer.parseInt(dismissStrs[i]); private int parseDismissString(String dismissControl) { } final String[] dismissStrs = dismissControl.split(","); return dismisses; return Integer.parseInt(dismissStrs[0]); } } private String getDismissControl(Tile suggestion, boolean isSmartSuggestionEnabled) { private String getDismissControl(Tile suggestion, boolean isSmartSuggestionEnabled) { if (isSmartSuggestionEnabled) { if (isSmartSuggestionEnabled) { return mSmartDismissControl; return mDefaultDismissControl; } else { } else { return suggestion.metaData.getString(META_DATA_DISMISS_CONTROL); return suggestion.metaData.getString(META_DATA_DISMISS_CONTROL); } } Loading packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java +9 −19 Original line number Original line Diff line number Diff line Loading @@ -83,7 +83,7 @@ public class SuggestionParserTest { mSuggestionParser = new SuggestionParser(mContext, mPrefs, mSuggestionParser = new SuggestionParser(mContext, mPrefs, Arrays.asList(mMultipleCategory, mExclusiveCategory, mExpiredExclusiveCategory), Arrays.asList(mMultipleCategory, mExclusiveCategory, mExpiredExclusiveCategory), "0,0"); "0"); ResolveInfo info1 = TileUtilsTest.newInfo(true, null); ResolveInfo info1 = TileUtilsTest.newInfo(true, null); info1.activityInfo.packageName = "pkg"; info1.activityInfo.packageName = "pkg"; Loading @@ -109,17 +109,12 @@ public class SuggestionParserTest { } } @Test @Test public void testDismissSuggestion_withoutSmartSuggestion() { public void dismissSuggestion_shouldDismiss() { assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, false)).isTrue(); assertThat(mSuggestionParser.dismissSuggestion(mSuggestion)).isTrue(); } } @Test @Test public void testDismissSuggestion_withSmartSuggestion() { public void testGetSuggestions_withoutSmartSuggestions_shouldDismiss() { assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, true)).isFalse(); } @Test public void testGetSuggestions_withoutSmartSuggestions() { readAndDismissSuggestion(false); readAndDismissSuggestion(false); mSuggestionParser.readSuggestions(mMultipleCategory, mSuggestionsAfterDismiss, false); mSuggestionParser.readSuggestions(mMultipleCategory, mSuggestionsAfterDismiss, false); assertThat(mSuggestionsBeforeDismiss).hasSize(2); assertThat(mSuggestionsBeforeDismiss).hasSize(2); Loading @@ -128,11 +123,10 @@ public class SuggestionParserTest { } } @Test @Test public void testGetSuggestions_withSmartSuggestions() { public void testGetSuggestions_withSmartSuggestions_shouldDismiss() { readAndDismissSuggestion(true); readAndDismissSuggestion(true); assertThat(mSuggestionsBeforeDismiss).hasSize(2); assertThat(mSuggestionsBeforeDismiss).hasSize(2); assertThat(mSuggestionsAfterDismiss).hasSize(2); assertThat(mSuggestionsAfterDismiss).hasSize(1); assertThat(mSuggestionsBeforeDismiss).isEqualTo(mSuggestionsAfterDismiss); } } @Test @Test Loading Loading @@ -191,19 +185,15 @@ public class SuggestionParserTest { } } @Test @Test public void isSuggestionDismissed_mismatchRule_shouldDismiss() { public void isSuggestionDismissed_dismissedSuggestion_shouldReturnTrue() { final Tile suggestion = new Tile(); final Tile suggestion = new Tile(); suggestion.metaData = new Bundle(); suggestion.metaData = new Bundle(); suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3"); suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3"); suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls")); suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls")); // Dismiss suggestion when smart suggestion is not enabled. // Dismiss suggestion when smart suggestion is not enabled. mSuggestionParser.dismissSuggestion(suggestion, false /* isSmartSuggestionEnabled */); mSuggestionParser.dismissSuggestion(suggestion); 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 */)) assertThat(mSuggestionParser.isDismissed(suggestion, true /* isSmartSuggestionEnabled */)) .isTrue(); .isTrue(); } } Loading @@ -215,7 +205,7 @@ public class SuggestionParserTest { mMultipleCategory, mSuggestionsBeforeDismiss, isSmartSuggestionEnabled); mMultipleCategory, mSuggestionsBeforeDismiss, isSmartSuggestionEnabled); final Tile suggestion = mSuggestionsBeforeDismiss.get(0); final Tile suggestion = mSuggestionsBeforeDismiss.get(0); if (mSuggestionParser.dismissSuggestion(suggestion, isSmartSuggestionEnabled)) { if (mSuggestionParser.dismissSuggestion(suggestion)) { RuntimeEnvironment.getRobolectricPackageManager().removeResolveInfosForIntent( RuntimeEnvironment.getRobolectricPackageManager().removeResolveInfosForIntent( new Intent(Intent.ACTION_MAIN).addCategory(mMultipleCategory.category), new Intent(Intent.ACTION_MAIN).addCategory(mMultipleCategory.category), suggestion.intent.getComponent().getPackageName()); suggestion.intent.getComponent().getPackageName()); Loading Loading
packages/SettingsLib/src/com/android/settingslib/suggestions/SuggestionParser.java +29 −44 Original line number Original line Diff line number Diff line Loading @@ -91,28 +91,25 @@ public class SuggestionParser { // Shared prefs keys for storing dismissed state. // Shared prefs keys for storing dismissed state. // Index into current dismissed state. // Index into current dismissed state. @VisibleForTesting static final String DISMISS_INDEX = "_dismiss_index"; public static final String SETUP_TIME = "_setup_time"; public static final String SETUP_TIME = "_setup_time"; private static final String IS_DISMISSED = "_is_dismissed"; private static final String IS_DISMISSED = "_is_dismissed"; // Default dismiss control for smart suggestions. // Default dismiss control for smart suggestions. private static final String DEFAULT_SMART_DISMISS_CONTROL = "0,10"; private static final String DEFAULT_SMART_DISMISS_CONTROL = "0"; private final Context mContext; private final Context mContext; private final List<SuggestionCategory> mSuggestionList; private final List<SuggestionCategory> mSuggestionList; private final ArrayMap<Pair<String, String>, Tile> mAddCache = new ArrayMap<>(); private final ArrayMap<Pair<String, String>, Tile> mAddCache = new ArrayMap<>(); private final SharedPreferences mSharedPrefs; private final SharedPreferences mSharedPrefs; private final String mSmartDismissControl; private final String mDefaultDismissControl; public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml, public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml, String smartDismissControl) { String defaultDismissControl) { this( this( context, context, sharedPrefs, sharedPrefs, (List<SuggestionCategory>) new SuggestionOrderInflater(context).parse(orderXml), (List<SuggestionCategory>) new SuggestionOrderInflater(context).parse(orderXml), smartDismissControl); defaultDismissControl); } } public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml) { public SuggestionParser(Context context, SharedPreferences sharedPrefs, int orderXml) { Loading @@ -124,11 +121,11 @@ public class SuggestionParser { Context context, Context context, SharedPreferences sharedPrefs, SharedPreferences sharedPrefs, List<SuggestionCategory> suggestionList, List<SuggestionCategory> suggestionList, String smartDismissControl) { String defaultDismissControl) { mContext = context; mContext = context; mSuggestionList = suggestionList; mSuggestionList = suggestionList; mSharedPrefs = sharedPrefs; mSharedPrefs = sharedPrefs; mSmartDismissControl = smartDismissControl; mDefaultDismissControl = defaultDismissControl; } } public SuggestionList getSuggestions(boolean isSmartSuggestionEnabled) { public SuggestionList getSuggestions(boolean isSmartSuggestionEnabled) { Loading Loading @@ -161,25 +158,16 @@ public class SuggestionParser { return suggestionList; return suggestionList; } } public boolean dismissSuggestion(Tile suggestion) { return dismissSuggestion(suggestion, false); } /** /** * Dismisses a suggestion, returns true if the suggestion has no more dismisses left and should * Dismisses a suggestion, returns true if the suggestion has no more dismisses left and should * be disabled. * be disabled. */ */ public boolean dismissSuggestion(Tile suggestion, boolean isSmartSuggestionEnabled) { public boolean dismissSuggestion(Tile suggestion) { String keyBase = suggestion.intent.getComponent().flattenToShortString(); final String keyBase = suggestion.intent.getComponent().flattenToShortString(); int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0); String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled); if (dismissControl == null || parseDismissString(dismissControl).length == index) { return true; } mSharedPrefs.edit() mSharedPrefs.edit() .putBoolean(keyBase + IS_DISMISSED, true) .putBoolean(keyBase + IS_DISMISSED, true) .commit(); .commit(); return false; return true; } } @VisibleForTesting @VisibleForTesting Loading Loading @@ -357,32 +345,29 @@ public class SuggestionParser { @VisibleForTesting @VisibleForTesting boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) { boolean isDismissed(Tile suggestion, boolean isSmartSuggestionEnabled) { String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled); String dismissControl = getDismissControl(suggestion, isSmartSuggestionEnabled); if (dismissControl == null) { return false; } String keyBase = suggestion.intent.getComponent().flattenToShortString(); String keyBase = suggestion.intent.getComponent().flattenToShortString(); if (!mSharedPrefs.contains(keyBase + SETUP_TIME)) { if (!mSharedPrefs.contains(keyBase + SETUP_TIME)) { mSharedPrefs.edit() mSharedPrefs.edit() .putLong(keyBase + SETUP_TIME, System.currentTimeMillis()) .putLong(keyBase + SETUP_TIME, System.currentTimeMillis()) .commit(); .commit(); } } // Default to dismissed, so that we can have suggestions that only first appear after // Check if it's already manually dismissed // some number of days. final boolean isDismissed = mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, false); if (!mSharedPrefs.getBoolean(keyBase + IS_DISMISSED, true)) { if (isDismissed) { return false; } int index = mSharedPrefs.getInt(keyBase + DISMISS_INDEX, 0); int[] dismissRules = parseDismissString(dismissControl); if (dismissRules.length <= index) { return true; return true; } } int currentDismiss = dismissRules[index]; if (dismissControl == null) { long time = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0), currentDismiss); return false; if (System.currentTimeMillis() >= time) { } // Parse when suggestion should first appear. return true to artificially hide suggestion // before then. int firstAppearDay = parseDismissString(dismissControl); long firstAppearDayInMs = getEndTime(mSharedPrefs.getLong(keyBase + SETUP_TIME, 0), firstAppearDay); if (System.currentTimeMillis() >= firstAppearDayInMs) { // Dismiss timeout has passed, undismiss it. // Dismiss timeout has passed, undismiss it. mSharedPrefs.edit() mSharedPrefs.edit() .putBoolean(keyBase + IS_DISMISSED, false) .putBoolean(keyBase + IS_DISMISSED, false) .putInt(keyBase + DISMISS_INDEX, index + 1) .commit(); .commit(); return false; return false; } } Loading @@ -394,18 +379,18 @@ public class SuggestionParser { return startTime + days; return startTime + days; } } private int[] parseDismissString(String dismissControl) { /** String[] dismissStrs = dismissControl.split(","); * Parse the first int from a string formatted as "0,1,2..." int[] dismisses = new int[dismissStrs.length]; * The value means suggestion should first appear on Day X. for (int i = 0; i < dismissStrs.length; i++) { */ dismisses[i] = Integer.parseInt(dismissStrs[i]); private int parseDismissString(String dismissControl) { } final String[] dismissStrs = dismissControl.split(","); return dismisses; return Integer.parseInt(dismissStrs[0]); } } private String getDismissControl(Tile suggestion, boolean isSmartSuggestionEnabled) { private String getDismissControl(Tile suggestion, boolean isSmartSuggestionEnabled) { if (isSmartSuggestionEnabled) { if (isSmartSuggestionEnabled) { return mSmartDismissControl; return mDefaultDismissControl; } else { } else { return suggestion.metaData.getString(META_DATA_DISMISS_CONTROL); return suggestion.metaData.getString(META_DATA_DISMISS_CONTROL); } } Loading
packages/SettingsLib/tests/robotests/src/com/android/settingslib/suggestions/SuggestionParserTest.java +9 −19 Original line number Original line Diff line number Diff line Loading @@ -83,7 +83,7 @@ public class SuggestionParserTest { mSuggestionParser = new SuggestionParser(mContext, mPrefs, mSuggestionParser = new SuggestionParser(mContext, mPrefs, Arrays.asList(mMultipleCategory, mExclusiveCategory, mExpiredExclusiveCategory), Arrays.asList(mMultipleCategory, mExclusiveCategory, mExpiredExclusiveCategory), "0,0"); "0"); ResolveInfo info1 = TileUtilsTest.newInfo(true, null); ResolveInfo info1 = TileUtilsTest.newInfo(true, null); info1.activityInfo.packageName = "pkg"; info1.activityInfo.packageName = "pkg"; Loading @@ -109,17 +109,12 @@ public class SuggestionParserTest { } } @Test @Test public void testDismissSuggestion_withoutSmartSuggestion() { public void dismissSuggestion_shouldDismiss() { assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, false)).isTrue(); assertThat(mSuggestionParser.dismissSuggestion(mSuggestion)).isTrue(); } } @Test @Test public void testDismissSuggestion_withSmartSuggestion() { public void testGetSuggestions_withoutSmartSuggestions_shouldDismiss() { assertThat(mSuggestionParser.dismissSuggestion(mSuggestion, true)).isFalse(); } @Test public void testGetSuggestions_withoutSmartSuggestions() { readAndDismissSuggestion(false); readAndDismissSuggestion(false); mSuggestionParser.readSuggestions(mMultipleCategory, mSuggestionsAfterDismiss, false); mSuggestionParser.readSuggestions(mMultipleCategory, mSuggestionsAfterDismiss, false); assertThat(mSuggestionsBeforeDismiss).hasSize(2); assertThat(mSuggestionsBeforeDismiss).hasSize(2); Loading @@ -128,11 +123,10 @@ public class SuggestionParserTest { } } @Test @Test public void testGetSuggestions_withSmartSuggestions() { public void testGetSuggestions_withSmartSuggestions_shouldDismiss() { readAndDismissSuggestion(true); readAndDismissSuggestion(true); assertThat(mSuggestionsBeforeDismiss).hasSize(2); assertThat(mSuggestionsBeforeDismiss).hasSize(2); assertThat(mSuggestionsAfterDismiss).hasSize(2); assertThat(mSuggestionsAfterDismiss).hasSize(1); assertThat(mSuggestionsBeforeDismiss).isEqualTo(mSuggestionsAfterDismiss); } } @Test @Test Loading Loading @@ -191,19 +185,15 @@ public class SuggestionParserTest { } } @Test @Test public void isSuggestionDismissed_mismatchRule_shouldDismiss() { public void isSuggestionDismissed_dismissedSuggestion_shouldReturnTrue() { final Tile suggestion = new Tile(); final Tile suggestion = new Tile(); suggestion.metaData = new Bundle(); suggestion.metaData = new Bundle(); suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3"); suggestion.metaData.putString(SuggestionParser.META_DATA_DISMISS_CONTROL, "1,2,3"); suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls")); suggestion.intent = new Intent().setComponent(new ComponentName("pkg", "cls")); // Dismiss suggestion when smart suggestion is not enabled. // Dismiss suggestion when smart suggestion is not enabled. mSuggestionParser.dismissSuggestion(suggestion, false /* isSmartSuggestionEnabled */); mSuggestionParser.dismissSuggestion(suggestion); 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 */)) assertThat(mSuggestionParser.isDismissed(suggestion, true /* isSmartSuggestionEnabled */)) .isTrue(); .isTrue(); } } Loading @@ -215,7 +205,7 @@ public class SuggestionParserTest { mMultipleCategory, mSuggestionsBeforeDismiss, isSmartSuggestionEnabled); mMultipleCategory, mSuggestionsBeforeDismiss, isSmartSuggestionEnabled); final Tile suggestion = mSuggestionsBeforeDismiss.get(0); final Tile suggestion = mSuggestionsBeforeDismiss.get(0); if (mSuggestionParser.dismissSuggestion(suggestion, isSmartSuggestionEnabled)) { if (mSuggestionParser.dismissSuggestion(suggestion)) { RuntimeEnvironment.getRobolectricPackageManager().removeResolveInfosForIntent( RuntimeEnvironment.getRobolectricPackageManager().removeResolveInfosForIntent( new Intent(Intent.ACTION_MAIN).addCategory(mMultipleCategory.category), new Intent(Intent.ACTION_MAIN).addCategory(mMultipleCategory.category), suggestion.intent.getComponent().getPackageName()); suggestion.intent.getComponent().getPackageName()); Loading