From 8851ac8389ef6f4ad8b5cc90422c34a52163f80d Mon Sep 17 00:00:00 2001 From: Christine Franks Date: Fri, 14 Jun 2019 09:44:43 -0700 Subject: [PATCH] Set exact night display last activated time For automatic changes occuring precisely at a specific time, being a few milliseconds off could lead to the system interpreting that as a manual change. This is most apparent when a time update occurs after restarting the device. Bug: 132844043 Test: atest FrameworksServicesTest:ColorDisplayServiceTest Change-Id: I8de63f174a7e2f37623e04647bc55172a33730b8 --- .../server/display/color/ColorDisplayService.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/display/color/ColorDisplayService.java b/services/core/java/com/android/server/display/color/ColorDisplayService.java index fe75a81ee8054..27acb6bb485dc 100644 --- a/services/core/java/com/android/server/display/color/ColorDisplayService.java +++ b/services/core/java/com/android/server/display/color/ColorDisplayService.java @@ -935,7 +935,7 @@ public final class ColorDisplayService extends SystemService { if (mNightDisplayTintController.isActivatedStateNotSet() || (mNightDisplayTintController.isActivated() != activate)) { - mNightDisplayTintController.setActivated(activate); + mNightDisplayTintController.setActivated(activate, activate ? start : end); } updateNextAlarm(mNightDisplayTintController.isActivated(), now); @@ -1131,6 +1131,14 @@ public final class ColorDisplayService extends SystemService { @Override public void setActivated(Boolean activated) { + setActivated(activated, LocalDateTime.now()); + } + + /** + * Use directly when it is important that the last activation time be exact (for example, an + * automatic change). Otherwise use {@link #setActivated(Boolean)}. + */ + public void setActivated(Boolean activated, @NonNull LocalDateTime lastActivationTime) { if (activated == null) { super.setActivated(null); return; @@ -1142,7 +1150,7 @@ public final class ColorDisplayService extends SystemService { // This is a true state change, so set this as the last activation time. Secure.putStringForUser(getContext().getContentResolver(), Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, - LocalDateTime.now().toString(), + lastActivationTime.toString(), mCurrentUser); }