summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Spurlock <jspurlock@google.com> 2014-08-09 18:41:24 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2014-08-08 18:15:47 +0000
commit16e767ab09b5740ec3cf88c3e8c99fa458498e6e (patch)
tree0acd9876415beacd1445fff6ee3e2a4d3ed38fdf
parent745ba004911ad3825512bba3c048bbe241cdc09a (diff)
parent559d959b99f4daafc8befb2d9a8f2d85d771bf49 (diff)
Merge "Doze: Pulse once when a pickup gesture is received." into lmp-dev
-rw-r--r--packages/SystemUI/res/values/config.xml3
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeService.java96
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java9
4 files changed, 74 insertions, 45 deletions
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index e05a8970133f..3ba4eb8d4652 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -165,6 +165,9 @@
<!-- Doze: should the significant motion sensor be used as a pulse signal? -->
<bool name="doze_pulse_on_significant_motion">false</bool>
+ <!-- Doze: should the pickup sensor be used as a pulse signal? -->
+ <bool name="doze_pulse_on_pick_up">false</bool>
+
<!-- Doze: maximum brightness to use when pulsing -->
<integer name="doze_pulse_brightness">40</integer>
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
index 943a294a42cd..74c03287b08e 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
@@ -30,6 +30,7 @@ import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.hardware.TriggerEvent;
import android.hardware.TriggerEventListener;
+import android.media.AudioAttributes;
import android.os.Handler;
import android.os.PowerManager;
import android.os.SystemProperties;
@@ -61,15 +62,14 @@ public class DozeService extends DreamService {
private Host mHost;
private SensorManager mSensors;
- private Sensor mSigMotionSensor;
+ private TriggerSensor mSigMotionSensor;
+ private TriggerSensor mPickupSensor;
private PowerManager mPowerManager;
private PowerManager.WakeLock mWakeLock;
private AlarmManager mAlarmManager;
private int mMaxBrightness;
private boolean mDreaming;
private boolean mBroadcastReceiverRegistered;
- private boolean mSigMotionConfigured;
- private boolean mSigMotionEnabled;
private boolean mDisplayStateSupported;
private int mDisplayStateWhenOn;
private boolean mNotificationLightOn;
@@ -88,8 +88,7 @@ public class DozeService extends DreamService {
pw.print(" mDreaming: "); pw.println(mDreaming);
pw.print(" mBroadcastReceiverRegistered: "); pw.println(mBroadcastReceiverRegistered);
pw.print(" mSigMotionSensor: "); pw.println(mSigMotionSensor);
- pw.print(" mSigMotionConfigured: "); pw.println(mSigMotionConfigured);
- pw.print(" mSigMotionEnabled: "); pw.println(mSigMotionEnabled);
+ pw.print(" mPickupSensor:"); pw.println(mPickupSensor);
pw.print(" mMaxBrightness: "); pw.println(mMaxBrightness);
pw.print(" mDisplayStateSupported: "); pw.println(mDisplayStateSupported);
pw.print(" mNotificationLightOn: "); pw.println(mNotificationLightOn);
@@ -110,13 +109,14 @@ public class DozeService extends DreamService {
setWindowless(true);
mSensors = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
- mSigMotionSensor = mSensors.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);
+ mSigMotionSensor = new TriggerSensor(Sensor.TYPE_SIGNIFICANT_MOTION, "doze.pulse.sigmotion",
+ R.bool.doze_pulse_on_significant_motion);
+ mPickupSensor = new TriggerSensor(Sensor.TYPE_PICK_UP_GESTURE, "doze.pulse.pickup",
+ R.bool.doze_pulse_on_pick_up);
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, mTag);
mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
final Resources res = mContext.getResources();
- mSigMotionConfigured = SystemProperties.getBoolean("doze.pulse.sigmotion",
- res.getBoolean(R.bool.doze_pulse_on_significant_motion));
mDisplayStateSupported = SystemProperties.getBoolean("doze.display.supported",
res.getBoolean(R.bool.doze_display_state_supported));
mMaxBrightness = MathUtils.constrain(res.getInteger(R.integer.doze_pulse_brightness),
@@ -217,8 +217,12 @@ public class DozeService extends DreamService {
}
private void requestPulse(int pulses) {
+ requestPulse(pulses, true /*delayed*/);
+ }
+
+ private void requestPulse(int pulses, boolean delayed) {
if (mHost != null) {
- mHost.requestPulse(pulses, this);
+ mHost.requestPulse(pulses, delayed, this);
}
}
@@ -230,21 +234,12 @@ public class DozeService extends DreamService {
private void listenForPulseSignals(boolean listen) {
if (DEBUG) Log.d(mTag, "listenForPulseSignals: " + listen);
- listenForSignificantMotion(listen);
+ mSigMotionSensor.setListening(listen);
+ mPickupSensor.setListening(listen);
listenForBroadcasts(listen);
listenForNotifications(listen);
}
- private void listenForSignificantMotion(boolean listen) {
- if (!mSigMotionConfigured || mSigMotionSensor == null) return;
- if (listen) {
- mSigMotionEnabled =
- mSensors.requestTriggerSensor(mSigMotionListener, mSigMotionSensor);
- } else if (mSigMotionEnabled) {
- mSensors.cancelTriggerSensor(mSigMotionListener, mSigMotionSensor);
- }
- }
-
private void listenForBroadcasts(boolean listen) {
if (listen) {
final IntentFilter filter = new IntentFilter(PULSE_ACTION);
@@ -299,21 +294,6 @@ public class DozeService extends DreamService {
}
};
- private final TriggerEventListener mSigMotionListener = new TriggerEventListener() {
- @Override
- public void onTrigger(TriggerEvent event) {
- if (DEBUG) Log.d(mTag, "sigMotion.onTrigger: " + triggerEventToString(event));
- if (DEBUG) {
- final Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
- if (v != null) {
- v.vibrate(1000);
- }
- }
- requestPulse();
- listenForSignificantMotion(true); // reregister, this sensor only fires once
- }
- };
-
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -355,7 +335,7 @@ public class DozeService extends DreamService {
void addCallback(Callback callback);
void removeCallback(Callback callback);
void requestDoze(DozeService dozeService);
- void requestPulse(int pulses, DozeService dozeService);
+ void requestPulse(int pulses, boolean delayed, DozeService dozeService);
void dozingStopped(DozeService dozeService);
public interface Callback {
@@ -364,4 +344,48 @@ public class DozeService extends DreamService {
void onNotificationLight(boolean on);
}
}
+
+ private class TriggerSensor extends TriggerEventListener {
+ private final Sensor mSensor;
+ private final boolean mConfigured;
+
+ private boolean mEnabled;
+
+ public TriggerSensor(int type, String sysPropConfig, int resConfig) {
+ mSensor = mSensors.getDefaultSensor(type);
+ mConfigured = SystemProperties.getBoolean(sysPropConfig,
+ mContext.getResources().getBoolean(resConfig));
+ }
+
+ public void setListening(boolean listen) {
+ if (!mConfigured || mSensor == null) return;
+ if (listen) {
+ mEnabled = mSensors.requestTriggerSensor(this, mSensor);
+ } else if (mEnabled) {
+ mSensors.cancelTriggerSensor(this, mSensor);
+ mEnabled = false;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder("{mEnabled=").append(mEnabled).append(", mConfigured=")
+ .append(mConfigured).append(", mSensor=").append(mSensor).append("}").toString();
+ }
+
+ @Override
+ public void onTrigger(TriggerEvent event) {
+ if (DEBUG) Log.d(mTag, "onTrigger: " + triggerEventToString(event));
+ if (DEBUG) {
+ final Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
+ if (v != null) {
+ v.vibrate(1000, new AudioAttributes.Builder()
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION).build());
+ }
+ }
+ requestPulse(1, false /*delayed*/);
+ setListening(true); // reregister, this sensor only fires once
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 75e31e4f2d69..5eb45df31d12 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -3868,10 +3868,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
@Override
- public void requestPulse(int pulses, DozeService dozeService) {
+ public void requestPulse(int pulses, boolean delayed, DozeService dozeService) {
if (dozeService == null) return;
dozeService.stayAwake(PROCESSING_TIME);
- mHandler.obtainMessage(H.REQUEST_PULSE, pulses, 0, dozeService).sendToTarget();
+ mHandler.obtainMessage(H.REQUEST_PULSE, pulses, delayed ? 1 : 0, dozeService)
+ .sendToTarget();
}
@Override
@@ -3890,9 +3891,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mCurrentDozeService.startDozing();
}
- private void handleRequestPulse(int pulses, DozeService dozeService) {
+ private void handleRequestPulse(int pulses, boolean delayed, DozeService dozeService) {
if (!dozeService.equals(mCurrentDozeService)) return;
- final long stayAwake = mScrimController.pulse(pulses);
+ final long stayAwake = mScrimController.pulse(pulses, delayed);
mCurrentDozeService.stayAwake(stayAwake);
}
@@ -3916,7 +3917,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (msg.what == REQUEST_DOZE) {
handleRequestDoze((DozeService) msg.obj);
} else if (msg.what == REQUEST_PULSE) {
- handleRequestPulse(msg.arg1, (DozeService) msg.obj);
+ handleRequestPulse(msg.arg1, msg.arg2 != 0, (DozeService) msg.obj);
} else if (msg.what == DOZING_STOPPED) {
handleDozingStopped((DozeService) msg.obj);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index cbd66aa949a9..a9fc3d81d956 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -44,7 +44,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener {
private static final int TAG_KEY_ANIM = R.id.scrim;
private static final long PULSE_IN_ANIMATION_DURATION = 1000;
- private static final long PULSE_VISIBLE_DURATION = 2000;
+ private static final long PULSE_VISIBLE_DURATION = 3000;
private static final long PULSE_OUT_ANIMATION_DURATION = 1000;
private static final long PULSE_INVISIBLE_DURATION = 1000;
private static final long PULSE_DURATION = PULSE_IN_ANIMATION_DURATION
@@ -131,11 +131,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener {
}
/** When dozing, fade screen contents in and out a few times using the front scrim. */
- public long pulse(int pulses) {
+ public long pulse(int pulses, boolean delayed) {
if (!mDozing) return 0;
mPulsesRemaining = Math.max(pulses, mPulsesRemaining);
- mScrimInFront.postDelayed(mPulseIn, PRE_PULSE_DELAY);
- return PRE_PULSE_DELAY + mPulsesRemaining * PULSE_DURATION;
+ final long delay = delayed ? PRE_PULSE_DELAY : 0;
+ mScrimInFront.postDelayed(mPulseIn, delay);
+ return delay + mPulsesRemaining * PULSE_DURATION;
}
private void cancelPulsing() {