LegacySensorManagerpublic final class LegacySensorManager extends Object Helper class for implementing the legacy sensor manager API. |
Fields Summary |
---|
private static boolean | sInitialized | private static android.view.IWindowManager | sWindowManager | private static int | sRotation | private final SensorManager | mSensorManager | private final HashMap | mLegacyListenersMap |
Constructors Summary |
---|
public LegacySensorManager(SensorManager sensorManager)
mSensorManager = sensorManager;
synchronized (SensorManager.class) {
if (!sInitialized) {
sWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService("window"));
if (sWindowManager != null) {
// if it's null we're running in the system process
// which won't get the rotated values
try {
sRotation = sWindowManager.watchRotation(
new IRotationWatcher.Stub() {
public void onRotationChanged(int rotation) {
LegacySensorManager.onRotationChanged(rotation);
}
}
);
} catch (RemoteException e) {
}
}
}
}
|
Methods Summary |
---|
static int | getRotation()
synchronized (SensorManager.class) {
return sRotation;
}
| public int | getSensors()
int result = 0;
final List<Sensor> fullList = mSensorManager.getFullSensorList();
for (Sensor i : fullList) {
switch (i.getType()) {
case Sensor.TYPE_ACCELEROMETER:
result |= SensorManager.SENSOR_ACCELEROMETER;
break;
case Sensor.TYPE_MAGNETIC_FIELD:
result |= SensorManager.SENSOR_MAGNETIC_FIELD;
break;
case Sensor.TYPE_ORIENTATION:
result |= SensorManager.SENSOR_ORIENTATION
| SensorManager.SENSOR_ORIENTATION_RAW;
break;
}
}
return result;
| static void | onRotationChanged(int rotation)
synchronized (SensorManager.class) {
sRotation = rotation;
}
| private boolean | registerLegacyListener(int legacyType, int type, SensorListener listener, int sensors, int rate)
boolean result = false;
// Are we activating this legacy sensor?
if ((sensors & legacyType) != 0) {
// if so, find a suitable Sensor
Sensor sensor = mSensorManager.getDefaultSensor(type);
if (sensor != null) {
// We do all of this work holding the legacy listener lock to ensure
// that the invariants around listeners are maintained. This is safe
// because neither registerLegacyListener nor unregisterLegacyListener
// are called reentrantly while sensors are being registered or unregistered.
synchronized (mLegacyListenersMap) {
// If we don't already have one, create a LegacyListener
// to wrap this listener and process the events as
// they are expected by legacy apps.
LegacyListener legacyListener = mLegacyListenersMap.get(listener);
if (legacyListener == null) {
// we didn't find a LegacyListener for this client,
// create one, and put it in our list.
legacyListener = new LegacyListener(listener);
mLegacyListenersMap.put(listener, legacyListener);
}
// register this legacy sensor with this legacy listener
if (legacyListener.registerSensor(legacyType)) {
// and finally, register the legacy listener with the new apis
result = mSensorManager.registerListener(legacyListener, sensor, rate);
} else {
result = true; // sensor already enabled
}
}
}
}
return result;
| public boolean | registerListener(SensorListener listener, int sensors, int rate)
if (listener == null) {
return false;
}
boolean result = false;
result = registerLegacyListener(SensorManager.SENSOR_ACCELEROMETER,
Sensor.TYPE_ACCELEROMETER, listener, sensors, rate) || result;
result = registerLegacyListener(SensorManager.SENSOR_MAGNETIC_FIELD,
Sensor.TYPE_MAGNETIC_FIELD, listener, sensors, rate) || result;
result = registerLegacyListener(SensorManager.SENSOR_ORIENTATION_RAW,
Sensor.TYPE_ORIENTATION, listener, sensors, rate) || result;
result = registerLegacyListener(SensorManager.SENSOR_ORIENTATION,
Sensor.TYPE_ORIENTATION, listener, sensors, rate) || result;
result = registerLegacyListener(SensorManager.SENSOR_TEMPERATURE,
Sensor.TYPE_TEMPERATURE, listener, sensors, rate) || result;
return result;
| private void | unregisterLegacyListener(int legacyType, int type, SensorListener listener, int sensors)
// Are we deactivating this legacy sensor?
if ((sensors & legacyType) != 0) {
// if so, find the corresponding Sensor
Sensor sensor = mSensorManager.getDefaultSensor(type);
if (sensor != null) {
// We do all of this work holding the legacy listener lock to ensure
// that the invariants around listeners are maintained. This is safe
// because neither registerLegacyListener nor unregisterLegacyListener
// are called re-entrantly while sensors are being registered or unregistered.
synchronized (mLegacyListenersMap) {
// do we know about this listener?
LegacyListener legacyListener = mLegacyListenersMap.get(listener);
if (legacyListener != null) {
// unregister this legacy sensor and if we don't
// need the corresponding Sensor, unregister it too
if (legacyListener.unregisterSensor(legacyType)) {
// corresponding sensor not needed, unregister
mSensorManager.unregisterListener(legacyListener, sensor);
// finally check if we still need the legacyListener
// in our mapping, if not, get rid of it too.
if (!legacyListener.hasSensors()) {
mLegacyListenersMap.remove(listener);
}
}
}
}
}
}
| public void | unregisterListener(SensorListener listener, int sensors)
if (listener == null) {
return;
}
unregisterLegacyListener(SensorManager.SENSOR_ACCELEROMETER, Sensor.TYPE_ACCELEROMETER,
listener, sensors);
unregisterLegacyListener(SensorManager.SENSOR_MAGNETIC_FIELD, Sensor.TYPE_MAGNETIC_FIELD,
listener, sensors);
unregisterLegacyListener(SensorManager.SENSOR_ORIENTATION_RAW, Sensor.TYPE_ORIENTATION,
listener, sensors);
unregisterLegacyListener(SensorManager.SENSOR_ORIENTATION, Sensor.TYPE_ORIENTATION,
listener, sensors);
unregisterLegacyListener(SensorManager.SENSOR_TEMPERATURE, Sensor.TYPE_TEMPERATURE,
listener, sensors);
|
|