OSDN Git Service

Improve Night Light suggestion criterion
authorSean Stout <sstout@google.com>
Fri, 2 Feb 2018 02:01:05 +0000 (18:01 -0800)
committerSean Stout <sstout@google.com>
Fri, 30 Mar 2018 23:12:16 +0000 (23:12 +0000)
Night Light suggestion will now show even if the user is using Night
Light in manual mode. If the user has previously tapped or dismissed the
suggestion, the suggestion will not show again.

Bug: 68938869
Test: make ROBOTEST_FILTER=\
"(NightDisplayPreferenceControllerTest|SuggestionFeatureProviderImplTest)" \
RunSettingsRoboTests

Change-Id: Iea838df043d75dfa73a1a383275dc42956374113

src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
src/com/android/settings/display/NightDisplayPreferenceController.java
tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
tests/robotests/src/com/android/settings/display/NightDisplayPreferenceControllerTest.java [new file with mode: 0644]

index 07ffb8a..d0c0b25 100644 (file)
@@ -18,10 +18,8 @@ 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.provider.Settings.Secure;
 import android.service.settings.suggestions.Suggestion;
 import android.support.annotation.NonNull;
 import android.support.annotation.VisibleForTesting;
@@ -31,6 +29,7 @@ import android.util.Pair;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.Settings.NightDisplaySuggestionActivity;
+import com.android.settings.display.NightDisplayPreferenceController;
 import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity;
 import com.android.settings.fingerprint.FingerprintSuggestionActivity;
 import com.android.settings.overlay.FeatureFactory;
@@ -86,7 +85,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
         } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) {
             return WifiCallingSuggestionActivity.isSuggestionComplete(context);
         } else if (className.equals(NightDisplaySuggestionActivity.class.getName())) {
-            return hasUsedNightDisplay(context);
+            return NightDisplayPreferenceController.isSuggestionComplete(context);
         } else if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
             return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context);
         }
@@ -134,11 +133,4 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
                 MetricsEvent.FIELD_SETTINGS_SMART_SUGGESTIONS_ENABLED,
                 isSmartSuggestionEnabled ? 1 : 0)};
     }
-
-    @VisibleForTesting
-    boolean hasUsedNightDisplay(Context context) {
-        final ContentResolver cr = context.getContentResolver();
-        return Secure.getInt(cr, Secure.NIGHT_DISPLAY_AUTO_MODE, 0) != 0
-                || Secure.getString(cr, Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME) != null;
-    }
 }
index 2761eca..5e8dfe0 100644 (file)
@@ -28,6 +28,11 @@ public class NightDisplayPreferenceController extends AbstractPreferenceControll
         super(context);
     }
 
+    public static boolean isSuggestionComplete(Context context) {
+        final ColorDisplayController controller = new ColorDisplayController(context);
+        return controller.getAutoMode() != ColorDisplayController.AUTO_MODE_DISABLED;
+    }
+
     @Override
     public boolean isAvailable() {
         return ColorDisplayController.isAvailable(mContext);
index f1fe249..bb68c0d 100644 (file)
@@ -163,46 +163,6 @@ public class SuggestionFeatureProviderImplTest {
     }
 
     @Test
-    public void hasUsedNightDisplay_returnsFalse_byDefault() {
-        assertThat(mProvider.hasUsedNightDisplay(mContext)).isFalse();
-    }
-
-    @Test
-    public void hasUsedNightDisplay_returnsTrue_ifPreviouslyActivatedAndManual() {
-        Secure.putString(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
-                LocalDateTime.now().toString());
-        Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
-        assertThat(mProvider.hasUsedNightDisplay(mContext)).isTrue();
-    }
-
-    @Test
-    public void nightDisplaySuggestion_isCompleted_ifPreviouslyActivated() {
-        Secure.putString(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
-                LocalDateTime.now().toString());
-        final ComponentName componentName =
-                new ComponentName(mContext, NightDisplaySuggestionActivity.class);
-        assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue();
-    }
-
-    @Test
-    public void nightDisplaySuggestion_isCompleted_ifNonManualMode() {
-        Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
-        final ComponentName componentName =
-                new ComponentName(mContext, NightDisplaySuggestionActivity.class);
-        assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue();
-    }
-
-    @Test
-    public void nightDisplaySuggestion_isCompleted_ifPreviouslyCleared() {
-        Secure.putString(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
-                null);
-        Secure.putInt(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_AUTO_MODE, 1);
-        final ComponentName componentName =
-                new ComponentName(mContext, NightDisplaySuggestionActivity.class);
-        assertThat(mProvider.isSuggestionComplete(mContext, componentName)).isTrue();
-    }
-
-    @Test
     public void nightDisplaySuggestion_isNotCompleted_byDefault() {
         final ComponentName componentName =
                 new ComponentName(mContext, NightDisplaySuggestionActivity.class);
diff --git a/tests/robotests/src/com/android/settings/display/NightDisplayPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/NightDisplayPreferenceControllerTest.java
new file mode 100644 (file)
index 0000000..3bc7d52
--- /dev/null
@@ -0,0 +1,61 @@
+package com.android.settings.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.Application;
+import android.content.ComponentName;
+import android.provider.Settings.Secure;
+import com.android.internal.app.ColorDisplayController;
+import com.android.settings.Settings.NightDisplaySuggestionActivity;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class NightDisplayPreferenceControllerTest {
+
+  private NightDisplayPreferenceController mPreferenceController;
+
+  @Before
+  public void setUp() {
+    mPreferenceController = new NightDisplayPreferenceController(RuntimeEnvironment.application);
+  }
+
+  @After
+  public void tearDown() {
+    mPreferenceController = null;
+  }
+
+  @Test
+  public void nightDisplaySuggestion_isNotCompleted_ifAutoModeDisabled() {
+    final Application context = RuntimeEnvironment.application;
+    Secure.putInt(context.getContentResolver(),
+        Secure.NIGHT_DISPLAY_AUTO_MODE, ColorDisplayController.AUTO_MODE_DISABLED);
+    final ComponentName componentName =
+        new ComponentName(context, NightDisplaySuggestionActivity.class);
+    assertThat(mPreferenceController.isSuggestionComplete(context)).isFalse();
+  }
+
+  @Test
+  public void nightDisplaySuggestion_isCompleted_ifAutoModeCustom() {
+    final Application context = RuntimeEnvironment.application;
+    Secure.putInt(context.getContentResolver(),
+        Secure.NIGHT_DISPLAY_AUTO_MODE, ColorDisplayController.AUTO_MODE_CUSTOM);
+    final ComponentName componentName =
+        new ComponentName(context, NightDisplaySuggestionActivity.class);
+    assertThat(mPreferenceController.isSuggestionComplete(context)).isTrue();
+  }
+
+  @Test
+  public void nightDisplaySuggestion_isCompleted_ifAutoModeTwilight() {
+    final Application context = RuntimeEnvironment.application;
+    Secure.putInt(context.getContentResolver(),
+        Secure.NIGHT_DISPLAY_AUTO_MODE, ColorDisplayController.AUTO_MODE_TWILIGHT);
+    final ComponentName componentName =
+        new ComponentName(context, NightDisplaySuggestionActivity.class);
+    assertThat(mPreferenceController.isSuggestionComplete(context)).isTrue();
+  }
+}