Make slices precheck executes in parallel.

Slice binding takes up sometime which may cause latency.
Thus, making it run in parallel instead of sequentially to improve the
performance and avoid hitting the timeout problem.

Bug: 124366297
Fixes: 123668403
Test: robotests, unit tests
Change-Id: I5d9fa4605f59e2acef65aadf6fce85df36d8fff1
This commit is contained in:
Yi-Ling Chuang
2019-02-14 21:31:11 +08:00
parent daa8ff36cc
commit dde76e6d5c
4 changed files with 171 additions and 79 deletions

View File

@@ -16,6 +16,8 @@
package com.android.settings.homepage.contextualcards;
import static android.app.slice.Slice.HINT_ERROR;
import static com.android.settings.homepage.contextualcards.ContextualCardLoader.DEFAULT_CARD_COUNT;
import static com.google.common.truth.Truth.assertThat;
@@ -27,6 +29,8 @@ import static org.mockito.Mockito.spy;
import android.content.Context;
import android.net.Uri;
import androidx.slice.Slice;
import com.android.settings.R;
import com.android.settings.slices.CustomSliceRegistry;
@@ -43,13 +47,18 @@ import java.util.stream.Collectors;
@RunWith(RobolectricTestRunner.class)
public class ContextualCardLoaderTest {
private static final String TEST_SLICE_URI = "content://test/test";
private Context mContext;
private ContextualCardLoader mContextualCardLoader;
private EligibleCardChecker mEligibleCardChecker;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mContextualCardLoader = spy(new ContextualCardLoader(mContext));
mEligibleCardChecker =
spy(new EligibleCardChecker(mContext, getContextualCard(TEST_SLICE_URI)));
}
@Test
@@ -61,16 +70,33 @@ public class ContextualCardLoaderTest {
.setSummaryText("custom_summary")
.build();
assertThat(mContextualCardLoader.isCardEligibleToDisplay(customCard)).isTrue();
assertThat(mEligibleCardChecker.isCardEligibleToDisplay(customCard)).isTrue();
}
@Test
public void isCardEligibleToDisplay_invalidScheme_returnFalse() {
final String sliceUri = "contet://com.android.settings.slices/action/flashlight";
assertThat(
mContextualCardLoader.isCardEligibleToDisplay(
getContextualCard(sliceUri))).isFalse();
assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(sliceUri)))
.isFalse();
}
@Test
public void isCardEligibleToDisplay_nullSlice_returnFalse() {
doReturn(null).when(mEligibleCardChecker).bindSlice(Uri.parse(TEST_SLICE_URI));
assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI)))
.isFalse();
}
@Test
public void isCardEligibleToDisplay_errorSlice_returnFalse() {
final Slice slice = new Slice.Builder(Uri.parse(TEST_SLICE_URI))
.addHints(HINT_ERROR).build();
doReturn(slice).when(mEligibleCardChecker).bindSlice(Uri.parse(TEST_SLICE_URI));
assertThat(mEligibleCardChecker.isCardEligibleToDisplay(getContextualCard(TEST_SLICE_URI)))
.isFalse();
}
@Test