TwilightService v2.0
- Switched to using CalendarAstronomer for more accurate sunrise/sunset
times.
- Exposed sunrise/sunset times via TwilightState so that clients can
track the current twilight period and perform their own
interpolations.
- Adopted LocationRequest API for fused location updates:
(low power, min 1h, max 10m).
- TwilightService is now only activated when a listener is registered,
minimizing impact to system health on platforms / configurations
where twilight state is not needed.
Bug: 28588307
Bug: 30190450
Bug: 30282370
Bug: 30650316
Change-Id: Ic5c94d8608e8bb3a3d895e623676a1468d4abdcd
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 6f713cd..bb5f62b 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -16,6 +16,7 @@
package com.android.server;
+import android.annotation.Nullable;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
@@ -155,8 +156,13 @@
private final TwilightListener mTwilightListener = new TwilightListener() {
@Override
- public void onTwilightStateChanged() {
- updateTwilight();
+ public void onTwilightStateChanged(@Nullable TwilightState state) {
+ synchronized (mLock) {
+ if (mNightMode == UiModeManager.MODE_NIGHT_AUTO) {
+ updateComputedNightModeLocked();
+ updateLocked(0, 0);
+ }
+ }
}
};
@@ -344,8 +350,8 @@
pw.print(" mSystemReady="); pw.println(mSystemReady);
if (mTwilightManager != null) {
// We may not have a TwilightManager.
- pw.print(" mTwilightService.getCurrentState()=");
- pw.println(mTwilightManager.getCurrentState());
+ pw.print(" mTwilightService.getLastTwilightState()=");
+ pw.println(mTwilightManager.getLastTwilightState());
}
}
}
@@ -355,9 +361,6 @@
if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
synchronized (mLock) {
mTwilightManager = getLocalService(TwilightManager.class);
- if (mTwilightManager != null) {
- mTwilightManager.registerListener(mTwilightListener, mHandler);
- }
mSystemReady = true;
mCarModeEnabled = mDockState == Intent.EXTRA_DOCK_STATE_CAR;
updateComputedNightModeLocked();
@@ -411,10 +414,16 @@
}
if (mNightMode == UiModeManager.MODE_NIGHT_AUTO) {
+ if (mTwilightManager != null) {
+ mTwilightManager.registerListener(mTwilightListener, mHandler);
+ }
updateComputedNightModeLocked();
uiMode |= mComputedNightMode ? Configuration.UI_MODE_NIGHT_YES
: Configuration.UI_MODE_NIGHT_NO;
} else {
+ if (mTwilightManager != null) {
+ mTwilightManager.unregisterListener(mTwilightListener);
+ }
uiMode |= mNightMode << 4;
}
@@ -668,18 +677,9 @@
}
}
- void updateTwilight() {
- synchronized (mLock) {
- if (mNightMode == UiModeManager.MODE_NIGHT_AUTO) {
- updateComputedNightModeLocked();
- updateLocked(0, 0);
- }
- }
- }
-
private void updateComputedNightModeLocked() {
if (mTwilightManager != null) {
- TwilightState state = mTwilightManager.getCurrentState();
+ TwilightState state = mTwilightManager.getLastTwilightState();
if (state != null) {
mComputedNightMode = state.isNight();
}