Adjust timeout limit of contextual card loading
Add a way to get the timeout limit of contextual card loading from Settings.Global. If Settings.Global doesn't have the timeout limit, will use the default timeout limit. Bug: 124460999 Test: robotests Change-Id: I2a25570f51013b566914e485d61405f14290d338
This commit is contained in:
@@ -26,7 +26,6 @@ import android.database.Cursor;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.text.format.DateUtils;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -50,7 +49,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final int DEFAULT_CARD_COUNT = 4;
|
static final int DEFAULT_CARD_COUNT = 4;
|
||||||
static final int CARD_CONTENT_LOADER_ID = 1;
|
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 String TAG = "ContextualCardLoader";
|
||||||
private static final long ELIGIBILITY_CHECKER_TIMEOUT_MS = 250;
|
private static final long ELIGIBILITY_CHECKER_TIMEOUT_MS = 250;
|
||||||
|
@@ -24,6 +24,8 @@ import static java.util.stream.Collectors.groupingBy;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.provider.Settings;
|
||||||
|
import android.text.format.DateUtils;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
@@ -62,8 +64,12 @@ import java.util.stream.Collectors;
|
|||||||
public class ContextualCardManager implements ContextualCardLoader.CardContentLoaderListener,
|
public class ContextualCardManager implements ContextualCardLoader.CardContentLoaderListener,
|
||||||
ContextualCardUpdateListener, LifecycleObserver, OnSaveInstanceState {
|
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";
|
private static final String TAG = "ContextualCardManager";
|
||||||
|
|
||||||
//The list for Settings Custom Card
|
//The list for Settings Custom Card
|
||||||
@@ -201,7 +207,8 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
|
|||||||
}
|
}
|
||||||
|
|
||||||
//only log homepage display upon a fresh launch
|
//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()
|
onContextualCardUpdated(cards.stream()
|
||||||
.collect(groupingBy(ContextualCard::getCardType)));
|
.collect(groupingBy(ContextualCard::getCardType)));
|
||||||
}
|
}
|
||||||
@@ -239,6 +246,14 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
|
|||||||
return getCardsWithSuggestionViewType(result);
|
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<ContextualCard> getCardsWithSuggestionViewType(List<ContextualCard> cards) {
|
private List<ContextualCard> getCardsWithSuggestionViewType(List<ContextualCard> cards) {
|
||||||
// Shows as half cards if 2 suggestion type of cards are next to each other.
|
// 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.
|
// Shows as full card if 1 suggestion type of card lives alone.
|
||||||
|
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
|
|
||||||
import com.android.settings.homepage.contextualcards.conditional.ConditionFooterContextualCard;
|
import com.android.settings.homepage.contextualcards.conditional.ConditionFooterContextualCard;
|
||||||
@@ -125,6 +126,24 @@ public class ContextualCardManagerTest {
|
|||||||
.isEqualTo(ContextualCard.CardType.CONDITIONAL_FOOTER);
|
.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
|
@Test
|
||||||
public void onFinishCardLoading_fastLoad_shouldCallOnContextualCardUpdated() {
|
public void onFinishCardLoading_fastLoad_shouldCallOnContextualCardUpdated() {
|
||||||
mManager.mStartTime = System.currentTimeMillis();
|
mManager.mStartTime = System.currentTimeMillis();
|
||||||
|
Reference in New Issue
Block a user