From 228bc78bf9295b51bc1bb6fce46e56aaa1ca49c1 Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Tue, 11 Aug 2020 16:03:02 +0800 Subject: [PATCH] [DO NOT MERGE] Pre-allocate height for contextual cards. To prevent the UI jank causing by the async card loads, we pre-allocate some space for the card to fill in. After this change, only one card can be shown at a time. More details: - When the card number configuration is set to 0, don't trigger the card loader. - The height adjusting logic is as follows. When Settings is opened, pre-allocate a space first. After the RV finish laying out, reset the RV to wrap_content. So if the card has to be expanded(eg. wifi large mode or dismissal view), then it will adjust the height accordingly. While if a card previously shown becomes unavailable(dismissed or conditions not meet), we also reset the RV so the space can be gone. Bug: 163288869 Test: robotest Change-Id: I0dcb2dae8f0533e562ad06f664b7ae7a9afecd21 --- res/values/dimens.xml | 1 + .../contextualcards/ContextualCardLoader.java | 9 +++-- .../ContextualCardManager.java | 4 +++ .../ContextualCardsAdapter.java | 20 ++++++++++- .../ContextualCardsFragment.java | 36 ++++++++++++++++++- .../ContextualCardLoaderTest.java | 12 +++---- 6 files changed, 69 insertions(+), 13 deletions(-) diff --git a/res/values/dimens.xml b/res/values/dimens.xml index dc23c3d8d06..28ab8f8323e 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -348,6 +348,7 @@ 12dp 16dp 12dp + 0dp 12dp diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java index e4a644cf780..de7eda2197f 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java @@ -50,7 +50,7 @@ import java.util.stream.Collectors; public class ContextualCardLoader extends AsyncLoaderCompat> { @VisibleForTesting - static final int DEFAULT_CARD_COUNT = 3; + static final int DEFAULT_CARD_COUNT = 1; @VisibleForTesting static final String CONTEXTUAL_CARD_COUNT = "contextual_card_count"; static final int CARD_CONTENT_LOADER_ID = 1; @@ -131,7 +131,7 @@ public class ContextualCardLoader extends AsyncLoaderCompat final List visibleCards = new ArrayList<>(); final List hiddenCards = new ArrayList<>(); - final int maxCardCount = getCardCount(); + final int maxCardCount = getCardCount(mContext); eligibleCards.forEach(card -> { if (card.getCategory() != STICKY_VALUE) { return; @@ -167,11 +167,10 @@ public class ContextualCardLoader extends AsyncLoaderCompat return visibleCards; } - @VisibleForTesting - int getCardCount() { + static int getCardCount(Context context) { // Return the card count if Settings.Global has KEY_CONTEXTUAL_CARD_COUNT key, // otherwise return the default one. - return Settings.Global.getInt(mContext.getContentResolver(), + return Settings.Global.getInt(context.getContentResolver(), CONTEXTUAL_CARD_COUNT, DEFAULT_CARD_COUNT); } diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java index ac35017baab..00755296d0a 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java @@ -122,6 +122,10 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo Log.w(TAG, "Legacy suggestion contextual card enabled, skipping contextual cards."); return; } + if (ContextualCardLoader.getCardCount(mContext) <= 0) { + Log.w(TAG, "Card count is zero, skipping contextual cards."); + return; + } mStartTime = System.currentTimeMillis(); final CardContentLoaderCallbacks cardContentLoaderCallbacks = new CardContentLoaderCallbacks(mContext); diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardsAdapter.java b/src/com/android/settings/homepage/contextualcards/ContextualCardsAdapter.java index b9bc43b32b5..cf6f53c7075 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardsAdapter.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardsAdapter.java @@ -16,7 +16,10 @@ package com.android.settings.homepage.contextualcards; +import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; + import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -131,7 +134,22 @@ public class ContextualCardsAdapter extends RecyclerView.Adapter