diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java index ea6ac43c693..13564b5bc59 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java @@ -26,7 +26,6 @@ import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.os.Looper; -import android.text.format.DateUtils; import android.util.Log; import androidx.annotation.NonNull; @@ -50,7 +49,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat @VisibleForTesting static final int DEFAULT_CARD_COUNT = 4; static final int CARD_CONTENT_LOADER_ID = 1; - static final long CARD_CONTENT_LOADER_TIMEOUT_MS = DateUtils.SECOND_IN_MILLIS; private static final String TAG = "ContextualCardLoader"; private static final long ELIGIBILITY_CHECKER_TIMEOUT_MS = 250; diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java index 3b8aacd0759..c829015ed27 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java @@ -24,6 +24,8 @@ import static java.util.stream.Collectors.groupingBy; import android.content.Context; import android.os.Bundle; +import android.provider.Settings; +import android.text.format.DateUtils; import android.util.ArrayMap; import android.util.Log; import android.widget.BaseAdapter; @@ -62,8 +64,12 @@ import java.util.stream.Collectors; public class ContextualCardManager implements ContextualCardLoader.CardContentLoaderListener, ContextualCardUpdateListener, LifecycleObserver, OnSaveInstanceState { - private static final String KEY_CONTEXTUAL_CARDS = "key_contextual_cards"; + @VisibleForTesting + static final long CARD_CONTENT_LOADER_TIMEOUT_MS = DateUtils.SECOND_IN_MILLIS; + @VisibleForTesting + static final String KEY_GLOBAL_CARD_LOADER_TIMEOUT = "global_card_loader_timeout_key"; + private static final String KEY_CONTEXTUAL_CARDS = "key_contextual_cards"; private static final String TAG = "ContextualCardManager"; //The list for Settings Custom Card @@ -201,7 +207,8 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo } //only log homepage display upon a fresh launch - if (loadTime <= ContextualCardLoader.CARD_CONTENT_LOADER_TIMEOUT_MS) { + final long timeoutLimit = getCardLoaderTimeout(mContext); + if (loadTime <= timeoutLimit) { onContextualCardUpdated(cards.stream() .collect(groupingBy(ContextualCard::getCardType))); } @@ -239,6 +246,14 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo return getCardsWithSuggestionViewType(result); } + @VisibleForTesting + long getCardLoaderTimeout(Context context) { + // Return the timeout limit if Settings.Global has the KEY_GLOBAL_CARD_LOADER_TIMEOUT key, + // else return default timeout. + return Settings.Global.getLong(mContext.getContentResolver(), + KEY_GLOBAL_CARD_LOADER_TIMEOUT, CARD_CONTENT_LOADER_TIMEOUT_MS); + } + private List getCardsWithSuggestionViewType(List cards) { // Shows as half cards if 2 suggestion type of cards are next to each other. // Shows as full card if 1 suggestion type of card lives alone. diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java index 1a0539c2fe1..eb9a4614c80 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify; import android.content.Context; import android.net.Uri; +import android.provider.Settings; import android.util.ArrayMap; import com.android.settings.homepage.contextualcards.conditional.ConditionFooterContextualCard; @@ -125,6 +126,24 @@ public class ContextualCardManagerTest { .isEqualTo(ContextualCard.CardType.CONDITIONAL_FOOTER); } + @Test + public void getCardLoaderTimeout_noConfiguredTimeout_shouldReturnDefaultTimeout() { + final long timeout = mManager.getCardLoaderTimeout(mContext); + + assertThat(timeout).isEqualTo(ContextualCardManager.CARD_CONTENT_LOADER_TIMEOUT_MS); + } + + @Test + public void getCardLoaderTimeout_hasConfiguredTimeout_shouldReturnConfiguredTimeout() { + final long configuredTimeout = 5000L; + Settings.Global.putLong(mContext.getContentResolver(), + ContextualCardManager.KEY_GLOBAL_CARD_LOADER_TIMEOUT, configuredTimeout); + + final long timeout = mManager.getCardLoaderTimeout(mContext); + + assertThat(timeout).isEqualTo(configuredTimeout); + } + @Test public void onFinishCardLoading_fastLoad_shouldCallOnContextualCardUpdated() { mManager.mStartTime = System.currentTimeMillis();