From 07933cb96788ea5005a98e6c7413371cd8f246c7 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 12 Dec 2018 13:40:22 -0800 Subject: [PATCH 1/2] Set setting back to default when turning off dev option When turning off developer options, mobile data always on setting should be set back to default, which is ON not OFF. Change-Id: I257ba108976b05162fa3cea6e48f3490e9c64f80 Fixes: 119719605 Test: robotests --- .../development/MobileDataAlwaysOnPreferenceController.java | 4 ++-- .../MobileDataAlwaysOnPreferenceControllerTest.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) 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/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); } } From ad12b76a984474c4b285e3064f535dfb9397f6e5 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 12 Dec 2018 15:07:59 -0800 Subject: [PATCH 2/2] Add a timeout waiting for contextual card loader. - Intially setting it to 1 second. - Also changed card appear animation from drop in to fade in. It looks less janky if we don't animate any size change. - And some random code cleanup Change-Id: I6e73bcf98fd9aa1d76ae002b94ab5b068dfecf1e Fixes: 120916829 Test: robotests --- ...ll_down.xml => item_animation_fade_in.xml} | 15 ----------- ..._down.xml => layout_animation_fade_in.xml} | 2 +- res/layout/settings_homepage.xml | 2 +- .../ContextualCardFeatureProvider.java | 8 +++--- .../ContextualCardFeatureProviderImpl.java | 9 +++---- .../contextualcards/ContextualCardLoader.java | 2 ++ .../ContextualCardManager.java | 17 +++++++----- .../ConditionContextualCardController.java | 1 - .../ContextualCardManagerTest.java | 27 +++++++++++++++++++ 9 files changed, 50 insertions(+), 33 deletions(-) rename res/anim/{item_animation_fall_down.xml => item_animation_fade_in.xml} (61%) rename res/anim/{layout_animation_fall_down.xml => layout_animation_fade_in.xml} (89%) 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/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 e631d22e216..802d9166b84 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/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()