From 1e0b51218beb7ac6b603b841f802c5ea9bf56a08 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 6 Jul 2017 15:59:31 -0700 Subject: [PATCH] Disable suggestion on low memory devices Change-Id: I9d22170845661fc8b48b116c9b09f758926c096f Fix: 63157777 Test: make RunSettingsRoboTests --- .../settings/dashboard/DashboardSummary.java | 21 ++++++++++++++------- .../suggestions/SuggestionFeatureProvider.java | 5 +++++ .../suggestions/SuggestionFeatureProviderImpl.java | 9 ++++++++- .../SuggestionFeatureProviderImplTest.java | 22 ++++++++++++++++++++-- 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index 71a4d8f3db..0a4c2b9728 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -94,9 +94,11 @@ public class DashboardSummary extends InstrumentedFragment mConditionManager = ConditionManager.get(activity, false); getLifecycle().addObserver(mConditionManager); - mSuggestionParser = new SuggestionParser(activity, - mSuggestionFeatureProvider.getSharedPrefs(activity), R.xml.suggestion_ordering); - mSuggestionsChecks = new SuggestionsChecks(getContext()); + if (mSuggestionFeatureProvider.isSuggestionEnabled(activity)) { + mSuggestionParser = new SuggestionParser(activity, + mSuggestionFeatureProvider.getSharedPrefs(activity), R.xml.suggestion_ordering); + mSuggestionsChecks = new SuggestionsChecks(getContext()); + } if (DEBUG_TIMING) { Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) + " ms"); @@ -206,11 +208,16 @@ public class DashboardSummary extends InstrumentedFragment @VisibleForTesting void rebuildUI() { - new SuggestionLoader().execute(); - // Set categories on their own if loading suggestions takes too long. - mHandler.postDelayed(() -> { + if (!mSuggestionFeatureProvider.isSuggestionEnabled(getContext())) { + Log.d(TAG, "Suggestion feature is disabled, skipping suggestion entirely"); updateCategoryAndSuggestion(null /* tiles */); - }, MAX_WAIT_MILLIS); + } else { + new SuggestionLoader().execute(); + // Set categories on their own if loading suggestions takes too long. + mHandler.postDelayed(() -> { + updateCategoryAndSuggestion(null /* tiles */); + }, MAX_WAIT_MILLIS); + } } @Override diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java index 5dc8892eca..d19a7781bf 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java @@ -30,6 +30,11 @@ import java.util.List; public interface SuggestionFeatureProvider { /** + * Whether or not the whole suggestion feature is enabled. + */ + boolean isSuggestionEnabled(Context context); + + /** * Returns true if smart suggestion should be used instead of xml based SuggestionParser. */ boolean isSmartSuggestionEnabled(Context context); diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java index de1a4d4e38..b4e5ded418 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java @@ -16,12 +16,12 @@ package com.android.settings.dashboard.suggestions; +import android.app.ActivityManager; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager; -import android.os.UserHandle; import android.provider.Settings.Secure; import android.support.annotation.NonNull; import android.support.annotation.VisibleForTesting; @@ -67,6 +67,13 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider private final AmbientDisplayConfiguration mAmbientDisplayConfig; @Override + public boolean isSuggestionEnabled(Context context) { + final ActivityManager am = + (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + return !am.isLowRamDevice(); + } + + @Override public boolean isSmartSuggestionEnabled(Context context) { return false; } diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java index a7e306cc0f..824aa1f598 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java @@ -16,6 +16,7 @@ package com.android.settings.dashboard.suggestions; +import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -25,8 +26,8 @@ import android.provider.Settings.Secure; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; -import com.android.settings.Settings.AmbientDisplaySuggestionActivity; import com.android.settings.Settings.AmbientDisplayPickupSuggestionActivity; +import com.android.settings.Settings.AmbientDisplaySuggestionActivity; import com.android.settings.Settings.DoubleTapPowerSuggestionActivity; import com.android.settings.Settings.DoubleTwistSuggestionActivity; import com.android.settings.Settings.NightDisplaySuggestionActivity; @@ -53,7 +54,6 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import static com.google.common.truth.Truth.assertThat; @@ -82,6 +82,8 @@ public class SuggestionFeatureProviderImplTest { private SuggestionParser mSuggestionParser; @Mock private Tile mSuggestion; + @Mock + private ActivityManager mActivityManager; private FakeFeatureFactory mFactory; private SuggestionFeatureProviderImpl mProvider; @@ -92,6 +94,8 @@ public class SuggestionFeatureProviderImplTest { FakeFeatureFactory.setupForTest(mContext); mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); when(mContext.getApplicationContext()).thenReturn(RuntimeEnvironment.application); + when(mContext.getSystemService(Context.ACTIVITY_SERVICE)).thenReturn(mActivityManager); + when(mActivityManager.isLowRamDevice()).thenReturn(false); mSuggestion.intent = new Intent().setClassName("pkg", "cls"); mSuggestion.category = "category"; @@ -242,6 +246,20 @@ public class SuggestionFeatureProviderImplTest { } @Test + public void isSuggestionEnabled_isLowMemoryDevice_shouldReturnFalse() { + when(mActivityManager.isLowRamDevice()).thenReturn(true); + + assertThat(mProvider.isSuggestionEnabled(mContext)).isFalse(); + } + + @Test + public void isSuggestionEnabled_isNotLowMemoryDevice_shouldReturnTrue() { + when(mActivityManager.isLowRamDevice()).thenReturn(false); + + assertThat(mProvider.isSuggestionEnabled(mContext)).isTrue(); + } + + @Test public void dismissSuggestion_noParserOrSuggestion_noop() { mProvider.dismissSuggestion(mContext, null, null); mProvider.dismissSuggestion(mContext, mSuggestionParser, null); -- 2.11.0