Use a better way to bind slice for slice precheck.

Calling Slice.bindSlice() directly will cause the exception stating that
slices are not pinned, which sometimes leads to crash. Hence, change the
way we bind slices which handles pinSlice() for us before onBindSlice().

Bug: 120552892
Test: robotests, unit tests
Change-Id: I3e65c6b79876dbee5db6f19387bc6b675f734161
This commit is contained in:
Yi-Ling Chuang
2019-02-14 20:36:20 +08:00
parent 5f321d7921
commit daa8ff36cc
3 changed files with 60 additions and 23 deletions

View File

@@ -21,9 +21,12 @@ import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.net.Uri;
import androidx.slice.Slice;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import com.android.settings.slices.CustomSliceRegistry;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -44,7 +47,7 @@ public class ContextualCardLoaderTest {
}
@Test
public void filter_twoInvalidCards_shouldReturnOneCard() {
public void filterEligibleCards_twoInvalidCards_shouldReturnOneCard() {
final String sliceUri1 = "content://com.android.settings.slices/action/flashlight"; //valid
final String sliceUri2 = "content://com.android.settings.test.slices/action/flashlight";
final String sliceUri3 = "cotent://com.android.settings.slices/action/flashlight";
@@ -59,6 +62,23 @@ public class ContextualCardLoaderTest {
assertThat(result).hasSize(1);
}
@Test
public void bindSlice_flashlightUri_shouldReturnFlashlightSlice() {
final Slice loadedSlice =
mContextualCardLoader.bindSlice(CustomSliceRegistry.FLASHLIGHT_SLICE_URI);
assertThat(loadedSlice.getUri()).isEqualTo(CustomSliceRegistry.FLASHLIGHT_SLICE_URI);
}
@Test
public void bindSlice_noProvider_shouldReturnNull() {
final String sliceUri = "content://com.android.settings.test.slices/action/flashlight";
final Slice loadedSlice = mContextualCardLoader.bindSlice(Uri.parse(sliceUri));
assertThat(loadedSlice).isNull();
}
private ContextualCard getContextualCard(String sliceUri) {
return new ContextualCard.Builder()
.setName("test_card")