Loading core/java/android/hardware/SensorManager.java +11 −23 Original line number Diff line number Diff line Loading @@ -407,12 +407,8 @@ public abstract class SensorManager { * @see Sensor */ public List<Sensor> getSensorList(int type) { // cache the returned lists the first time List<Sensor> list; final List<Sensor> fullList = getFullSensorList(); synchronized (mSensorListByType) { list = mSensorListByType.get(type); if (list == null) { if (type == Sensor.TYPE_ALL) { list = fullList; } else { Loading @@ -423,9 +419,6 @@ public abstract class SensorManager { } } list = Collections.unmodifiableList(list); mSensorListByType.append(type, list); } } return list; } Loading @@ -446,7 +439,6 @@ public abstract class SensorManager { */ public Sensor getDefaultSensor(int type) { // TODO: need to be smarter, for now, just return the 1st sensor List<Sensor> l = getSensorList(type); boolean wakeUpSensor = false; // 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 Loading @@ -457,11 +449,7 @@ public abstract class SensorManager { type == Sensor.TYPE_WRIST_TILT_GESTURE) { wakeUpSensor = true; } for (Sensor sensor : l) { if (sensor.isWakeUpSensor() == wakeUpSensor) return sensor; } return null; return getDefaultSensor(type, wakeUpSensor); } /** Loading Loading @@ -491,9 +479,9 @@ public abstract class SensorManager { * @see Sensor#isWakeUpSensor() */ public Sensor getDefaultSensor(int type, boolean wakeUp) { List<Sensor> l = getSensorList(type); final List<Sensor> l = getFullSensorList(); for (Sensor sensor : l) { if (sensor.isWakeUpSensor() == wakeUp) if (sensor.getType() == type && sensor.isWakeUpSensor() == wakeUp) return sensor; } return null; Loading core/java/android/hardware/SystemSensorManager.java +33 −2 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ public class SystemSensorManager extends SensorManager { private final Object mLock = new Object(); private final ArrayList<Sensor> mFullSensorsList = new ArrayList<>(); private List<Sensor> mSensorsListCached = null; private final SparseArray<Sensor> mHandleToSensor = new SparseArray<>(); // Listener list Loading @@ -60,6 +61,8 @@ public class SystemSensorManager extends SensorManager { private final HashMap<TriggerEventListener, TriggerEventQueue> mTriggerListeners = new HashMap<TriggerEventListener, TriggerEventQueue>(); private boolean mBodySensorPermission; // Looper associated with the context in which this instance was created. private final Looper mMainLooper; private final int mTargetSdkLevel; Loading @@ -74,6 +77,7 @@ public class SystemSensorManager extends SensorManager { mNativeInstance = nativeCreate(context.getOpPackageName()); synchronized(mLock) { updatePermission(); if (!sSensorModuleInitialized) { sSensorModuleInitialized = true; nativeClassInit(); Loading @@ -89,11 +93,27 @@ public class SystemSensorManager extends SensorManager { } } /** @hide */ @Override 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; } Loading Loading @@ -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, * SensorEventQueue, TriggerEventQueue are subclases and there is one-to-one mapping between Loading native/android/sensor.cpp +5 −6 Original line number Diff line number Diff line Loading @@ -52,13 +52,12 @@ ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName) } } int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list) int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list) { Sensor const* const* l; int c = static_cast<SensorManager*>(manager)->getSensorList(&l); Sensor const* const* sensorPointerList; int c = static_cast<SensorManager*>(manager)->getAvailableSensorList(&sensorPointerList); if (list) { *list = reinterpret_cast<ASensorList>(l); *list = reinterpret_cast<ASensorList>(sensorPointerList); } return c; } Loading @@ -71,7 +70,7 @@ ASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type ASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager, int type, bool wakeUp) { 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) { if (ASensor_getType(sensorList[i]) == type && ASensor_isWakeUpSensor(sensorList[i]) == wakeUp) { Loading Loading
core/java/android/hardware/SensorManager.java +11 −23 Original line number Diff line number Diff line Loading @@ -407,12 +407,8 @@ public abstract class SensorManager { * @see Sensor */ public List<Sensor> getSensorList(int type) { // cache the returned lists the first time List<Sensor> list; final List<Sensor> fullList = getFullSensorList(); synchronized (mSensorListByType) { list = mSensorListByType.get(type); if (list == null) { if (type == Sensor.TYPE_ALL) { list = fullList; } else { Loading @@ -423,9 +419,6 @@ public abstract class SensorManager { } } list = Collections.unmodifiableList(list); mSensorListByType.append(type, list); } } return list; } Loading @@ -446,7 +439,6 @@ public abstract class SensorManager { */ public Sensor getDefaultSensor(int type) { // TODO: need to be smarter, for now, just return the 1st sensor List<Sensor> l = getSensorList(type); boolean wakeUpSensor = false; // 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 Loading @@ -457,11 +449,7 @@ public abstract class SensorManager { type == Sensor.TYPE_WRIST_TILT_GESTURE) { wakeUpSensor = true; } for (Sensor sensor : l) { if (sensor.isWakeUpSensor() == wakeUpSensor) return sensor; } return null; return getDefaultSensor(type, wakeUpSensor); } /** Loading Loading @@ -491,9 +479,9 @@ public abstract class SensorManager { * @see Sensor#isWakeUpSensor() */ public Sensor getDefaultSensor(int type, boolean wakeUp) { List<Sensor> l = getSensorList(type); final List<Sensor> l = getFullSensorList(); for (Sensor sensor : l) { if (sensor.isWakeUpSensor() == wakeUp) if (sensor.getType() == type && sensor.isWakeUpSensor() == wakeUp) return sensor; } return null; Loading
core/java/android/hardware/SystemSensorManager.java +33 −2 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ public class SystemSensorManager extends SensorManager { private final Object mLock = new Object(); private final ArrayList<Sensor> mFullSensorsList = new ArrayList<>(); private List<Sensor> mSensorsListCached = null; private final SparseArray<Sensor> mHandleToSensor = new SparseArray<>(); // Listener list Loading @@ -60,6 +61,8 @@ public class SystemSensorManager extends SensorManager { private final HashMap<TriggerEventListener, TriggerEventQueue> mTriggerListeners = new HashMap<TriggerEventListener, TriggerEventQueue>(); private boolean mBodySensorPermission; // Looper associated with the context in which this instance was created. private final Looper mMainLooper; private final int mTargetSdkLevel; Loading @@ -74,6 +77,7 @@ public class SystemSensorManager extends SensorManager { mNativeInstance = nativeCreate(context.getOpPackageName()); synchronized(mLock) { updatePermission(); if (!sSensorModuleInitialized) { sSensorModuleInitialized = true; nativeClassInit(); Loading @@ -89,11 +93,27 @@ public class SystemSensorManager extends SensorManager { } } /** @hide */ @Override 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; } Loading Loading @@ -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, * SensorEventQueue, TriggerEventQueue are subclases and there is one-to-one mapping between Loading
native/android/sensor.cpp +5 −6 Original line number Diff line number Diff line Loading @@ -52,13 +52,12 @@ ASensorManager* ASensorManager_getInstanceForPackage(const char* packageName) } } int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list) int ASensorManager_getSensorList(ASensorManager* manager, ASensorList* list) { Sensor const* const* l; int c = static_cast<SensorManager*>(manager)->getSensorList(&l); Sensor const* const* sensorPointerList; int c = static_cast<SensorManager*>(manager)->getAvailableSensorList(&sensorPointerList); if (list) { *list = reinterpret_cast<ASensorList>(l); *list = reinterpret_cast<ASensorList>(sensorPointerList); } return c; } Loading @@ -71,7 +70,7 @@ ASensor const* ASensorManager_getDefaultSensor(ASensorManager* manager, int type ASensor const* ASensorManager_getDefaultSensorEx(ASensorManager* manager, int type, bool wakeUp) { 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) { if (ASensor_getType(sensorList[i]) == type && ASensor_isWakeUpSensor(sensorList[i]) == wakeUp) { Loading