From 4346f63dbfb23379d967c793dd0851d408f48a2e Mon Sep 17 00:00:00 2001 From: Justin Klaassen Date: Mon, 8 Aug 2016 15:01:47 -0700 Subject: [PATCH] Make NightDisplayService robust to early alarms Bug: 30743700 Use the same time for calculating the next activated state and scheduling the next alarm. This prevents the alarm from being scheduled incorrectly if the activated state is updated slightly before the scheduled start or end time. Change-Id: I690aebddd28547a25b507c227c4527ffdd7c6a02 --- .../com/android/server/display/NightDisplayService.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/display/NightDisplayService.java b/services/core/java/com/android/server/display/NightDisplayService.java index d9af7cb913ee..07fa2ce01b3b 100644 --- a/services/core/java/com/android/server/display/NightDisplayService.java +++ b/services/core/java/com/android/server/display/NightDisplayService.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.TypeEvaluator; import android.animation.ValueAnimator; +import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AlarmManager; import android.content.BroadcastReceiver; @@ -361,13 +362,12 @@ public final class NightDisplayService extends SystemService if (setActivated) { mController.setActivated(activated); } - updateNextAlarm(); + updateNextAlarm(mIsActivated, now); } - private void updateNextAlarm() { - if (mIsActivated != null) { - final Calendar now = Calendar.getInstance(); - final Calendar next = mIsActivated ? mEndTime.getDateTimeAfter(now) + private void updateNextAlarm(@Nullable Boolean activated, @NonNull Calendar now) { + if (activated != null) { + final Calendar next = activated ? mEndTime.getDateTimeAfter(now) : mStartTime.getDateTimeAfter(now); mAlarmManager.setExact(AlarmManager.RTC, next.getTimeInMillis(), TAG, this, null); } @@ -396,10 +396,11 @@ public final class NightDisplayService extends SystemService @Override public void onActivated(boolean activated) { + final Calendar now = Calendar.getInstance(); if (mIsActivated != null) { - mLastActivatedTime = Calendar.getInstance(); + mLastActivatedTime = now; } - updateNextAlarm(); + updateNextAlarm(activated, now); } @Override -- 2.11.0