import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionsChecks;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.SettingsDrawerActivity.CategoryListener;
import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.suggestions.SuggestionList;
+import com.android.settingslib.suggestions.SuggestionParser;
import java.util.ArrayList;
import java.util.List;
final Context context = getContext();
boolean isSmartSuggestionEnabled =
mSuggestionFeatureProvider.isSmartSuggestionEnabled(context);
- List<Tile> suggestions = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled);
+ final SuggestionList sl = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled);
+ final List<Tile> suggestions = sl.getSuggestions();
+
if (isSmartSuggestionEnabled) {
List<String> suggestionIds = new ArrayList<>(suggestions.size());
for (Tile suggestion : suggestions) {
suggestions.remove(i--);
}
}
+ if (sl.isExclusiveSuggestionCategory()) {
+ mSuggestionFeatureProvider.filterExclusiveSuggestions(suggestions);
+ }
return suggestions;
}
import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.suggestions.SuggestionParser;
public class SuggestionDismissController extends ItemTouchHelper.SimpleCallback {
import android.content.Context;
-import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.suggestions.SuggestionParser;
import java.util.List;
void rankSuggestions(final List<Tile> suggestions, List<String> suggestionIds);
/**
+ * Only keep top few suggestions from exclusive suggestions.
+ */
+ void filterExclusiveSuggestions(List<Tile> suggestions);
+
+ /**
* Dismisses a suggestion.
*/
void dismissSuggestion(Context context, SuggestionParser parser, Tile suggestion);
import android.content.Context;
import android.content.pm.PackageManager;
+import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.suggestions.SuggestionParser;
import java.util.List;
public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider {
+ private static final String TAG = "SuggestionFeature";
+ private static final int EXCLUSIVE_SUGGESTION_MAX_COUNT = 3;
+
private final SuggestionRanker mSuggestionRanker;
private final MetricsFeatureProvider mMetricsFeatureProvider;
}
@Override
+ public void filterExclusiveSuggestions(List<Tile> suggestions) {
+ if (suggestions == null) {
+ return;
+ }
+ for (int i = suggestions.size() - 1; i >= EXCLUSIVE_SUGGESTION_MAX_COUNT; i--) {
+ Log.d(TAG, "Removing exclusive suggestion");
+ suggestions.remove(i);
+ }
+ }
+
+ @Override
public void dismissSuggestion(Context context, SuggestionParser parser, Tile suggestion) {
if (parser == null || suggestion == null || context == null) {
return;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.suggestions.SuggestionParser;
import org.junit.Before;
import org.junit.Test;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile;
+import com.android.settingslib.suggestions.SuggestionParser;
import org.junit.Before;
import org.junit.Test;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import java.util.ArrayList;
+import java.util.List;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
+
+ @Test
+ public void filterExclusiveSuggestions_shouldOnlyKeepFirst3() {
+ final List<Tile> suggestions = new ArrayList<>();
+ suggestions.add(new Tile());
+ suggestions.add(new Tile());
+ suggestions.add(new Tile());
+ suggestions.add(new Tile());
+ suggestions.add(new Tile());
+ suggestions.add(new Tile());
+ suggestions.add(new Tile());
+
+ mProvider.filterExclusiveSuggestions(suggestions);
+
+ assertThat(suggestions).hasSize(3);
+ }
}