diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index f8e58362e7ae8..80bdf1ffade6e 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -20,6 +20,7 @@ import com.android.internal.app.IBatteryStats; import com.android.server.LocalServices; import com.android.server.am.BatteryStatsService; +import com.android.server.lights.LightsManager; import android.animation.Animator; import android.animation.ObjectAnimator; @@ -129,6 +130,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // Battery stats. private final IBatteryStats mBatteryStats; + // The lights service. + private final LightsManager mLights; + // The sensor manager. private final SensorManager mSensorManager; @@ -300,6 +304,7 @@ public DisplayPowerController(Context context, mCallbacks = callbacks; mBatteryStats = BatteryStatsService.getService(); + mLights = LocalServices.getService(LightsManager.class); mSensorManager = sensorManager; mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class); mBlanker = blanker; @@ -678,6 +683,12 @@ private void updatePowerState() { // Use zero brightness when screen is off. if (state == Display.STATE_OFF) { brightness = PowerManager.BRIGHTNESS_OFF; + mLights.getLight(LightsManager.LIGHT_ID_BUTTONS).setBrightness(brightness); + } + + // Disable button lights when dozing + if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND) { + mLights.getLight(LightsManager.LIGHT_ID_BUTTONS).setBrightness(PowerManager.BRIGHTNESS_OFF); } // Configure auto-brightness. diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index f84b20c057053..1ced53fe840f6 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -220,6 +220,8 @@ public final class PowerManagerService extends SystemService private static final int HALT_MODE_REBOOT = 1; private static final int HALT_MODE_REBOOT_SAFE_MODE = 2; + private static final int BUTTON_ON_DURATION = 5 * 1000; + // File location for last reboot reason private static final String LAST_REBOOT_LOCATION = "/data/misc/reboot/last_reboot_reason"; @@ -240,6 +242,7 @@ public final class PowerManagerService extends SystemService private SettingsObserver mSettingsObserver; private DreamManagerInternal mDreamManager; private Light mAttentionLight; + private Light mButtonsLight; private final Object mLock = LockGuard.installNewLock(LockGuard.INDEX_POWER); @@ -747,6 +750,7 @@ mAppOps, createSuspendBlockerLocked("PowerManagerService.Broadcasts"), mLightsManager = getLocalService(LightsManager.class); mAttentionLight = mLightsManager.getLight(LightsManager.LIGHT_ID_ATTENTION); + mButtonsLight = mLightsManager.getLight(LightsManager.LIGHT_ID_BUTTONS); // Initialize display power management. mDisplayManagerInternal.initPowerManagement( @@ -1947,6 +1951,12 @@ private void updateUserActivitySummaryLocked(long now, int dirty) { nextTimeout = mLastUserActivityTime + screenOffTimeout - screenDimDuration; if (now < nextTimeout) { + if (now > mLastUserActivityTime + BUTTON_ON_DURATION) { + mButtonsLight.setBrightness(0); + } else { + mButtonsLight.setBrightness(mDisplayPowerRequest.screenBrightness); + nextTimeout = now + BUTTON_ON_DURATION; + } mUserActivitySummary = USER_ACTIVITY_SCREEN_BRIGHT; } else { nextTimeout = mLastUserActivityTime + screenOffTimeout;