Disable suggestion on low memory devices

Change-Id: I9d22170845661fc8b48b116c9b09f758926c096f
Fix: 63157777
Test: make RunSettingsRoboTests
This commit is contained in:
Fan Zhang
2017-07-06 15:59:31 -07:00
parent 08da5d84c0
commit 1e0b51218b
4 changed files with 47 additions and 10 deletions

View File

@@ -94,9 +94,11 @@ public class DashboardSummary extends InstrumentedFragment
mConditionManager = ConditionManager.get(activity, false); mConditionManager = ConditionManager.get(activity, false);
getLifecycle().addObserver(mConditionManager); getLifecycle().addObserver(mConditionManager);
if (mSuggestionFeatureProvider.isSuggestionEnabled(activity)) {
mSuggestionParser = new SuggestionParser(activity, mSuggestionParser = new SuggestionParser(activity,
mSuggestionFeatureProvider.getSharedPrefs(activity), R.xml.suggestion_ordering); mSuggestionFeatureProvider.getSharedPrefs(activity), R.xml.suggestion_ordering);
mSuggestionsChecks = new SuggestionsChecks(getContext()); mSuggestionsChecks = new SuggestionsChecks(getContext());
}
if (DEBUG_TIMING) { if (DEBUG_TIMING) {
Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
+ " ms"); + " ms");
@@ -206,12 +208,17 @@ public class DashboardSummary extends InstrumentedFragment
@VisibleForTesting @VisibleForTesting
void rebuildUI() { void rebuildUI() {
if (!mSuggestionFeatureProvider.isSuggestionEnabled(getContext())) {
Log.d(TAG, "Suggestion feature is disabled, skipping suggestion entirely");
updateCategoryAndSuggestion(null /* tiles */);
} else {
new SuggestionLoader().execute(); new SuggestionLoader().execute();
// Set categories on their own if loading suggestions takes too long. // Set categories on their own if loading suggestions takes too long.
mHandler.postDelayed(() -> { mHandler.postDelayed(() -> {
updateCategoryAndSuggestion(null /* tiles */); updateCategoryAndSuggestion(null /* tiles */);
}, MAX_WAIT_MILLIS); }, MAX_WAIT_MILLIS);
} }
}
@Override @Override
public void onCategoriesChanged() { public void onCategoriesChanged() {

View File

@@ -29,6 +29,11 @@ import java.util.List;
/** Interface should be implemented if you have added new suggestions */ /** Interface should be implemented if you have added new suggestions */
public interface SuggestionFeatureProvider { 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. * Returns true if smart suggestion should be used instead of xml based SuggestionParser.
*/ */

View File

@@ -16,12 +16,12 @@
package com.android.settings.dashboard.suggestions; package com.android.settings.dashboard.suggestions;
import android.app.ActivityManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.provider.Settings.Secure; import android.provider.Settings.Secure;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
@@ -66,6 +66,13 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
private final MetricsFeatureProvider mMetricsFeatureProvider; private final MetricsFeatureProvider mMetricsFeatureProvider;
private final AmbientDisplayConfiguration mAmbientDisplayConfig; private final AmbientDisplayConfiguration mAmbientDisplayConfig;
@Override
public boolean isSuggestionEnabled(Context context) {
final ActivityManager am =
(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
return !am.isLowRamDevice();
}
@Override @Override
public boolean isSmartSuggestionEnabled(Context context) { public boolean isSmartSuggestionEnabled(Context context) {
return false; return false;

View File

@@ -16,6 +16,7 @@
package com.android.settings.dashboard.suggestions; package com.android.settings.dashboard.suggestions;
import android.app.ActivityManager;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -25,8 +26,8 @@ import android.provider.Settings.Secure;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings.AmbientDisplaySuggestionActivity;
import com.android.settings.Settings.AmbientDisplayPickupSuggestionActivity; import com.android.settings.Settings.AmbientDisplayPickupSuggestionActivity;
import com.android.settings.Settings.AmbientDisplaySuggestionActivity;
import com.android.settings.Settings.DoubleTapPowerSuggestionActivity; import com.android.settings.Settings.DoubleTapPowerSuggestionActivity;
import com.android.settings.Settings.DoubleTwistSuggestionActivity; import com.android.settings.Settings.DoubleTwistSuggestionActivity;
import com.android.settings.Settings.NightDisplaySuggestionActivity; import com.android.settings.Settings.NightDisplaySuggestionActivity;
@@ -53,7 +54,6 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -82,6 +82,8 @@ public class SuggestionFeatureProviderImplTest {
private SuggestionParser mSuggestionParser; private SuggestionParser mSuggestionParser;
@Mock @Mock
private Tile mSuggestion; private Tile mSuggestion;
@Mock
private ActivityManager mActivityManager;
private FakeFeatureFactory mFactory; private FakeFeatureFactory mFactory;
private SuggestionFeatureProviderImpl mProvider; private SuggestionFeatureProviderImpl mProvider;
@@ -92,6 +94,8 @@ public class SuggestionFeatureProviderImplTest {
FakeFeatureFactory.setupForTest(mContext); FakeFeatureFactory.setupForTest(mContext);
mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
when(mContext.getApplicationContext()).thenReturn(RuntimeEnvironment.application); 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.intent = new Intent().setClassName("pkg", "cls");
mSuggestion.category = "category"; mSuggestion.category = "category";
@@ -241,6 +245,20 @@ public class SuggestionFeatureProviderImplTest {
SwipeToNotificationSuggestionActivity.class))).isTrue(); SwipeToNotificationSuggestionActivity.class))).isTrue();
} }
@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 @Test
public void dismissSuggestion_noParserOrSuggestion_noop() { public void dismissSuggestion_noParserOrSuggestion_noop() {
mProvider.dismissSuggestion(mContext, null, null); mProvider.dismissSuggestion(mContext, null, null);