diff options
| author | 2014-08-09 18:41:24 +0000 | |
|---|---|---|
| committer | 2014-08-08 18:15:47 +0000 | |
| commit | 16e767ab09b5740ec3cf88c3e8c99fa458498e6e (patch) | |
| tree | 0acd9876415beacd1445fff6ee3e2a4d3ed38fdf | |
| parent | 745ba004911ad3825512bba3c048bbe241cdc09a (diff) | |
| parent | 559d959b99f4daafc8befb2d9a8f2d85d771bf49 (diff) | |
Merge "Doze: Pulse once when a pickup gesture is received." into lmp-dev
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() { |