From c6c299bdbba614a4b792f74b9b3cb5f7471edbe0 Mon Sep 17 00:00:00 2001 From: Christine Franks Date: Fri, 25 Aug 2017 14:02:42 -0700 Subject: [PATCH] Handle night display state when timezone changes Bug: 64458884 Test: make RunSettingsRoboTests -j100 Change-Id: I1f0c073b796aa6826c236757e19c6ff6d5cb7602 --- .../SuggestionFeatureProviderImpl.java | 5 ++-- .../display/NightDisplayPreference.java | 11 ++++---- .../display/NightDisplaySettings.java | 18 ++++++------ .../SuggestionFeatureProviderImplTest.java | 28 +++++++++++++++++-- .../shadow/ShadowSecureSettings.java | 6 +++- 5 files changed, 47 insertions(+), 21 deletions(-) diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java index f8b5a8b6a60..5764171b750 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java @@ -161,8 +161,7 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider @VisibleForTesting boolean hasUsedNightDisplay(Context context) { final ContentResolver cr = context.getContentResolver(); - final long lastActivatedTimeMillis = Secure.getLong(cr, - Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, -1); - return lastActivatedTimeMillis > 0; + 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/NightDisplayPreference.java b/src/com/android/settings/display/NightDisplayPreference.java index 38b57a2460b..b966530d9f1 100644 --- a/src/com/android/settings/display/NightDisplayPreference.java +++ b/src/com/android/settings/display/NightDisplayPreference.java @@ -22,6 +22,7 @@ import com.android.internal.app.NightDisplayController; import com.android.settings.R; import java.text.DateFormat; +import java.time.LocalTime; import java.util.Calendar; import java.util.TimeZone; @@ -58,11 +59,11 @@ public class NightDisplayPreference extends SwitchPreference mController.setListener(null); } - private String getFormattedTimeString(NightDisplayController.LocalTime localTime) { + private String getFormattedTimeString(LocalTime localTime) { final Calendar c = Calendar.getInstance(); c.setTimeZone(mTimeFormatter.getTimeZone()); - c.set(Calendar.HOUR_OF_DAY, localTime.hourOfDay); - c.set(Calendar.MINUTE, localTime.minute); + c.set(Calendar.HOUR_OF_DAY, localTime.getHour()); + c.set(Calendar.MINUTE, localTime.getMinute()); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return mTimeFormatter.format(c.getTime()); @@ -116,12 +117,12 @@ public class NightDisplayPreference extends SwitchPreference } @Override - public void onCustomStartTimeChanged(NightDisplayController.LocalTime startTime) { + public void onCustomStartTimeChanged(LocalTime startTime) { updateSummary(); } @Override - public void onCustomEndTimeChanged(NightDisplayController.LocalTime endTime) { + public void onCustomEndTimeChanged(LocalTime endTime) { updateSummary(); } } diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java index 23ddf078ac4..f9568fb6f50 100644 --- a/src/com/android/settings/display/NightDisplaySettings.java +++ b/src/com/android/settings/display/NightDisplaySettings.java @@ -32,6 +32,7 @@ import com.android.settings.widget.SeekBarPreference; import com.android.settings.SettingsPreferenceFragment; import java.text.DateFormat; +import java.time.LocalTime; import java.util.Calendar; import java.util.TimeZone; @@ -144,7 +145,7 @@ public class NightDisplaySettings extends SettingsPreferenceFragment @Override public Dialog onCreateDialog(final int dialogId) { if (dialogId == DIALOG_START_TIME || dialogId == DIALOG_END_TIME) { - final NightDisplayController.LocalTime initialTime; + final LocalTime initialTime; if (dialogId == DIALOG_START_TIME) { initialTime = mController.getCustomStartTime(); } else { @@ -156,15 +157,14 @@ public class NightDisplaySettings extends SettingsPreferenceFragment return new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { - final NightDisplayController.LocalTime time = - new NightDisplayController.LocalTime(hourOfDay, minute); + final LocalTime time = LocalTime.of(hourOfDay, minute); if (dialogId == DIALOG_START_TIME) { mController.setCustomStartTime(time); } else { mController.setCustomEndTime(time); } } - }, initialTime.hourOfDay, initialTime.minute, use24HourFormat); + }, initialTime.getHour(), initialTime.getMinute(), use24HourFormat); } return super.onCreateDialog(dialogId); } @@ -201,11 +201,11 @@ public class NightDisplaySettings extends SettingsPreferenceFragment mTemperaturePreference.setProgress(convertTemperature(colorTemperature)); } - private String getFormattedTimeString(NightDisplayController.LocalTime localTime) { + private String getFormattedTimeString(LocalTime localTime) { final Calendar c = Calendar.getInstance(); c.setTimeZone(mTimeFormatter.getTimeZone()); - c.set(Calendar.HOUR_OF_DAY, localTime.hourOfDay); - c.set(Calendar.MINUTE, localTime.minute); + c.set(Calendar.HOUR_OF_DAY, localTime.getHour()); + c.set(Calendar.MINUTE, localTime.getMinute()); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return mTimeFormatter.format(c.getTime()); @@ -221,12 +221,12 @@ public class NightDisplaySettings extends SettingsPreferenceFragment } @Override - public void onCustomStartTimeChanged(NightDisplayController.LocalTime startTime) { + public void onCustomStartTimeChanged(LocalTime startTime) { mStartTimePreference.setSummary(getFormattedTimeString(startTime)); } @Override - public void onCustomEndTimeChanged(NightDisplayController.LocalTime endTime) { + public void onCustomEndTimeChanged(LocalTime endTime) { mEndTimePreference.setSummary(getFormattedTimeString(endTime)); } 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 45d04a45657..8246fda9f36 100644 --- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java @@ -56,6 +56,7 @@ import com.android.settings.testutils.shadow.ShadowSecureSettings; import com.android.settingslib.drawer.Tile; import com.android.settingslib.suggestions.SuggestionParser; +import java.time.LocalDateTime; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -391,14 +392,35 @@ public class SuggestionFeatureProviderImplTest { } @Test - public void hasUsedNightDisplay_returnsTrue_ifPreviouslyActivated() { - Secure.putLong(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, 1L); + 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.putLong(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, 1L); + Secure.putString(mContext.getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, + LocalDateTime.now().toString()); + final ComponentName componentName = + new ComponentName(mContext, NightDisplaySuggestionActivity.class); + assertThat(mProvider.isSuggestionCompleted(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.isSuggestionCompleted(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.isSuggestionCompleted(mContext, componentName)).isTrue(); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java index 0f61a5d816e..8b2a27bd1fa 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSecureSettings.java @@ -36,7 +36,11 @@ public class ShadowSecureSettings { int userHandle) { final Table userTable = getUserTable(resolver); synchronized (userTable) { - userTable.put(userHandle, name, value); + if (value != null) { + userTable.put(userHandle, name, value); + } else { + userTable.remove(userHandle, name); + } return true; } }