Filter and display top 3 suggestions for exclusive type

Change-Id: Ief4c2f02fcf1064dac3659502bd7511b09a2a7df
Fix: 37947647
Test: make RunSettingsRoboTests
This commit is contained in:
Fan Zhang
2017-05-11 15:39:38 -07:00
parent ff18ec37dc
commit 70b634adcf
6 changed files with 52 additions and 7 deletions

View File

@@ -41,12 +41,13 @@ import com.android.settings.dashboard.suggestions.SuggestionDismissController;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.dashboard.suggestions.SuggestionsChecks; import com.android.settings.dashboard.suggestions.SuggestionsChecks;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity; import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.SettingsDrawerActivity.CategoryListener; import com.android.settingslib.drawer.SettingsDrawerActivity.CategoryListener;
import com.android.settingslib.drawer.Tile; 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.ArrayList;
import java.util.List; import java.util.List;
@@ -257,7 +258,9 @@ public class DashboardSummary extends InstrumentedFragment
final Context context = getContext(); final Context context = getContext();
boolean isSmartSuggestionEnabled = boolean isSmartSuggestionEnabled =
mSuggestionFeatureProvider.isSmartSuggestionEnabled(context); mSuggestionFeatureProvider.isSmartSuggestionEnabled(context);
List<Tile> suggestions = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled); final SuggestionList sl = mSuggestionParser.getSuggestions(isSmartSuggestionEnabled);
final List<Tile> suggestions = sl.getSuggestions();
if (isSmartSuggestionEnabled) { if (isSmartSuggestionEnabled) {
List<String> suggestionIds = new ArrayList<>(suggestions.size()); List<String> suggestionIds = new ArrayList<>(suggestions.size());
for (Tile suggestion : suggestions) { for (Tile suggestion : suggestions) {
@@ -275,6 +278,9 @@ public class DashboardSummary extends InstrumentedFragment
suggestions.remove(i--); suggestions.remove(i--);
} }
} }
if (sl.isExclusiveSuggestionCategory()) {
mSuggestionFeatureProvider.filterExclusiveSuggestions(suggestions);
}
return suggestions; return suggestions;
} }

View File

@@ -22,8 +22,8 @@ import android.support.v7.widget.helper.ItemTouchHelper;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.Tile;
import com.android.settingslib.suggestions.SuggestionParser;
public class SuggestionDismissController extends ItemTouchHelper.SimpleCallback { public class SuggestionDismissController extends ItemTouchHelper.SimpleCallback {

View File

@@ -18,8 +18,8 @@ package com.android.settings.dashboard.suggestions;
import android.content.Context; import android.content.Context;
import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.Tile;
import com.android.settingslib.suggestions.SuggestionParser;
import java.util.List; import java.util.List;
@@ -45,6 +45,11 @@ public interface SuggestionFeatureProvider {
*/ */
void rankSuggestions(final List<Tile> suggestions, List<String> suggestionIds); 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. * Dismisses a suggestion.
*/ */

View File

@@ -18,17 +18,21 @@ package com.android.settings.dashboard.suggestions;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.Tile;
import com.android.settingslib.suggestions.SuggestionParser;
import java.util.List; import java.util.List;
public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider { 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 SuggestionRanker mSuggestionRanker;
private final MetricsFeatureProvider mMetricsFeatureProvider; private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -61,6 +65,17 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
mSuggestionRanker.rankSuggestions(suggestions, suggestionIds); mSuggestionRanker.rankSuggestions(suggestions, suggestionIds);
} }
@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 @Override
public void dismissSuggestion(Context context, SuggestionParser parser, Tile suggestion) { public void dismissSuggestion(Context context, SuggestionParser parser, Tile suggestion) {
if (parser == null || suggestion == null || context == null) { if (parser == null || suggestion == null || context == null) {

View File

@@ -24,8 +24,8 @@ import com.android.settings.R;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.Tile;
import com.android.settingslib.suggestions.SuggestionParser;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;

View File

@@ -24,8 +24,8 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.Tile; import com.android.settingslib.drawer.Tile;
import com.android.settingslib.suggestions.SuggestionParser;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -36,6 +36,9 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.List;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyBoolean;
@@ -153,4 +156,20 @@ public class SuggestionFeatureProviderImplTest {
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP); 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);
}
} }