summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dave Mankoff <mankoff@google.com> 2020-02-13 16:15:39 -0500
committer Dave Mankoff <mankoff@google.com> 2020-02-19 17:16:35 -0500
commitcb45d588e15243d28af595442383fe21bd567b10 (patch)
tree6ca375866f19465937528eca23ecc5ec5b6fc790
parentc2daf3cbb2ff2c742420b1c75c09c59c287d1309 (diff)
RESTRICT AUTOMERGE Use Alternative Prox Sensor for Falsing
This allows new phones to use a sensor with a different theshold when attempting to determine the devices proximity to surfaces. Bug: 149420648 Test: manual Change-Id: Iee8568f7d9f58359dc1e72fd195a42abeaf2ddf3
-rw-r--r--packages/SystemUI/res/values/config.xml8
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/ProximitySensor.java43
4 files changed, 60 insertions, 22 deletions
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 78318cb7e858..87461bbccf12 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -201,6 +201,14 @@
always-on display) -->
<string name="doze_brightness_sensor_type" translatable="false"></string>
+ <!-- Override value to use for proximity sensor. -->
+ <string name="proximity_sensor_type" translatable="false">@string/doze_brightness_sensor_type</string>
+
+ <!-- If using proximity_sensor_type, specifies a threshold value to distinguish near and
+ far break points. A sensor value less than or equal to this is considered "near". -->
+ <item name="proximity_sensor_threshold" translatable="false" format="float" type="dimen">
+ 0</item>
+
<!-- Doze: pulse parameter - how long does it take to fade in? -->
<integer name="doze_pulse_duration_in">130</integer>
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
index 026a62528c8d..b7c8f707b850 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
@@ -43,11 +43,11 @@ import androidx.annotation.VisibleForTesting;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
-import com.android.systemui.R;
import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.AlarmTimeout;
import com.android.systemui.util.AsyncSensorManager;
+import com.android.systemui.util.ProximitySensor;
import com.android.systemui.util.wakelock.WakeLock;
import java.io.PrintWriter;
@@ -288,6 +288,7 @@ public class DozeSensors {
final AlarmTimeout mCooldownTimer;
final AlwaysOnDisplayPolicy mPolicy;
final Sensor mSensor;
+ private final float mSensorThreshold;
final boolean mUsingBrightnessSensor;
public ProxSensor(AlwaysOnDisplayPolicy policy) {
@@ -297,11 +298,14 @@ public class DozeSensors {
// The default prox sensor can be noisy, so let's use a prox gated brightness sensor
// if available.
- Sensor sensor = DozeSensors.findSensorWithType(mSensorManager,
- mContext.getString(R.string.doze_brightness_sensor_type));
+ Sensor sensor = ProximitySensor.findCustomProxSensor(mContext, mSensorManager);
mUsingBrightnessSensor = sensor != null;
- if (sensor == null) {
+ if (mUsingBrightnessSensor) {
+ mSensorThreshold = ProximitySensor.getBrightnessSensorThreshold(
+ mContext.getResources());
+ } else {
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
+ mSensorThreshold = sensor.getMaximumRange();
}
mSensor = sensor;
}
@@ -343,11 +347,9 @@ public class DozeSensors {
if (DEBUG) Log.d(TAG, "onSensorChanged " + event);
if (mUsingBrightnessSensor) {
- // The custom brightness sensor is gated by the proximity sensor and will return 0
- // whenever prox is covered.
- mCurrentlyFar = event.values[0] > 0;
+ mCurrentlyFar = event.values[0] > mSensorThreshold;
} else {
- mCurrentlyFar = event.values[0] >= event.sensor.getMaximumRange();
+ mCurrentlyFar = event.values[0] >= mSensorThreshold;
}
mProxCallback.accept(mCurrentlyFar);
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
index 6199a0deb31f..c7a133dc530a 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
@@ -41,10 +41,10 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.Preconditions;
import com.android.systemui.Dependency;
-import com.android.systemui.R;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.Assert;
+import com.android.systemui.util.ProximitySensor;
import com.android.systemui.util.wakelock.WakeLock;
import java.io.PrintWriter;
@@ -431,15 +431,18 @@ public class DozeTriggers implements DozeMachine.Part {
private boolean mFinished;
private float mMaxRange;
private boolean mUsingBrightnessSensor;
+ private float mSensorThreshold;
protected abstract void onProximityResult(int result);
public void check() {
Preconditions.checkState(!mFinished && !mRegistered);
- Sensor sensor = DozeSensors.findSensorWithType(mSensorManager,
- mContext.getString(R.string.doze_brightness_sensor_type));
+ Sensor sensor = ProximitySensor.findCustomProxSensor(mContext, mSensorManager);
mUsingBrightnessSensor = sensor != null;
- if (sensor == null) {
+ if (mUsingBrightnessSensor) {
+ mSensorThreshold = ProximitySensor.getBrightnessSensorThreshold(
+ mContext.getResources());
+ } else {
sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
}
if (sensor == null) {
@@ -473,7 +476,7 @@ public class DozeTriggers implements DozeMachine.Part {
if (mUsingBrightnessSensor) {
// The custom brightness sensor is gated by the proximity sensor and will
// return 0 whenever prox is covered.
- isNear = event.values[0] == 0;
+ isNear = event.values[0] <= mSensorThreshold;
} else {
isNear = event.values[0] < mMaxRange;
}
diff --git a/packages/SystemUI/src/com/android/systemui/util/ProximitySensor.java b/packages/SystemUI/src/com/android/systemui/util/ProximitySensor.java
index a905eba1f0ed..4cd38febc5dd 100644
--- a/packages/SystemUI/src/com/android/systemui/util/ProximitySensor.java
+++ b/packages/SystemUI/src/com/android/systemui/util/ProximitySensor.java
@@ -17,6 +17,7 @@
package com.android.systemui.util;
import android.content.Context;
+import android.content.res.Resources;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
@@ -40,7 +41,7 @@ public class ProximitySensor {
private final Sensor mSensor;
private final AsyncSensorManager mSensorManager;
private final boolean mUsingBrightnessSensor;
- private final float mMaxRange;
+ private final float mThreshold;
private SensorEventListener mSensorEventListener = new SensorEventListener() {
@Override
@@ -59,7 +60,7 @@ public class ProximitySensor {
@Inject
public ProximitySensor(Context context, AsyncSensorManager sensorManager) {
mSensorManager = sensorManager;
- Sensor sensor = findBrightnessSensor(context, sensorManager);
+ Sensor sensor = findCustomProxSensor(context, sensorManager);
if (sensor == null) {
mUsingBrightnessSensor = false;
@@ -69,9 +70,13 @@ public class ProximitySensor {
}
mSensor = sensor;
if (mSensor != null) {
- mMaxRange = mSensor.getMaximumRange();
+ if (mUsingBrightnessSensor) {
+ mThreshold = getBrightnessSensorThreshold(context.getResources());
+ } else {
+ mThreshold = mSensor.getMaximumRange();
+ }
} else {
- mMaxRange = 0;
+ mThreshold = 0;
}
}
@@ -79,8 +84,18 @@ public class ProximitySensor {
mTag = tag;
}
- private Sensor findBrightnessSensor(Context context, SensorManager sensorManager) {
- String sensorType = context.getString(R.string.doze_brightness_sensor_type);
+ /**
+ * Returns a brightness sensor that can be used for proximity purposes.
+ *
+ * @deprecated This method exists for legacy purposes. Use the containing class directly.
+ */
+ @Deprecated
+ public static Sensor findCustomProxSensor(Context context, SensorManager sensorManager) {
+ String sensorType = context.getString(R.string.proximity_sensor_type);
+ if (sensorType.isEmpty()) {
+ return null;
+ }
+
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
Sensor sensor = null;
for (Sensor s : sensorList) {
@@ -94,6 +109,16 @@ public class ProximitySensor {
}
/**
+ * Returns a threshold value that can be used along with {@link #findCustomProxSensor}
+ *
+ * @deprecated This method exists for legacy purposes. Use the containing class directly.
+ */
+ @Deprecated
+ public static float getBrightnessSensorThreshold(Resources resources) {
+ return resources.getFloat(R.dimen.proximity_sensor_threshold);
+ }
+
+ /**
* Returns {@code false} if a Proximity sensor is not available.
*/
public boolean getSensorAvailable() {
@@ -141,11 +166,11 @@ public class ProximitySensor {
}
private void onSensorEvent(SensorEvent event) {
- boolean near = event.values[0] < mMaxRange;
if (mUsingBrightnessSensor) {
- near = event.values[0] == 0;
+ mNear = event.values[0] <= mThreshold;
+ } else {
+ mNear = event.values[0] < mThreshold;
}
- mNear = near;
mListeners.forEach(proximitySensorListener ->
proximitySensorListener.onProximitySensorEvent(
new ProximityEvent(mNear, event.timestamp)));