Merge "Make contextual card count configurable."
diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
index b9b8b87..17a226d 100644
--- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
+++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java
@@ -27,6 +27,7 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
+import android.provider.Settings;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
@@ -50,6 +51,8 @@
 
     @VisibleForTesting
     static final int DEFAULT_CARD_COUNT = 3;
+    @VisibleForTesting
+    static final String CONTEXTUAL_CARD_COUNT = "contextual_card_count";
     static final int CARD_CONTENT_LOADER_ID = 1;
 
     private static final String TAG = "ContextualCardLoader";
@@ -130,8 +133,9 @@
         final List<ContextualCard> hiddenCards = new ArrayList<>();
 
         final int size = eligibleCards.size();
+        final int cardCount = getCardCount();
         for (int i = 0; i < size; i++) {
-            if (i < DEFAULT_CARD_COUNT) {
+            if (i < cardCount) {
                 visibleCards.add(eligibleCards.get(i));
             } else {
                 hiddenCards.add(eligibleCards.get(i));
@@ -150,6 +154,14 @@
     }
 
     @VisibleForTesting
+    int getCardCount() {
+        // Return the card count if Settings.Global has KEY_CONTEXTUAL_CARD_COUNT key,
+        // otherwise return the default one.
+        return Settings.Global.getInt(mContext.getContentResolver(),
+                CONTEXTUAL_CARD_COUNT, DEFAULT_CARD_COUNT);
+    }
+
+    @VisibleForTesting
     Cursor getContextualCardsFromProvider() {
         return CardDatabaseHelper.getInstance(mContext).getContextualCards();
     }
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
index e8d7713..00993f6 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardLoaderTest.java
@@ -31,6 +31,7 @@
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.net.Uri;
+import android.provider.Settings;
 
 import com.android.settings.R;
 import com.android.settings.slices.CustomSliceRegistry;
@@ -110,6 +111,20 @@
                 eq(SettingsEnums.ACTION_CONTEXTUAL_CARD_NOT_SHOW), any(String.class));
     }
 
+    @Test
+    public void getCardCount_noConfiguredCardCount_returnDefaultCardCount() {
+        assertThat(mContextualCardLoader.getCardCount()).isEqualTo(DEFAULT_CARD_COUNT);
+    }
+
+    @Test
+    public void getCardCount_hasConfiguredCardCount_returnConfiguredCardCount() {
+        int configCount = 4;
+        Settings.Global.putLong(mContext.getContentResolver(),
+                ContextualCardLoader.CONTEXTUAL_CARD_COUNT, configCount);
+
+        assertThat(mContextualCardLoader.getCardCount()).isEqualTo(configCount);
+    }
+
     private List<ContextualCard> getContextualCardList() {
         final List<ContextualCard> cards = new ArrayList<>();
         cards.add(new ContextualCard.Builder()