Merge "Fix bug in Add network fragment"
diff --git a/src/com/android/settings/homepage/ContextualCardController.java b/src/com/android/settings/homepage/ContextualCardController.java
index 4a7a149..e47f70c 100644
--- a/src/com/android/settings/homepage/ContextualCardController.java
+++ b/src/com/android/settings/homepage/ContextualCardController.java
@@ -16,8 +16,6 @@
package com.android.settings.homepage;
-import java.util.List;
-
/**
* Data controller for {@link ContextualCard}.
*/
@@ -26,12 +24,6 @@
@ContextualCard.CardType
int getCardType();
- /**
- * When data is updated or changed, the new data should be passed to ContextualCardManager for
- * list updating.
- */
- void onDataUpdated(List<ContextualCard> cardList);
-
void onPrimaryClick(ContextualCard card);
void onActionClick(ContextualCard card);
diff --git a/src/com/android/settings/homepage/ContextualCardManager.java b/src/com/android/settings/homepage/ContextualCardManager.java
index b9aa792..87b048e 100644
--- a/src/com/android/settings/homepage/ContextualCardManager.java
+++ b/src/com/android/settings/homepage/ContextualCardManager.java
@@ -18,8 +18,11 @@
import static com.android.settings.homepage.CardContentLoader.CARD_CONTENT_LOADER_ID;
+import static java.util.stream.Collectors.groupingBy;
+
import android.content.Context;
import android.os.Bundle;
+import android.util.ArrayMap;
import android.util.Log;
import android.widget.BaseAdapter;
@@ -33,6 +36,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -110,15 +114,12 @@
}
@Override
- public void onContextualCardUpdated(List<ContextualCard> updateList) {
+ public void onContextualCardUpdated(Map<Integer, List<ContextualCard>> updateList) {
//TODO(b/112245748): Should implement a DiffCallback.
//Keep the old list for comparison.
final List<ContextualCard> prevCards = mContextualCards;
- final Set<Integer> cardTypes = updateList
- .stream()
- .map(card -> card.getCardType())
- .collect(Collectors.toSet());
+ final Set<Integer> cardTypes = updateList.keySet();
//Remove the existing data that matches the certain cardType before inserting new data.
final List<ContextualCard> cardsToKeep = mContextualCards
.stream()
@@ -126,10 +127,10 @@
.collect(Collectors.toList());
final List<ContextualCard> allCards = new ArrayList<>();
allCards.addAll(cardsToKeep);
- allCards.addAll(updateList);
+ allCards.addAll(
+ updateList.values().stream().flatMap(List::stream).collect(Collectors.toList()));
sortCards(allCards);
-
//replace with the new data
mContextualCards.clear();
mContextualCards.addAll(allCards);
@@ -137,13 +138,15 @@
loadCardControllers();
if (mListener != null) {
- mListener.onContextualCardUpdated(mContextualCards);
+ final Map<Integer, List<ContextualCard>> cardsToUpdate = new ArrayMap<>();
+ cardsToUpdate.put(ContextualCard.CardType.DEFAULT, mContextualCards);
+ mListener.onContextualCardUpdated(cardsToUpdate);
}
}
@Override
- public void onFinishCardLoading(List<ContextualCard> contextualCards) {
- onContextualCardUpdated(contextualCards);
+ public void onFinishCardLoading(List<ContextualCard> cards) {
+ onContextualCardUpdated(cards.stream().collect(groupingBy(ContextualCard::getCardType)));
}
void setListener(ContextualCardUpdateListener listener) {
diff --git a/src/com/android/settings/homepage/ContextualCardUpdateListener.java b/src/com/android/settings/homepage/ContextualCardUpdateListener.java
index 812c4ce..60dd3a7 100644
--- a/src/com/android/settings/homepage/ContextualCardUpdateListener.java
+++ b/src/com/android/settings/homepage/ContextualCardUpdateListener.java
@@ -17,15 +17,19 @@
package com.android.settings.homepage;
import java.util.List;
+import java.util.Map;
/**
* When {@link ContextualCardController} detects changes, it will notify the listeners registered.
- * In our case, {@link ContextualCardManager} gets noticed.
- *
- * After the list of {@link ContextualCard} gets updated in{@link ContextualCardManager},
- * {@link ContextualCardManager} will notify the listeners registered, {@link
- * ContextualCardsAdapter} in this case.
*/
public interface ContextualCardUpdateListener {
- void onContextualCardUpdated(List<ContextualCard> updateList);
+
+ /**
+ * Called when a set of cards are updated.
+ *
+ * @param cards A map of updates grouped by {@link ContextualCard.CardType}. Values can be
+ * null, which means all cards from corresponding {@link
+ * ContextualCard.CardType} are removed.
+ */
+ void onContextualCardUpdated(Map<Integer, List<ContextualCard>> cards);
}
\ No newline at end of file
diff --git a/src/com/android/settings/homepage/ContextualCardsAdapter.java b/src/com/android/settings/homepage/ContextualCardsAdapter.java
index 402212f..9ab8893 100644
--- a/src/com/android/settings/homepage/ContextualCardsAdapter.java
+++ b/src/com/android/settings/homepage/ContextualCardsAdapter.java
@@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
public class ContextualCardsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
implements ContextualCardUpdateListener {
@@ -101,7 +102,8 @@
}
@Override
- public void onContextualCardUpdated(List<ContextualCard> contextualCards) {
+ public void onContextualCardUpdated(Map<Integer, List<ContextualCard>> cards) {
+ final List<ContextualCard> contextualCards = cards.get(ContextualCard.CardType.DEFAULT);
//TODO(b/112245748): Should implement a DiffCallback so we can use notifyItemChanged()
// instead.
if (contextualCards == null) {
diff --git a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
index adac8eb..fbbab14 100644
--- a/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
+++ b/src/com/android/settings/homepage/conditional/ConditionContextualCardController.java
@@ -17,6 +17,7 @@
package com.android.settings.homepage.conditional;
import android.content.Context;
+import android.util.ArrayMap;
import com.android.settings.homepage.ContextualCard;
import com.android.settings.homepage.ContextualCardController;
@@ -27,6 +28,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* This controller triggers the loading of conditional cards and monitors state changes to
@@ -57,11 +59,6 @@
}
@Override
- public void onDataUpdated(List<ContextualCard> cardList) {
- mListener.onContextualCardUpdated(cardList);
- }
-
- @Override
public void onStart() {
mConditionManager.startMonitoringStateChange();
}
@@ -105,7 +102,9 @@
}
if (mListener != null) {
- onDataUpdated(conditionCards);
+ final Map<Integer, List<ContextualCard>> conditionalCards = new ArrayMap<>();
+ conditionalCards.put(ContextualCard.CardType.CONDITIONAL, conditionCards);
+ mListener.onContextualCardUpdated(conditionalCards);
}
}
}
diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java
index ed45ce7..a59a3bc 100644
--- a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionContextualCardControllerTest.java
@@ -82,7 +82,7 @@
mController.onConditionsChanged();
- verify(mController).onDataUpdated(any());
+ verify(mListener).onContextualCardUpdated(any());
}
@Test
@@ -94,7 +94,7 @@
mController.onConditionsChanged();
- verify(mController, never()).onDataUpdated(any());
+ verify(mListener, never()).onContextualCardUpdated(any());
}
private class FakeConditionalCard implements ConditionalCard {