diff options
9 files changed, 56 insertions, 3 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 79efb0d59214..b825cfb5f903 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1725,6 +1725,10 @@ not appear on production builds ever. --> <string name="tuner_doze" translatable="false">Ambient Display</string> + <!-- Ambient display, Sensors wake up device of the tuner. Non-translatable since it should + not appear on production builds ever. --> + <string name="tuner_doze_sensors_wake_up_fully" translatable="false">Wake up device on double tap or lift</string> + <!-- Ambient display always-on of the tuner. Non-translatable since it should not appear on production builds ever. --> <string name="tuner_doze_always_on" translatable="false">Always on</string> diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml index 90364b98ea3f..85f12b5baabb 100644 --- a/packages/SystemUI/res/xml/tuner_prefs.xml +++ b/packages/SystemUI/res/xml/tuner_prefs.xml @@ -131,6 +131,11 @@ android:title="@string/tuner_doze_always_on" sysui:defValue="false" /> + <com.android.systemui.tuner.TunerSwitch + android:key="doze_sensors_wake_up_fully" + android:title="@string/tuner_doze_sensors_wake_up_fully" + sysui:defValue="false" /> + </PreferenceScreen> --> diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java index 7c15096a5f9a..b3a0eb7baa72 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java @@ -91,8 +91,7 @@ public class DozeFactory { @Override public void requestState(DozeProvider.DozeState state) { if (state == DozeProvider.DozeState.WAKE_UP) { - PowerManager pm = context.getSystemService(PowerManager.class); - pm.wakeUp(SystemClock.uptimeMillis(), "com.android.systemui:NODOZE"); + machine.wakeUp(); return; } machine.requestState(implState(state)); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java index 6a868d53d409..c9eb790c695e 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java @@ -158,6 +158,11 @@ public class DozeMachine { return mState; } + /** Requests the PowerManager to wake up now. */ + public void wakeUp() { + mDozeService.requestWakeUp(); + } + private boolean isExecutingTransition() { return !mQueuedRequests.isEmpty(); } @@ -300,5 +305,8 @@ public class DozeMachine { /** Request a display state. See {@link android.view.Display#STATE_DOZE}. */ void setDozeScreenState(int state); + + /** Request waking up. */ + void requestWakeUp(); } } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java index 6186df14ef3f..e55a59722385 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java @@ -16,6 +16,8 @@ package com.android.systemui.doze; +import android.os.PowerManager; +import android.os.SystemClock; import android.service.dreams.DreamService; import android.util.Log; @@ -72,4 +74,10 @@ public class DozeService extends DreamService implements DozeMachine.Service { mDozeMachine.dump(pw); } } + + @Override + public void requestWakeUp() { + PowerManager pm = getSystemService(PowerManager.class); + pm.wakeUp(SystemClock.uptimeMillis(), "com.android.systemui:NODOZE"); + } } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index db5a3921db9d..b5c7dd3bfc66 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -97,7 +97,11 @@ public class DozeTriggers implements DozeMachine.Part { } private void onSensor(int pulseReason, boolean sensorPerformedProxCheck) { - requestPulse(pulseReason, sensorPerformedProxCheck); + if (mDozeParameters.getSensorsWakeUpFully()) { + mMachine.wakeUp(); + } else { + requestPulse(pulseReason, sensorPerformedProxCheck); + } if (pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP) { final long timeSinceNotification = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java index 0e074c7b8710..883a66b59531 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java @@ -31,6 +31,7 @@ import java.io.PrintWriter; public class DozeParameters { private static final int MAX_DURATION = 60 * 1000; + public static final String DOZE_SENSORS_WAKE_UP_FULLY = "doze_sensors_wake_up_fully"; private final Context mContext; @@ -56,6 +57,10 @@ public class DozeParameters { pw.print(" getPickupVibrationThreshold(): "); pw.println(getPickupVibrationThreshold()); pw.print(" getPickupSubtypePerformsProxCheck(): ");pw.println( dumpPickupSubtypePerformsProxCheck()); + if (Build.IS_DEBUGGABLE) { + pw.print(" getAlwaysOn(): "); pw.println(getAlwaysOn()); + pw.print(" getSensorsWakeUpFully(): "); pw.println(getSensorsWakeUpFully()); + } } private String dumpPickupSubtypePerformsProxCheck() { @@ -118,6 +123,12 @@ public class DozeParameters { Settings.Secure.DOZE_ALWAYS_ON, 0, UserHandle.USER_CURRENT) != 0; } + public boolean getSensorsWakeUpFully() { + return Build.IS_DEBUGGABLE + && Settings.Secure.getIntForUser(mContext.getContentResolver(), + DOZE_SENSORS_WAKE_UP_FULLY, 0, UserHandle.USER_CURRENT) != 0; + } + private boolean getBoolean(String propName, int resId) { return SystemProperties.getBoolean(propName, mContext.getResources().getBoolean(resId)); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java index c3948258f11c..32afee9744d5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeMachineTest.java @@ -289,4 +289,12 @@ public class DozeMachineTest { assertEquals(DOZE_PULSING, mMachine.getState()); } + + @Test + @UiThreadTest + public void testWakeUp_wakesUp() { + mMachine.wakeUp(); + + assertTrue(mServiceFake.requestedWakeup); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java index d12fc2cf33a0..c1e7fe46de8e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeServiceFake.java @@ -22,6 +22,7 @@ public class DozeServiceFake implements DozeMachine.Service { public boolean finished; public int screenState; + public boolean requestedWakeup; public DozeServiceFake() { reset(); @@ -41,4 +42,9 @@ public class DozeServiceFake implements DozeMachine.Service { finished = false; screenState = Display.STATE_UNKNOWN; } + + @Override + public void requestWakeUp() { + requestedWakeup = true; + } } |