Handle night display state when timezone changes
Bug: 64458884
Test: make RunSettingsRoboTests -j100
Change-Id: I1f0c073b796aa6826c236757e19c6ff6d5cb7602
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index f8b5a8b..5764171 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -161,8 +161,7 @@
@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 38b57a2..b966530 100644
--- a/src/com/android/settings/display/NightDisplayPreference.java
+++ b/src/com/android/settings/display/NightDisplayPreference.java
@@ -22,6 +22,7 @@
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 @@
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 @@
}
@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 23ddf07..f9568fb 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.SettingsPreferenceFragment;
import java.text.DateFormat;
+import java.time.LocalTime;
import java.util.Calendar;
import java.util.TimeZone;
@@ -144,7 +145,7 @@
@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 @@
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 @@
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 @@
}
@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 45d04a4..8246fda 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.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 @@
}
@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 0f61a5d..8b2a27b 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 @@
int userHandle) {
final Table<Integer, String, Object> 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;
}
}