From ac59ea8e2387158415d59bc4a9389987c3ef5c0f Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Thu, 14 May 2020 10:48:43 +0800 Subject: [PATCH] Do not prebind sticky slices. We have a precheck mechanism to filter out slices that are not eligible to be displayed on the homepage. Since sticky cards are designed to be always available, which implies they will never be null, so skip prechecking on them. This allows us to prevent from the precheck timeout which usually leads to the disappearance of cards. Fixes: 152365480 Test: robotests Change-Id: Ic9e3df8b55609e9b5d1d3fd3a8d95e4086d3d7a4 --- .../contextualcards/EligibleCardChecker.java | 7 +++++ .../EligibleCardCheckerTest.java | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java index 0fcde265696..7fd8a2fd5e6 100644 --- a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java +++ b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java @@ -18,6 +18,8 @@ package com.android.settings.homepage.contextualcards; import static android.app.slice.Slice.HINT_ERROR; +import static com.android.settings.intelligence.ContextualCardProto.ContextualCard.Category.STICKY_VALUE; + import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.content.Context; @@ -94,6 +96,11 @@ public class EligibleCardChecker implements Callable { return false; } + if (card.getCategory() == STICKY_VALUE) { + Log.d(TAG, "Sticky card, skip checking. Uri = " + card.getSliceUri()); + return true; + } + final Slice slice = bindSlice(uri); if (isSliceToggleable(slice)) { diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java index 23ae2f3a75c..e2369195308 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/EligibleCardCheckerTest.java @@ -18,11 +18,15 @@ package com.android.settings.homepage.contextualcards; import static android.app.slice.Slice.HINT_ERROR; +import static com.android.settings.intelligence.ContextualCardProto.ContextualCard.Category.STICKY_VALUE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import android.content.Context; import android.net.Uri; @@ -64,6 +68,32 @@ public class EligibleCardCheckerTest { assertThat(mEligibleCardChecker.isSliceToggleable(slice)).isTrue(); } + @Test + public void isCardEligibleToDisplay_stickyCard_returnTrue() { + final ContextualCard card = new ContextualCard.Builder() + .setName("test_card") + .setCardType(ContextualCard.CardType.SLICE) + .setCategory(STICKY_VALUE) + .setSliceUri(CustomSliceRegistry.FLASHLIGHT_SLICE_URI) + .build(); + + assertThat(mEligibleCardChecker.isCardEligibleToDisplay(card)).isTrue(); + } + + @Test + public void isCardEligibleToDisplay_stickyCard_shouldNotPrebind() { + final ContextualCard card = new ContextualCard.Builder() + .setName("test_card") + .setCardType(ContextualCard.CardType.SLICE) + .setCategory(STICKY_VALUE) + .setSliceUri(CustomSliceRegistry.FLASHLIGHT_SLICE_URI) + .build(); + + mEligibleCardChecker.isCardEligibleToDisplay(card); + + verify(mEligibleCardChecker, never()).bindSlice(CustomSliceRegistry.FLASHLIGHT_SLICE_URI); + } + @Test public void isCardEligibleToDisplay_toggleSlice_hasInlineActionShouldBeTrue() { final ContextualWifiSlice wifiSlice = new ContextualWifiSlice(mContext);