Merge "Handle night display state when timezone changes" into oc-mr1-dev
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index 3d40d96..347e165 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -166,8 +166,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 c343f97..82bef2d 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImplTest.java
@@ -58,6 +58,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;
@@ -402,14 +403,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;
         }
     }