Merge "Only shows two suggestion cards at once." into qt-dev

am: 15524dbaee

Change-Id: I628873293315d2850f95e8f42fbb011417dc50a5
This commit is contained in:
Yi-Ling Chuang
2019-04-30 21:56:01 -07:00
committed by android-build-merger
2 changed files with 24 additions and 110 deletions

View File

@@ -50,7 +50,7 @@ import java.util.concurrent.TimeoutException;
public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>> { public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>> {
@VisibleForTesting @VisibleForTesting
static final int DEFAULT_CARD_COUNT = 4; static final int DEFAULT_CARD_COUNT = 2;
static final int CARD_CONTENT_LOADER_ID = 1; static final int CARD_CONTENT_LOADER_ID = 1;
private static final String TAG = "ContextualCardLoader"; private static final String TAG = "ContextualCardLoader";
@@ -141,42 +141,19 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
} }
} }
try { if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
// The maximum cards are four small cards OR final MetricsFeatureProvider metricsFeatureProvider =
// one large card with two small cards OR FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
// two large cards
if (visibleCards.size() <= 2 || getNumberOfLargeCard(visibleCards) == 0) {
// four small cards
return visibleCards;
}
if (visibleCards.size() == DEFAULT_CARD_COUNT) { metricsFeatureProvider.action(mContext,
hiddenCards.add(visibleCards.remove(visibleCards.size() - 1)); SettingsEnums.ACTION_CONTEXTUAL_CARD_SHOW,
} ContextualCardLogUtils.buildCardListLog(visibleCards));
if (getNumberOfLargeCard(visibleCards) == 1) { metricsFeatureProvider.action(mContext,
// One large card with two small cards SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW,
return visibleCards; ContextualCardLogUtils.buildCardListLog(hiddenCards));
}
hiddenCards.add(visibleCards.remove(visibleCards.size() - 1));
// Two large cards
return visibleCards;
} finally {
if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
final MetricsFeatureProvider metricsFeatureProvider =
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
metricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_CONTEXTUAL_CARD_SHOW,
ContextualCardLogUtils.buildCardListLog(visibleCards));
metricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW,
ContextualCardLogUtils.buildCardListLog(hiddenCards));
}
} }
return visibleCards;
} }
@VisibleForTesting @VisibleForTesting
@@ -208,12 +185,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
return cards; return cards;
} }
private int getNumberOfLargeCard(List<ContextualCard> cards) {
return (int) cards.stream()
.filter(card -> isLargeCard(card))
.count();
}
private boolean isLargeCard(ContextualCard card) { private boolean isLargeCard(ContextualCard card) {
return card.getSliceUri().equals(CONTEXTUAL_WIFI_SLICE_URI) return card.getSliceUri().equals(CONTEXTUAL_WIFI_SLICE_URI)
|| card.getSliceUri().equals(BLUETOOTH_DEVICES_SLICE_URI) || card.getSliceUri().equals(BLUETOOTH_DEVICES_SLICE_URI)

View File

@@ -60,6 +60,14 @@ public class ContextualCardLoaderTest {
mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
} }
@Test
public void loadInBackground_legacyMode_shouldReturnNothing() {
assertThat(mContext.getResources().getBoolean(R.bool.config_use_legacy_suggestion))
.isTrue();
assertThat(mContextualCardLoader.loadInBackground()).isEmpty();
}
@Test @Test
public void getDisplayableCards_twoEligibleCards_shouldShowAll() { public void getDisplayableCards_twoEligibleCards_shouldShowAll() {
final List<ContextualCard> cards = getContextualCardList().stream().limit(2) final List<ContextualCard> cards = getContextualCardList().stream().limit(2)
@@ -72,53 +80,16 @@ public class ContextualCardLoaderTest {
} }
@Test @Test
public void getDisplayableCards_fiveEligibleCardsNoLarge_shouldShowDefaultCardCount() { public void getDisplayableCards_fourEligibleCards_shouldShowDefaultCardCount() {
final List<ContextualCard> fiveCards = getContextualCardListWithNoLargeCard(); final List<ContextualCard> fourCards = getContextualCardList();
doReturn(fiveCards).when(mContextualCardLoader).filterEligibleCards(anyList()); doReturn(fourCards).when(mContextualCardLoader).filterEligibleCards(anyList());
final List<ContextualCard> result = mContextualCardLoader.getDisplayableCards( final List<ContextualCard> result = mContextualCardLoader
fiveCards); .getDisplayableCards(fourCards);
assertThat(result).hasSize(DEFAULT_CARD_COUNT); assertThat(result).hasSize(DEFAULT_CARD_COUNT);
} }
@Test
public void getDisplayableCards_threeEligibleCardsOneLarge_shouldShowThreeCards() {
final List<ContextualCard> cards = getContextualCardList().stream().limit(2)
.collect(Collectors.toList());
cards.add(new ContextualCard.Builder()
.setName("test_gesture")
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(Uri.parse(
"content://com.android.settings.test.slices/action/gesture_pick_up"))
.build());
doReturn(cards).when(mContextualCardLoader).filterEligibleCards(anyList());
final List<ContextualCard> result = mContextualCardLoader.getDisplayableCards(cards);
assertThat(result).hasSize(3);
}
@Test
public void getDisplayableCards_threeEligibleCardsTwoLarge_shouldShowTwoCards() {
final List<ContextualCard> threeCards = getContextualCardList().stream().limit(3)
.collect(Collectors.toList());
doReturn(threeCards).when(mContextualCardLoader).filterEligibleCards(anyList());
final List<ContextualCard> result = mContextualCardLoader.getDisplayableCards(
threeCards);
assertThat(result).hasSize(2);
}
@Test
public void loadInBackground_legacyMode_shouldReturnNothing() {
assertThat(mContext.getResources().getBoolean(R.bool.config_use_legacy_suggestion))
.isTrue();
assertThat(mContextualCardLoader.loadInBackground()).isEmpty();
}
@Test @Test
public void getDisplayableCards_refreshCardUri_shouldLogContextualCardDisplay() { public void getDisplayableCards_refreshCardUri_shouldLogContextualCardDisplay() {
mContextualCardLoader.mNotifyUri = CardContentProvider.REFRESH_CARD_URI; mContextualCardLoader.mNotifyUri = CardContentProvider.REFRESH_CARD_URI;
@@ -167,32 +138,4 @@ public class ContextualCardLoaderTest {
.build()); .build());
return cards; return cards;
} }
private List<ContextualCard> getContextualCardListWithNoLargeCard() {
final List<ContextualCard> cards = new ArrayList<>();
cards.add(new ContextualCard.Builder()
.setName("test_rotate")
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(
Uri.parse("content://com.android.settings.test.slices/action/auto_rotate"))
.build());
cards.add(new ContextualCard.Builder()
.setName("test_flashlight")
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(
Uri.parse("content://com.android.settings.test.slices/action/flashlight"))
.build());
cards.add(new ContextualCard.Builder()
.setName("test_bt")
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(Uri.parse("content://android.settings.test.slices/action/bluetooth"))
.build());
cards.add(new ContextualCard.Builder()
.setName("test_gesture")
.setCardType(ContextualCard.CardType.SLICE)
.setSliceUri(Uri.parse(
"content://com.android.settings.test.slices/action/gesture_pick_up"))
.build());
return cards;
}
} }