Card showing mechanism change in homepage

- update contextual card proto interface to fit the new SettingsIntelligence
- show sticky cards at the tail of the card area

Bug: 149274976
Test: robotest
Change-Id: Icca167825c1c037ec12d8836d82c5fdff4331a8e
This commit is contained in:
Jason Chiu
2020-02-11 17:46:34 +08:00
parent fe83913c03
commit ca9ece1a0c
6 changed files with 116 additions and 23 deletions

View File

@@ -16,6 +16,7 @@
package com.android.settings.homepage.contextualcards;
import static com.android.settings.intelligence.ContextualCardProto.ContextualCard.Category.STICKY_VALUE;
import static com.android.settings.slices.CustomSliceRegistry.BLUETOOTH_DEVICES_SLICE_URI;
import static com.android.settings.slices.CustomSliceRegistry.CONTEXTUAL_NOTIFICATION_CHANNEL_SLICE_URI;
import static com.android.settings.slices.CustomSliceRegistry.CONTEXTUAL_WIFI_SLICE_URI;
@@ -129,18 +130,34 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
@VisibleForTesting
List<ContextualCard> getDisplayableCards(List<ContextualCard> candidates) {
final List<ContextualCard> eligibleCards = filterEligibleCards(candidates);
final List<ContextualCard> stickyCards = new ArrayList<>();
final List<ContextualCard> visibleCards = new ArrayList<>();
final List<ContextualCard> hiddenCards = new ArrayList<>();
final int size = eligibleCards.size();
final int cardCount = getCardCount();
for (int i = 0; i < size; i++) {
if (i < cardCount) {
visibleCards.add(eligibleCards.get(i));
} else {
hiddenCards.add(eligibleCards.get(i));
final int maxCardCount = getCardCount();
eligibleCards.forEach(card -> {
if (card.getCategory() != STICKY_VALUE) {
return;
}
}
if (stickyCards.size() < maxCardCount) {
stickyCards.add(card);
} else {
hiddenCards.add(card);
}
});
final int nonStickyCardCount = maxCardCount - stickyCards.size();
eligibleCards.forEach(card -> {
if (card.getCategory() == STICKY_VALUE) {
return;
}
if (visibleCards.size() < nonStickyCardCount) {
visibleCards.add(card);
} else {
hiddenCards.add(card);
}
});
visibleCards.addAll(stickyCards);
if (!CardContentProvider.DELETE_CARD_URI.equals(mNotifyUri)) {
final MetricsFeatureProvider metricsFeatureProvider =