Merge "[DO NOT MERGE ANYWHERE] Fix bodysensor permission" into cw-e-dev
This commit is contained in:
@@ -407,12 +407,8 @@ public abstract class SensorManager {
|
|||||||
* @see Sensor
|
* @see Sensor
|
||||||
*/
|
*/
|
||||||
public List<Sensor> getSensorList(int type) {
|
public List<Sensor> getSensorList(int type) {
|
||||||
// cache the returned lists the first time
|
|
||||||
List<Sensor> list;
|
List<Sensor> list;
|
||||||
final List<Sensor> fullList = getFullSensorList();
|
final List<Sensor> fullList = getFullSensorList();
|
||||||
synchronized (mSensorListByType) {
|
|
||||||
list = mSensorListByType.get(type);
|
|
||||||
if (list == null) {
|
|
||||||
if (type == Sensor.TYPE_ALL) {
|
if (type == Sensor.TYPE_ALL) {
|
||||||
list = fullList;
|
list = fullList;
|
||||||
} else {
|
} else {
|
||||||
@@ -423,9 +419,6 @@ public abstract class SensorManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
list = Collections.unmodifiableList(list);
|
list = Collections.unmodifiableList(list);
|
||||||
mSensorListByType.append(type, list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,7 +439,6 @@ public abstract class SensorManager {
|
|||||||
*/
|
*/
|
||||||
public Sensor getDefaultSensor(int type) {
|
public Sensor getDefaultSensor(int type) {
|
||||||
// TODO: need to be smarter, for now, just return the 1st sensor
|
// TODO: need to be smarter, for now, just return the 1st sensor
|
||||||
List<Sensor> l = getSensorList(type);
|
|
||||||
boolean wakeUpSensor = false;
|
boolean wakeUpSensor = false;
|
||||||
// For the following sensor types, return a wake-up sensor. These types are by default
|
// For the following sensor types, return a wake-up sensor. These types are by default
|
||||||
// defined as wake-up sensors. For the rest of the SDK defined sensor types return a
|
// defined as wake-up sensors. For the rest of the SDK defined sensor types return a
|
||||||
@@ -457,11 +449,7 @@ public abstract class SensorManager {
|
|||||||
type == Sensor.TYPE_WRIST_TILT_GESTURE) {
|
type == Sensor.TYPE_WRIST_TILT_GESTURE) {
|
||||||
wakeUpSensor = true;
|
wakeUpSensor = true;
|
||||||
}
|
}
|
||||||
|
return getDefaultSensor(type, wakeUpSensor);
|
||||||
for (Sensor sensor : l) {
|
|
||||||
if (sensor.isWakeUpSensor() == wakeUpSensor) return sensor;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -491,9 +479,9 @@ public abstract class SensorManager {
|
|||||||
* @see Sensor#isWakeUpSensor()
|
* @see Sensor#isWakeUpSensor()
|
||||||
*/
|
*/
|
||||||
public Sensor getDefaultSensor(int type, boolean wakeUp) {
|
public Sensor getDefaultSensor(int type, boolean wakeUp) {
|
||||||
List<Sensor> l = getSensorList(type);
|
final List<Sensor> l = getFullSensorList();
|
||||||
for (Sensor sensor : l) {
|
for (Sensor sensor : l) {
|
||||||
if (sensor.isWakeUpSensor() == wakeUp)
|
if (sensor.getType() == type && sensor.isWakeUpSensor() == wakeUp)
|
||||||
return sensor;
|
return sensor;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ public class SystemSensorManager extends SensorManager {
|
|||||||
private final Object mLock = new Object();
|
private final Object mLock = new Object();
|
||||||
|
|
||||||
private final ArrayList<Sensor> mFullSensorsList = new ArrayList<>();
|
private final ArrayList<Sensor> mFullSensorsList = new ArrayList<>();
|
||||||
|
private List<Sensor> mSensorsListCached = null;
|
||||||
private final SparseArray<Sensor> mHandleToSensor = new SparseArray<>();
|
private final SparseArray<Sensor> mHandleToSensor = new SparseArray<>();
|
||||||
|
|
||||||
// Listener list
|
// Listener list
|
||||||
@@ -60,6 +61,8 @@ public class SystemSensorManager extends SensorManager {
|
|||||||
private final HashMap<TriggerEventListener, TriggerEventQueue> mTriggerListeners =
|
private final HashMap<TriggerEventListener, TriggerEventQueue> mTriggerListeners =
|
||||||
new HashMap<TriggerEventListener, TriggerEventQueue>();
|
new HashMap<TriggerEventListener, TriggerEventQueue>();
|
||||||
|
|
||||||
|
private boolean mBodySensorPermission;
|
||||||
|
|
||||||
// Looper associated with the context in which this instance was created.
|
// Looper associated with the context in which this instance was created.
|
||||||
private final Looper mMainLooper;
|
private final Looper mMainLooper;
|
||||||
private final int mTargetSdkLevel;
|
private final int mTargetSdkLevel;
|
||||||
@@ -74,6 +77,7 @@ public class SystemSensorManager extends SensorManager {
|
|||||||
mNativeInstance = nativeCreate(context.getOpPackageName());
|
mNativeInstance = nativeCreate(context.getOpPackageName());
|
||||||
|
|
||||||
synchronized(mLock) {
|
synchronized(mLock) {
|
||||||
|
updatePermission();
|
||||||
if (!sSensorModuleInitialized) {
|
if (!sSensorModuleInitialized) {
|
||||||
sSensorModuleInitialized = true;
|
sSensorModuleInitialized = true;
|
||||||
nativeClassInit();
|
nativeClassInit();
|
||||||
@@ -89,11 +93,27 @@ public class SystemSensorManager extends SensorManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@Override
|
@Override
|
||||||
protected List<Sensor> getFullSensorList() {
|
protected List<Sensor> getFullSensorList() {
|
||||||
return mFullSensorsList;
|
synchronized (mLock) {
|
||||||
|
if ( updatePermission() || mSensorsListCached == null) {
|
||||||
|
List<Sensor> list = new ArrayList();
|
||||||
|
for (Sensor s: mFullSensorsList) {
|
||||||
|
switch (s.getRequiredPermission()) {
|
||||||
|
case Manifest.permission.BODY_SENSORS:
|
||||||
|
if (mBodySensorPermission) {
|
||||||
|
list.add(s);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
list.add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mSensorsListCached = list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mSensorsListCached;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -274,6 +294,17 @@ public class SystemSensorManager extends SensorManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns true if permission is changed */
|
||||||
|
private boolean updatePermission() {
|
||||||
|
boolean bodySensorPermission =
|
||||||
|
(mContext.checkSelfPermission(Manifest.permission.BODY_SENSORS) ==
|
||||||
|
PackageManager.PERMISSION_GRANTED);
|
||||||
|
|
||||||
|
boolean ret = bodySensorPermission != mBodySensorPermission;
|
||||||
|
mBodySensorPermission = bodySensorPermission;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BaseEventQueue is the communication channel with the sensor service,
|
* BaseEventQueue is the communication channel with the sensor service,
|
||||||
* SensorEventQueue, TriggerEventQueue are subclases and there is one-to-one mapping between
|
* SensorEventQueue, TriggerEventQueue are subclases and there is one-to-one mapping between
|
||||||
|
|||||||
@@ -52,13 +52,12 @@ ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int ASensorManager_getSensorList(ASensorManager* manager,
|
int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list)
|
||||||
ASensorList* list)
|
|
||||||
{
|
{
|
||||||
Sensor const* const* l;
|
Sensor const* const* sensorPointerList;
|
||||||
int c = static_cast<SensorManager*>(manager)->getSensorList(&l);
|
int c = static_cast<SensorManager*>(manager)->getAvailableSensorList(&sensorPointerList);
|
||||||
if (list) {
|
if (list) {
|
||||||
*list = reinterpret_cast<ASensorList>(l);
|
*list = reinterpret_cast<ASensorList>(sensorPointerList);
|
||||||
}
|
}
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@@ -71,7 +70,7 @@ ASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type
|
|||||||
ASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager,
|
ASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager,
|
||||||
int type, bool wakeUp) {
|
int type, bool wakeUp) {
|
||||||
Sensor const* const* sensorList;
|
Sensor const* const* sensorList;
|
||||||
size_t size = static_cast<SensorManager*>(manager)->getSensorList(&sensorList);
|
size_t size = static_cast<SensorManager*>(manager)->getAvailableSensorList(&sensorList);
|
||||||
for (size_t i = 0; i < size; ++i) {
|
for (size_t i = 0; i < size; ++i) {
|
||||||
if (ASensor_getType(sensorList[i]) == type &&
|
if (ASensor_getType(sensorList[i]) == type &&
|
||||||
ASensor_isWakeUpSensor(sensorList[i]) == wakeUp) {
|
ASensor_isWakeUpSensor(sensorList[i]) == wakeUp) {
|
||||||
|
|||||||
Reference in New Issue
Block a user