From 2ae92b541d6fdd59ce9615c2ee6d32cf7b7cc1d1 Mon Sep 17 00:00:00 2001 From: Sean Stout Date: Thu, 1 Feb 2018 18:01:05 -0800 Subject: [PATCH] Improve Night Light suggestion criterion 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 --- .../suggestions/SuggestionFeatureProviderImpl.java | 12 +---- .../display/NightDisplayPreferenceController.java | 5 ++ .../SuggestionFeatureProviderImplTest.java | 40 -------------- .../NightDisplayPreferenceControllerTest.java | 61 ++++++++++++++++++++++ 4 files changed, 68 insertions(+), 50 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/display/NightDisplayPreferenceControllerTest.java diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java index 07ffb8a4dd..d0c0b253ba 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java @@ -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; - } } diff --git a/src/com/android/settings/display/NightDisplayPreferenceController.java b/src/com/android/settings/display/NightDisplayPreferenceController.java index 2761eca752..5e8dfe01bd 100644 --- a/src/com/android/settings/display/NightDisplayPreferenceController.java +++ b/src/com/android/settings/display/NightDisplayPreferenceController.java @@ -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); 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 f1fe249e29..bb68c0dd9c 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java @@ -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 index 0000000000..3bc7d521ee --- /dev/null +++ b/tests/robotests/src/com/android/settings/display/NightDisplayPreferenceControllerTest.java @@ -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(); + } +} -- 2.11.0