OSDN Git Service

Disable suggestion on low memory devices
authorFan Zhang <zhfan@google.com>
Thu, 6 Jul 2017 22:59:31 +0000 (15:59 -0700)
committerFan Zhang <zhfan@google.com>
Thu, 6 Jul 2017 23:13:28 +0000 (16:13 -0700)
Change-Id: I9d22170845661fc8b48b116c9b09f758926c096f
Fix: 63157777
Test: make RunSettingsRoboTests

src/com/android/settings/dashboard/DashboardSummary.java
src/com/android/settings/dashboard/suggestions/SuggestionFeatureProvider.java
src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java

index 71a4d8f..0a4c2b9 100644 (file)
@@ -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
index 5dc8892..d19a778 100644 (file)
@@ -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);
index de1a4d4..b4e5ded 100644 (file)
 
 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;
     }
index a7e306c..824aa1f 100644 (file)
@@ -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);