From 72da4a81f46d7b3815fd05be6a263b7bd3b986a0 Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Mon, 23 Dec 2019 17:33:51 +0800 Subject: [PATCH] Make contextual card count configurable. Decide how many card we should show at once on the homepage based on the value in Settings Global for more flexibility. Fall back to the default value if there is nothing set up. Bug: 138754406 Test: robotests Change-Id: I8d31d98eafb636a5e72af76ffec7e3dae0be3cbc --- .../contextualcards/ContextualCardLoader.java | 14 +++++++++++++- .../contextualcards/ContextualCardLoaderTest.java | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java index b9b8b87625a..17a226ddca7 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.database.Cursor; 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 @@ public class ContextualCardLoader extends AsyncLoaderCompat @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 @@ public class ContextualCardLoader extends AsyncLoaderCompat final List 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)); @@ -149,6 +153,14 @@ public class ContextualCardLoader extends AsyncLoaderCompat return visibleCards; } + @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 e8d7713f2a4..00993f66951 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 static org.mockito.Mockito.verify; 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 @@ public class ContextualCardLoaderTest { 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 getContextualCardList() { final List cards = new ArrayList<>(); cards.add(new ContextualCard.Builder()