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");
@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
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);
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;
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;
}
package com.android.settings.dashboard.suggestions;
+import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
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;
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;
private SuggestionParser mSuggestionParser;
@Mock
private Tile mSuggestion;
+ @Mock
+ private ActivityManager mActivityManager;
private FakeFeatureFactory mFactory;
private SuggestionFeatureProviderImpl mProvider;
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";
}
@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);