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()
