Loading packages/SystemUI/res/values/config.xml +5 −0 Original line number Original line Diff line number Diff line Loading @@ -247,6 +247,11 @@ --> --> <string name="doze_pickup_subtype_performs_proximity_check"></string> <string name="doze_pickup_subtype_performs_proximity_check"></string> <!-- Type of a sensor that provides a low-power estimate of the desired display brightness, suitable to listen to while the device is asleep (e.g. during always-on display) --> <string name="doze_brightness_sensor_type" translatable="false"></string> <!-- Doze: pulse parameter - how long does it take to fade in? --> <!-- Doze: pulse parameter - how long does it take to fade in? --> <integer name="doze_pulse_duration_in">900</integer> <integer name="doze_pulse_duration_in">900</integer> Loading packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +18 −5 Original line number Original line Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.systemui.doze; import android.app.AlarmManager; import android.app.AlarmManager; import android.app.Application; import android.app.Application; import android.content.Context; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; import android.hardware.SensorManager; import android.os.Handler; import android.os.Handler; import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.systemui.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.SystemUIApplication; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.wakelock.DelayedWakeLock; import com.android.systemui.util.wakelock.DelayedWakeLock; Loading @@ -46,21 +48,32 @@ public class DozeFactory { WakeLock wakeLock = new DelayedWakeLock(handler, WakeLock wakeLock = new DelayedWakeLock(handler, WakeLock.createPartial(context, "Doze")); WakeLock.createPartial(context, "Doze")); DozeMachine machine = new DozeMachine( DozeMachine.Service wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params); DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params), DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock); config, wakeLock); machine.setParts(new DozeMachine.Part[]{ machine.setParts(new DozeMachine.Part[]{ new DozePauser(handler, machine, alarmManager), new DozePauser(handler, machine, alarmManager), createDozeTriggers(context, sensorManager, host, alarmManager, config, params, createDozeTriggers(context, sensorManager, host, alarmManager, config, params, handler, wakeLock, machine), handler, wakeLock, machine), createDozeUi(context, host, wakeLock, machine, handler, alarmManager), createDozeUi(context, host, wakeLock, machine, handler, alarmManager), createDozeScreenState(wrappedService), createDozeScreenBrightness(context, wrappedService, sensorManager, handler), }); }); return machine; return machine; } } private DozeMachine.Part createDozeScreenState(DozeMachine.Service service) { return new DozeScreenState(service); } private DozeMachine.Part createDozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Handler handler) { Sensor sensor = DozeSensors.findSensorWithType(sensorManager, context.getString(R.string.doze_brightness_sensor_type)); return new DozeScreenBrightness(context, service, sensorManager, sensor, handler); } private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager, private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) { DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) { Loading packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +31 −8 Original line number Original line Diff line number Diff line Loading @@ -226,7 +226,6 @@ public class DozeMachine { updatePulseReason(newState, oldState, pulseReason); updatePulseReason(newState, oldState, pulseReason); performTransitionOnComponents(oldState, newState); performTransitionOnComponents(oldState, newState); updateScreenState(newState); updateWakeLockState(newState); updateWakeLockState(newState); resolveIntermediateState(newState); resolveIntermediateState(newState); Loading Loading @@ -312,13 +311,6 @@ public class DozeMachine { } } } } private void updateScreenState(State newState) { int state = newState.screenState(); if (state != Display.STATE_UNKNOWN) { mDozeService.setDozeScreenState(state); } } private void resolveIntermediateState(State state) { private void resolveIntermediateState(State state) { switch (state) { switch (state) { case INITIALIZED: case INITIALIZED: Loading Loading @@ -365,5 +357,36 @@ public class DozeMachine { /** Request waking up. */ /** Request waking up. */ void requestWakeUp(); void requestWakeUp(); /** Set screen brightness */ void setDozeScreenBrightness(int brightness); class Delegate implements Service { private final Service mDelegate; public Delegate(Service delegate) { mDelegate = delegate; } @Override public void finish() { mDelegate.finish(); } @Override public void setDozeScreenState(int state) { mDelegate.setDozeScreenState(state); } @Override public void requestWakeUp() { mDelegate.requestWakeUp(); } @Override public void setDozeScreenBrightness(int brightness) { mDelegate.setDozeScreenBrightness(brightness); } } } } } } packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java 0 → 100644 +92 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.doze; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Handler; /** * Controls the screen brightness when dozing. */ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener { private final Context mContext; private final DozeMachine.Service mDozeService; private final Handler mHandler; private final SensorManager mSensorManager; private final Sensor mLightSensor; private boolean mRegistered; public DozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Sensor lightSensor, Handler handler) { mContext = context; mDozeService = service; mSensorManager = sensorManager; mLightSensor = lightSensor; mHandler = handler; } @Override public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) { switch (newState) { case INITIALIZED: resetBrightnessToDefault(); break; case DOZE_AOD: case DOZE_REQUEST_PULSE: setLightSensorEnabled(true); break; case DOZE: case DOZE_AOD_PAUSED: setLightSensorEnabled(false); resetBrightnessToDefault(); break; case FINISH: setLightSensorEnabled(false); break; } } @Override public void onSensorChanged(SensorEvent event) { if (mRegistered) { mDozeService.setDozeScreenBrightness(Math.max(1, (int) event.values[0])); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } private void resetBrightnessToDefault() { mDozeService.setDozeScreenBrightness(mContext.getResources().getInteger( com.android.internal.R.integer.config_screenBrightnessDoze)); } private void setLightSensorEnabled(boolean enabled) { if (enabled && !mRegistered && mLightSensor != null) { mRegistered = mSensorManager.registerListener(this, mLightSensor, SensorManager.SENSOR_DELAY_NORMAL, mHandler); } else if (!enabled && mRegistered) { mSensorManager.unregisterListener(this); mRegistered = false; } } } packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java 0 → 100644 +39 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.systemui.doze; import android.content.Context; import android.view.Display; /** * Controls the screen when dozing. */ public class DozeScreenState implements DozeMachine.Part { private final DozeMachine.Service mDozeService; public DozeScreenState(DozeMachine.Service service) { mDozeService = service; } @Override public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) { int screenState = newState.screenState(); if (screenState != Display.STATE_UNKNOWN) { mDozeService.setDozeScreenState(screenState); } } } Loading
packages/SystemUI/res/values/config.xml +5 −0 Original line number Original line Diff line number Diff line Loading @@ -247,6 +247,11 @@ --> --> <string name="doze_pickup_subtype_performs_proximity_check"></string> <string name="doze_pickup_subtype_performs_proximity_check"></string> <!-- Type of a sensor that provides a low-power estimate of the desired display brightness, suitable to listen to while the device is asleep (e.g. during always-on display) --> <string name="doze_brightness_sensor_type" translatable="false"></string> <!-- Doze: pulse parameter - how long does it take to fade in? --> <!-- Doze: pulse parameter - how long does it take to fade in? --> <integer name="doze_pulse_duration_in">900</integer> <integer name="doze_pulse_duration_in">900</integer> Loading
packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +18 −5 Original line number Original line Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.systemui.doze; import android.app.AlarmManager; import android.app.AlarmManager; import android.app.Application; import android.app.Application; import android.content.Context; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; import android.hardware.SensorManager; import android.os.Handler; import android.os.Handler; import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.systemui.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.SystemUIApplication; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.wakelock.DelayedWakeLock; import com.android.systemui.util.wakelock.DelayedWakeLock; Loading @@ -46,21 +48,32 @@ public class DozeFactory { WakeLock wakeLock = new DelayedWakeLock(handler, WakeLock wakeLock = new DelayedWakeLock(handler, WakeLock.createPartial(context, "Doze")); WakeLock.createPartial(context, "Doze")); DozeMachine machine = new DozeMachine( DozeMachine.Service wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params); DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params), DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock); config, wakeLock); machine.setParts(new DozeMachine.Part[]{ machine.setParts(new DozeMachine.Part[]{ new DozePauser(handler, machine, alarmManager), new DozePauser(handler, machine, alarmManager), createDozeTriggers(context, sensorManager, host, alarmManager, config, params, createDozeTriggers(context, sensorManager, host, alarmManager, config, params, handler, wakeLock, machine), handler, wakeLock, machine), createDozeUi(context, host, wakeLock, machine, handler, alarmManager), createDozeUi(context, host, wakeLock, machine, handler, alarmManager), createDozeScreenState(wrappedService), createDozeScreenBrightness(context, wrappedService, sensorManager, handler), }); }); return machine; return machine; } } private DozeMachine.Part createDozeScreenState(DozeMachine.Service service) { return new DozeScreenState(service); } private DozeMachine.Part createDozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Handler handler) { Sensor sensor = DozeSensors.findSensorWithType(sensorManager, context.getString(R.string.doze_brightness_sensor_type)); return new DozeScreenBrightness(context, service, sensorManager, sensor, handler); } private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager, private DozeTriggers createDozeTriggers(Context context, SensorManager sensorManager, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) { DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) { Loading
packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +31 −8 Original line number Original line Diff line number Diff line Loading @@ -226,7 +226,6 @@ public class DozeMachine { updatePulseReason(newState, oldState, pulseReason); updatePulseReason(newState, oldState, pulseReason); performTransitionOnComponents(oldState, newState); performTransitionOnComponents(oldState, newState); updateScreenState(newState); updateWakeLockState(newState); updateWakeLockState(newState); resolveIntermediateState(newState); resolveIntermediateState(newState); Loading Loading @@ -312,13 +311,6 @@ public class DozeMachine { } } } } private void updateScreenState(State newState) { int state = newState.screenState(); if (state != Display.STATE_UNKNOWN) { mDozeService.setDozeScreenState(state); } } private void resolveIntermediateState(State state) { private void resolveIntermediateState(State state) { switch (state) { switch (state) { case INITIALIZED: case INITIALIZED: Loading Loading @@ -365,5 +357,36 @@ public class DozeMachine { /** Request waking up. */ /** Request waking up. */ void requestWakeUp(); void requestWakeUp(); /** Set screen brightness */ void setDozeScreenBrightness(int brightness); class Delegate implements Service { private final Service mDelegate; public Delegate(Service delegate) { mDelegate = delegate; } @Override public void finish() { mDelegate.finish(); } @Override public void setDozeScreenState(int state) { mDelegate.setDozeScreenState(state); } @Override public void requestWakeUp() { mDelegate.requestWakeUp(); } @Override public void setDozeScreenBrightness(int brightness) { mDelegate.setDozeScreenBrightness(brightness); } } } } } }
packages/SystemUI/src/com/android/systemui/doze/DozeScreenBrightness.java 0 → 100644 +92 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.doze; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Handler; /** * Controls the screen brightness when dozing. */ public class DozeScreenBrightness implements DozeMachine.Part, SensorEventListener { private final Context mContext; private final DozeMachine.Service mDozeService; private final Handler mHandler; private final SensorManager mSensorManager; private final Sensor mLightSensor; private boolean mRegistered; public DozeScreenBrightness(Context context, DozeMachine.Service service, SensorManager sensorManager, Sensor lightSensor, Handler handler) { mContext = context; mDozeService = service; mSensorManager = sensorManager; mLightSensor = lightSensor; mHandler = handler; } @Override public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) { switch (newState) { case INITIALIZED: resetBrightnessToDefault(); break; case DOZE_AOD: case DOZE_REQUEST_PULSE: setLightSensorEnabled(true); break; case DOZE: case DOZE_AOD_PAUSED: setLightSensorEnabled(false); resetBrightnessToDefault(); break; case FINISH: setLightSensorEnabled(false); break; } } @Override public void onSensorChanged(SensorEvent event) { if (mRegistered) { mDozeService.setDozeScreenBrightness(Math.max(1, (int) event.values[0])); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } private void resetBrightnessToDefault() { mDozeService.setDozeScreenBrightness(mContext.getResources().getInteger( com.android.internal.R.integer.config_screenBrightnessDoze)); } private void setLightSensorEnabled(boolean enabled) { if (enabled && !mRegistered && mLightSensor != null) { mRegistered = mSensorManager.registerListener(this, mLightSensor, SensorManager.SENSOR_DELAY_NORMAL, mHandler); } else if (!enabled && mRegistered) { mSensorManager.unregisterListener(this); mRegistered = false; } } }
packages/SystemUI/src/com/android/systemui/doze/DozeScreenState.java 0 → 100644 +39 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License */ package com.android.systemui.doze; import android.content.Context; import android.view.Display; /** * Controls the screen when dozing. */ public class DozeScreenState implements DozeMachine.Part { private final DozeMachine.Service mDozeService; public DozeScreenState(DozeMachine.Service service) { mDozeService = service; } @Override public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) { int screenState = newState.screenState(); if (screenState != Display.STATE_UNKNOWN) { mDozeService.setDozeScreenState(screenState); } } }