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
This commit is contained in:
Yi-Ling Chuang
2020-05-14 10:48:43 +08:00
parent e060311358
commit ac59ea8e23
2 changed files with 37 additions and 0 deletions

View File

@@ -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<ContextualCard> {
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)) {

View File

@@ -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);