Merge "Doze: Don't block pickup pulses on a proximity check." into lmp-mr1-dev
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 24830e8..98f03b5 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -252,7 +252,7 @@
     <integer name="doze_pickup_vibration_threshold">2000</integer>
 
     <!-- Doze: can we assume the pickup sensor includes a proximity check? -->
-    <bool name="doze_pickup_performs_proximity_check">false</bool>
+    <bool name="doze_pickup_performs_proximity_check">true</bool>
 
     <!-- Doze: pulse parameter - how long does it take to fade in? -->
     <integer name="doze_pulse_duration_in">900</integer>
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
index 36995ff..8d27450 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
@@ -217,22 +217,30 @@
             // Here we need a wakelock to stay awake until the pulse is finished.
             mWakeLock.acquire();
             mPulsing = true;
-            if (!mDozeParameters.getProxCheckBeforePulse() ||
-                    reason == DozeLog.PULSE_REASON_SENSOR_PICKUP
-                    && mDozeParameters.getPickupPerformsProxCheck()) {
+            if (!mDozeParameters.getProxCheckBeforePulse()) {
                 // skip proximity check
                 continuePulsing(reason);
                 return;
             }
-            // perform a proximity check before pulsing
             final long start = SystemClock.uptimeMillis();
+            final boolean nonBlocking = reason == DozeLog.PULSE_REASON_SENSOR_PICKUP
+                    && mDozeParameters.getPickupPerformsProxCheck();
+            if (nonBlocking) {
+                // proximity check is only done to capture statistics, continue pulsing
+                continuePulsing(reason);
+            }
+            // perform a proximity check
             new ProximityCheck() {
                 @Override
                 public void onProximityResult(int result) {
-                    // avoid pulsing in pockets
                     final boolean isNear = result == RESULT_NEAR;
                     final long end = SystemClock.uptimeMillis();
                     DozeLog.traceProximityResult(isNear, end - start, reason);
+                    if (nonBlocking) {
+                        // we already continued
+                        return;
+                    }
+                    // avoid pulsing in pockets
                     if (isNear) {
                         mPulsing = false;
                         mWakeLock.release();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java
index 3394a8d..3e17328 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeScrimController.java
@@ -38,6 +38,7 @@
 
     private final DozeParameters mDozeParameters;
     private final Interpolator mPulseInInterpolator = PhoneStatusBar.ALPHA_OUT;
+    private final Interpolator mPulseInInterpolatorPickup;
     private final Interpolator mPulseOutInterpolator = PhoneStatusBar.ALPHA_IN;
     private final Interpolator mDozeAnimationInterpolator;
     private final Handler mHandler = new Handler();
@@ -54,8 +55,8 @@
     public DozeScrimController(ScrimController scrimController, Context context) {
         mScrimController = scrimController;
         mDozeParameters = new DozeParameters(context);
-        mDozeAnimationInterpolator = AnimationUtils.loadInterpolator(context,
-                android.R.interpolator.linear_out_slow_in);
+        mDozeAnimationInterpolator = mPulseInInterpolatorPickup =
+                AnimationUtils.loadInterpolator(context, android.R.interpolator.linear_out_slow_in);
     }
 
     public void setDozing(boolean dozing, boolean animate) {
@@ -222,8 +223,10 @@
             if (!mDozing) return;
             DozeLog.tracePulseStart(mPulseReason);
             final boolean pickup = mPulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP;
-            startScrimAnimation(true /* inFront */, 0f, mDozeParameters.getPulseInDuration(pickup),
-                    mPulseInInterpolator, mDozeParameters.getPulseInDelay(pickup),
+            startScrimAnimation(true /* inFront */, 0f,
+                    mDozeParameters.getPulseInDuration(pickup),
+                    pickup ? mPulseInInterpolatorPickup : mPulseInInterpolator,
+                    mDozeParameters.getPulseInDelay(pickup),
                     mPulseInFinished);
 
             // Signal that the pulse is ready to turn the screen on and draw.