Loading packages/SystemUI/res/values/config.xml +5 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,11 @@ --> <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? --> <integer name="doze_pulse_duration_in">900</integer> Loading packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +18 −5 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.systemui.doze; import android.app.AlarmManager; import android.app.Application; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; import android.os.Handler; import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.systemui.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.wakelock.DelayedWakeLock; Loading @@ -46,21 +48,32 @@ public class DozeFactory { WakeLock wakeLock = new DelayedWakeLock(handler, WakeLock.createPartial(context, "Doze")); DozeMachine machine = new DozeMachine( DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params), config, wakeLock); DozeMachine.Service wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params); DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock); machine.setParts(new DozeMachine.Part[]{ new DozePauser(handler, machine, alarmManager), createDozeTriggers(context, sensorManager, host, alarmManager, config, params, handler, wakeLock, machine), createDozeUi(context, host, wakeLock, machine, handler, alarmManager), createDozeScreenState(wrappedService), createDozeScreenBrightness(context, wrappedService, sensorManager, handler), }); 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, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) { Loading packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +31 −8 Original line number Diff line number Diff line Loading @@ -226,7 +226,6 @@ public class DozeMachine { updatePulseReason(newState, oldState, pulseReason); performTransitionOnComponents(oldState, newState); updateScreenState(newState); updateWakeLockState(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) { switch (state) { case INITIALIZED: Loading Loading @@ -365,5 +357,36 @@ public class DozeMachine { /** Request waking up. */ 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 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 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 Diff line number Diff line Loading @@ -247,6 +247,11 @@ --> <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? --> <integer name="doze_pulse_duration_in">900</integer> Loading
packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +18 −5 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.systemui.doze; import android.app.AlarmManager; import android.app.Application; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; import android.os.Handler; import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.systemui.R; import com.android.systemui.SystemUIApplication; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.wakelock.DelayedWakeLock; Loading @@ -46,21 +48,32 @@ public class DozeFactory { WakeLock wakeLock = new DelayedWakeLock(handler, WakeLock.createPartial(context, "Doze")); DozeMachine machine = new DozeMachine( DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params), config, wakeLock); DozeMachine.Service wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( DozeScreenStatePreventingAdapter.wrapIfNeeded(dozeService, params), params); DozeMachine machine = new DozeMachine(wrappedService, config, wakeLock); machine.setParts(new DozeMachine.Part[]{ new DozePauser(handler, machine, alarmManager), createDozeTriggers(context, sensorManager, host, alarmManager, config, params, handler, wakeLock, machine), createDozeUi(context, host, wakeLock, machine, handler, alarmManager), createDozeScreenState(wrappedService), createDozeScreenBrightness(context, wrappedService, sensorManager, handler), }); 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, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine) { Loading
packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +31 −8 Original line number Diff line number Diff line Loading @@ -226,7 +226,6 @@ public class DozeMachine { updatePulseReason(newState, oldState, pulseReason); performTransitionOnComponents(oldState, newState); updateScreenState(newState); updateWakeLockState(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) { switch (state) { case INITIALIZED: Loading Loading @@ -365,5 +357,36 @@ public class DozeMachine { /** Request waking up. */ 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 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 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); } } }