[DO NOT MERGE] Fix the blank space on contextual card loading timeout

Root cause:
Sometimes loading contextual cards exceeds 1 second and a timeout
expires. In the past, we used the timeout in order not to update
homepage UI and to avoid screen scrolling. But we've introduced a
mechanism of card space pre-allocation to avoid flickering, so when the
timeout expires, the pre-allocated space will be always blank.

Solution:
Display a card on timeout if the one-card space is pre-allocated.

Fixes: 165886791
Test: robotest
Change-Id: I79b29c5fd6d9c4fe6b53dd4f5eab4cd3a606d76d
This commit is contained in:
Jason Chiu
2020-09-08 12:17:03 +08:00
parent de28bc7c7e
commit 4753adfb52
2 changed files with 38 additions and 4 deletions

View File

@@ -16,6 +16,7 @@
package com.android.settings.homepage.contextualcards;
import static com.android.settings.homepage.contextualcards.ContextualCardLoader.CONTEXTUAL_CARD_COUNT;
import static com.android.settings.homepage.contextualcards.ContextualCardManager.KEY_CONTEXTUAL_CARDS;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_FULL_WIDTH;
import static com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer.VIEW_TYPE_HALF_WIDTH;
@@ -307,7 +308,7 @@ public class ContextualCardManagerTest {
}
@Test
public void onFinishCardLoading_fastLoad_shouldCallOnContextualCardUpdated() {
public void onFinishCardLoading_fastLoad_shouldUpdateContextualCard() {
mManager.mStartTime = System.currentTimeMillis();
final ContextualCardManager manager = spy(mManager);
doNothing().when(manager).onContextualCardUpdated(anyMap());
@@ -318,7 +319,7 @@ public class ContextualCardManagerTest {
}
@Test
public void onFinishCardLoading_slowLoad_shouldSkipOnContextualCardUpdated() {
public void onFinishCardLoading_slowLoadAndNoCard_shouldNotUpdateContextualCard() {
mManager.mStartTime = 0;
final ContextualCardManager manager = spy(mManager);
doNothing().when(manager).onContextualCardUpdated(anyMap());
@@ -328,6 +329,30 @@ public class ContextualCardManagerTest {
verify(manager, never()).onContextualCardUpdated(anyMap());
}
@Test
public void onFinishCardLoading_slowLoadAndNotPreAllocateSpace_shouldNotUpdateContextualCard() {
mManager.mStartTime = 0;
Settings.Global.putInt(mContext.getContentResolver(), CONTEXTUAL_CARD_COUNT, 3);
final ContextualCardManager manager = spy(mManager);
doNothing().when(manager).onContextualCardUpdated(anyMap());
manager.onFinishCardLoading(Arrays.asList(buildContextualCard(TEST_SLICE_URI)));
verify(manager, never()).onContextualCardUpdated(anyMap());
}
@Test
public void onFinishCardLoading_slowLoadAndPreAllocateSpace_shouldUpdateContextualCard() {
mManager.mStartTime = 0;
Settings.Global.putInt(mContext.getContentResolver(), CONTEXTUAL_CARD_COUNT, 1);
final ContextualCardManager manager = spy(mManager);
doNothing().when(manager).onContextualCardUpdated(anyMap());
manager.onFinishCardLoading(Arrays.asList(buildContextualCard(TEST_SLICE_URI)));
verify(manager).onContextualCardUpdated(anyMap());
}
@Test
public void onFinishCardLoading_newLaunch_twoLoadedCards_shouldShowTwoCards() {
mManager.mStartTime = System.currentTimeMillis();