Merge "Only shows two suggestion cards at once." into qt-dev
am: 15524dbaee
Change-Id: I628873293315d2850f95e8f42fbb011417dc50a5
This commit is contained in:
@@ -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,29 +141,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
// The maximum cards are four small cards OR
|
|
||||||
// one large card with two small cards OR
|
|
||||||
// two large cards
|
|
||||||
if (visibleCards.size() <= 2 || getNumberOfLargeCard(visibleCards) == 0) {
|
|
||||||
// four small cards
|
|
||||||
return visibleCards;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (visibleCards.size() == DEFAULT_CARD_COUNT) {
|
|
||||||
hiddenCards.add(visibleCards.remove(visibleCards.size() - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getNumberOfLargeCard(visibleCards) == 1) {
|
|
||||||
// One large card with two small cards
|
|
||||||
return visibleCards;
|
|
||||||
}
|
|
||||||
|
|
||||||
hiddenCards.add(visibleCards.remove(visibleCards.size() - 1));
|
|
||||||
|
|
||||||
// Two large cards
|
|
||||||
return visibleCards;
|
|
||||||
} finally {
|
|
||||||
if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
|
if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
|
||||||
final MetricsFeatureProvider metricsFeatureProvider =
|
final MetricsFeatureProvider metricsFeatureProvider =
|
||||||
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
|
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
|
||||||
@@ -176,7 +153,7 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
|||||||
SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW,
|
SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW,
|
||||||
ContextualCardLogUtils.buildCardListLog(hiddenCards));
|
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)
|
||||||
|
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user