diff --git a/res/anim/item_animation_fall_down.xml b/res/anim/item_animation_fade_in.xml similarity index 61% rename from res/anim/item_animation_fall_down.xml rename to res/anim/item_animation_fade_in.xml index df2451cf638..68a2713e534 100644 --- a/res/anim/item_animation_fall_down.xml +++ b/res/anim/item_animation_fade_in.xml @@ -18,25 +18,10 @@ - - - - - \ No newline at end of file diff --git a/res/anim/layout_animation_fall_down.xml b/res/anim/layout_animation_fade_in.xml similarity index 89% rename from res/anim/layout_animation_fall_down.xml rename to res/anim/layout_animation_fade_in.xml index f39735c157b..fcdb8741718 100644 --- a/res/anim/layout_animation_fall_down.xml +++ b/res/anim/layout_animation_fade_in.xml @@ -17,6 +17,6 @@ \ No newline at end of file diff --git a/res/layout/settings_homepage.xml b/res/layout/settings_homepage.xml index f027d655349..e04b372aa38 100644 --- a/res/layout/settings_homepage.xml +++ b/res/layout/settings_homepage.xml @@ -25,6 +25,6 @@ android:id="@+id/card_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:layoutAnimation="@anim/layout_animation_fall_down"/> + android:layoutAnimation="@anim/layout_animation_fade_in"/> diff --git a/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java b/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java index 78054ae2ab7..b2fa693104e 100644 --- a/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java +++ b/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java @@ -66,7 +66,7 @@ public class MobileDataAlwaysOnPreferenceController extends protected void onDeveloperOptionsSwitchDisabled() { super.onDeveloperOptionsSwitchDisabled(); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.MOBILE_DATA_ALWAYS_ON, - SETTING_VALUE_OFF); - ((SwitchPreference) mPreference).setChecked(false); + SETTING_VALUE_ON); + ((SwitchPreference) mPreference).setChecked(true); } } diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java index 8583f38c78b..5ebc924bdec 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProvider.java @@ -24,16 +24,16 @@ import java.util.List; public interface ContextualCardFeatureProvider { /** Homepage displays. */ - public void logHomepageDisplay(Context context, Long latency); + void logHomepageDisplay(Context context, long latency); /** When user clicks dismiss in contextual card */ - public void logContextualCardDismiss(Context context, ContextualCard card); + void logContextualCardDismiss(Context context, ContextualCard card); /** After ContextualCardManager decides which cards will be displayed/hidden */ - public void logContextualCardDisplay(Context context, List showedCards, + void logContextualCardDisplay(Context context, List showedCards, List hiddenCards); /** When user clicks toggle/title area of a contextual card. */ - public void logContextualCardClick(Context context, ContextualCard card, int row, + void logContextualCardClick(Context context, ContextualCard card, int row, int tapTarget); } diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java index 32a86e84389..dc295fc1f94 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardFeatureProviderImpl.java @@ -85,11 +85,10 @@ public class ContextualCardFeatureProviderImpl implements ContextualCardFeatureP private static final int TARGET_SLIDER = 3; @Override - public void logHomepageDisplay(Context context, Long latency) { - final Intent intent = new Intent(); - intent.putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_HOME_SHOW); - intent.putExtra(EXTRA_LATENCY, latency); - sendBroadcast(context, intent); + public void logHomepageDisplay(Context context, long latency) { + sendBroadcast(context, new Intent() + .putExtra(EXTRA_CONTEXTUALCARD_ACTION_TYPE, CONTEXTUAL_HOME_SHOW) + .putExtra(EXTRA_LATENCY, latency)); } @Override diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java index f32be26e433..71b262de7d7 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java @@ -31,6 +31,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.os.Looper; +import android.text.format.DateUtils; import android.util.Log; import androidx.annotation.NonNull; @@ -49,6 +50,7 @@ public class ContextualCardLoader extends AsyncLoaderCompat @VisibleForTesting static final int DEFAULT_CARD_COUNT = 4; static final int CARD_CONTENT_LOADER_ID = 1; + static final long CARD_CONTENT_LOADER_TIMEOUT_MS = DateUtils.SECOND_IN_MILLIS; private static final String TAG = "ContextualCardLoader"; diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java index 28ad0d30e8e..24266eea409 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java @@ -59,12 +59,15 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo ContextualCardUpdateListener { private static final String TAG = "ContextualCardManager"; + //The list for Settings Custom Card private static final int[] SETTINGS_CARDS = {ContextualCard.CardType.CONDITIONAL, ContextualCard.CardType.LEGACY_SUGGESTION}; @VisibleForTesting final List mContextualCards; + @VisibleForTesting + long mStartTime; private final Context mContext; private final ControllerRendererPool mControllerRendererPool; @@ -72,7 +75,6 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo private final List mLifecycleObservers; private ContextualCardUpdateListener mListener; - private long mStartTime; public ContextualCardManager(Context context, Lifecycle lifecycle) { mContext = context; @@ -169,11 +171,14 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo @Override public void onFinishCardLoading(List cards) { - onContextualCardUpdated(cards.stream().collect(groupingBy(ContextualCard::getCardType))); - final long elapsedTime = System.currentTimeMillis() - mStartTime; - final ContextualCardFeatureProvider contextualCardFeatureProvider = - FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(); - contextualCardFeatureProvider.logHomepageDisplay(mContext, elapsedTime); + final long loadTime = System.currentTimeMillis() - mStartTime; + if (loadTime <= ContextualCardLoader.CARD_CONTENT_LOADER_TIMEOUT_MS) { + onContextualCardUpdated( + cards.stream().collect(groupingBy(ContextualCard::getCardType))); + } + final long totalTime = System.currentTimeMillis() - mStartTime; + FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider() + .logHomepageDisplay(mContext, totalTime); } public ControllerRendererPool getControllerRendererPool() { diff --git a/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardController.java b/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardController.java index 02854c2213f..834ebbc6539 100644 --- a/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardController.java +++ b/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardController.java @@ -109,7 +109,6 @@ public class ConditionContextualCardController implements ContextualCardControll final Map> conditionalCards = buildConditionalCardsWithFooterOrHeader(conditionCards); mListener.onContextualCardUpdated(conditionalCards); - } /** diff --git a/tests/robotests/src/com/android/settings/development/MobileDataAlwaysOnPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/MobileDataAlwaysOnPreferenceControllerTest.java index a578429d63c..91bdad39f91 100644 --- a/tests/robotests/src/com/android/settings/development/MobileDataAlwaysOnPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/MobileDataAlwaysOnPreferenceControllerTest.java @@ -96,13 +96,13 @@ public class MobileDataAlwaysOnPreferenceControllerTest { } @Test - public void onDeveloperOptionsSwitchDisabled_preferenceShouldBeDisabled() { + public void onDeveloperOptionsSwitchDisabled_shouldDisableMobileDataAlwaysOn() { mController.onDeveloperOptionsSwitchDisabled(); final int mode = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.MOBILE_DATA_ALWAYS_ON, -1 /* default */); - assertThat(mode).isEqualTo(MobileDataAlwaysOnPreferenceController.SETTING_VALUE_OFF); + assertThat(mode).isEqualTo(MobileDataAlwaysOnPreferenceController.SETTING_VALUE_ON); verify(mPreference).setEnabled(false); - verify(mPreference).setChecked(false); + verify(mPreference).setChecked(true); } } diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java index 64a7c9cfcd6..81f87b98d81 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/ContextualCardManagerTest.java @@ -18,6 +18,13 @@ package com.android.settings.homepage.contextualcards; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyMap; +import static org.mockito.ArgumentMatchers.nullable; +import static org.mockito.Mockito.doNothing; +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; import android.util.ArrayMap; @@ -36,6 +43,7 @@ import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.List; +import java.util.Map; @RunWith(SettingsRobolectricTestRunner.class) public class ContextualCardManagerTest { @@ -107,6 +115,25 @@ public class ContextualCardManagerTest { .isEqualTo(ContextualCard.CardType.CONDITIONAL_FOOTER); } + @Test + public void onFinishCardLoading_fastLoad_shouldCallOnContextualCardUpdated() { + mManager.mStartTime = System.currentTimeMillis(); + final ContextualCardManager manager = spy(mManager); + doNothing().when(manager).onContextualCardUpdated(anyMap()); + + manager.onFinishCardLoading(new ArrayList<>()); + verify(manager).onContextualCardUpdated(nullable(Map.class)); + } + + @Test + public void onFinishCardLoading_slowLoad_shouldSkipOnContextualCardUpdated() { + mManager.mStartTime = 0; + final ContextualCardManager manager = spy(mManager); + doNothing().when(manager).onContextualCardUpdated(anyMap()); + + manager.onFinishCardLoading(new ArrayList<>()); + verify(manager, never()).onContextualCardUpdated(anyMap()); + } private ContextualCard buildContextualCard(String sliceUri) { return new ContextualCard.Builder()