Merge "Use alternative prox sensor when specified." into rvc-dev
This commit is contained in:
@@ -201,6 +201,13 @@
|
|||||||
always-on display) -->
|
always-on display) -->
|
||||||
<string name="doze_brightness_sensor_type" translatable="false"></string>
|
<string name="doze_brightness_sensor_type" translatable="false"></string>
|
||||||
|
|
||||||
|
<!-- Override value to use for proximity sensor. -->
|
||||||
|
<string name="proximity_sensor_type" translatable="false"></string>
|
||||||
|
|
||||||
|
<!-- If using proximity_sensor_type, specifies a threshold value to distinguish near and
|
||||||
|
far break points. A sensor value less than this is considered "near". -->
|
||||||
|
<item name="proximity_sensor_threshold" translatable="false" format="float" type="dimen"></item>
|
||||||
|
|
||||||
<!-- Doze: pulse parameter - how long does it take to fade in? -->
|
<!-- Doze: pulse parameter - how long does it take to fade in? -->
|
||||||
<integer name="doze_pulse_duration_in">130</integer>
|
<integer name="doze_pulse_duration_in">130</integer>
|
||||||
|
|
||||||
|
|||||||
@@ -44,8 +44,7 @@ public class ProximitySensor {
|
|||||||
|
|
||||||
private final Sensor mSensor;
|
private final Sensor mSensor;
|
||||||
private final AsyncSensorManager mSensorManager;
|
private final AsyncSensorManager mSensorManager;
|
||||||
private final boolean mUsingBrightnessSensor;
|
private final float mThreshold;
|
||||||
private final float mMaxRange;
|
|
||||||
private List<ProximitySensorListener> mListeners = new ArrayList<>();
|
private List<ProximitySensorListener> mListeners = new ArrayList<>();
|
||||||
private String mTag = null;
|
private String mTag = null;
|
||||||
@VisibleForTesting ProximityEvent mLastEvent;
|
@VisibleForTesting ProximityEvent mLastEvent;
|
||||||
@@ -68,20 +67,27 @@ public class ProximitySensor {
|
|||||||
public ProximitySensor(@Main Resources resources,
|
public ProximitySensor(@Main Resources resources,
|
||||||
AsyncSensorManager sensorManager) {
|
AsyncSensorManager sensorManager) {
|
||||||
mSensorManager = sensorManager;
|
mSensorManager = sensorManager;
|
||||||
Sensor sensor = findBrightnessSensor(resources);
|
|
||||||
|
|
||||||
|
Sensor sensor = findCustomProxSensor(resources);
|
||||||
|
float threshold = 0;
|
||||||
|
if (sensor != null) {
|
||||||
|
try {
|
||||||
|
threshold = getCustomProxThreshold(resources);
|
||||||
|
} catch (IllegalStateException e) {
|
||||||
|
Log.e(TAG, "Can not load custom proximity sensor.", e);
|
||||||
|
sensor = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (sensor == null) {
|
if (sensor == null) {
|
||||||
mUsingBrightnessSensor = false;
|
|
||||||
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
|
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
|
||||||
} else {
|
if (sensor != null) {
|
||||||
mUsingBrightnessSensor = true;
|
threshold = sensor.getMaximumRange();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mThreshold = threshold;
|
||||||
|
|
||||||
mSensor = sensor;
|
mSensor = sensor;
|
||||||
if (mSensor != null) {
|
|
||||||
mMaxRange = mSensor.getMaximumRange();
|
|
||||||
} else {
|
|
||||||
mMaxRange = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTag(String tag) {
|
public void setTag(String tag) {
|
||||||
@@ -107,9 +113,15 @@ public class ProximitySensor {
|
|||||||
mPaused = false;
|
mPaused = false;
|
||||||
registerInternal();
|
registerInternal();
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Returns a brightness sensor that can be used for proximity purposes.
|
||||||
|
*/
|
||||||
|
private Sensor findCustomProxSensor(Resources resources) {
|
||||||
|
String sensorType = resources.getString(R.string.proximity_sensor_type);
|
||||||
|
if (sensorType.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private Sensor findBrightnessSensor(Resources resources) {
|
|
||||||
String sensorType = resources.getString(R.string.doze_brightness_sensor_type);
|
|
||||||
List<Sensor> sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
|
List<Sensor> sensorList = mSensorManager.getSensorList(Sensor.TYPE_ALL);
|
||||||
Sensor sensor = null;
|
Sensor sensor = null;
|
||||||
for (Sensor s : sensorList) {
|
for (Sensor s : sensorList) {
|
||||||
@@ -122,6 +134,17 @@ public class ProximitySensor {
|
|||||||
return sensor;
|
return sensor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a threshold value that can be used along with {@link #findCustomProxSensor}
|
||||||
|
*/
|
||||||
|
private float getCustomProxThreshold(Resources resources) {
|
||||||
|
try {
|
||||||
|
return resources.getFloat(R.dimen.proximity_sensor_threshold);
|
||||||
|
} catch (Resources.NotFoundException e) {
|
||||||
|
throw new IllegalStateException("R.dimen.proximity_sensor_threshold must be set.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if we are registered with the SensorManager.
|
* Returns true if we are registered with the SensorManager.
|
||||||
*/
|
*/
|
||||||
@@ -157,7 +180,6 @@ public class ProximitySensor {
|
|||||||
if (mRegistered || mPaused || mListeners.isEmpty()) {
|
if (mRegistered || mPaused || mListeners.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logDebug("Using brightness sensor? " + mUsingBrightnessSensor);
|
|
||||||
logDebug("Registering sensor listener");
|
logDebug("Registering sensor listener");
|
||||||
mRegistered = true;
|
mRegistered = true;
|
||||||
mSensorManager.registerListener(mSensorEventListener, mSensor, mSensorDelay);
|
mSensorManager.registerListener(mSensorEventListener, mSensor, mSensorDelay);
|
||||||
@@ -196,10 +218,7 @@ public class ProximitySensor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onSensorEvent(SensorEvent event) {
|
private void onSensorEvent(SensorEvent event) {
|
||||||
boolean near = event.values[0] < mMaxRange;
|
boolean near = event.values[0] < mThreshold;
|
||||||
if (mUsingBrightnessSensor) {
|
|
||||||
near = event.values[0] == 0;
|
|
||||||
}
|
|
||||||
mLastEvent = new ProximityEvent(near, event.timestamp);
|
mLastEvent = new ProximityEvent(near, event.timestamp);
|
||||||
alertListeners();
|
alertListeners();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,9 @@ import android.content.res.Resources;
|
|||||||
|
|
||||||
public class FakeProximitySensor extends ProximitySensor {
|
public class FakeProximitySensor extends ProximitySensor {
|
||||||
private boolean mAvailable;
|
private boolean mAvailable;
|
||||||
private boolean mPaused;
|
|
||||||
|
|
||||||
public FakeProximitySensor(Resources resources, AsyncSensorManager sensorManager) {
|
public FakeProximitySensor(Resources resources, AsyncSensorManager sensorManager) {
|
||||||
super(resources, sensorManager);
|
super(resources, sensorManager);
|
||||||
|
|
||||||
mAvailable = true;
|
mAvailable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user