Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02087754 authored by Jaikumar Ganesh's avatar Jaikumar Ganesh Committed by Android (Google) Code Review
Browse files

Merge "Fix race condition and disable call." into jb-mr2-dev

parents 26257a09 2e900897
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1387,14 +1387,14 @@ public abstract class SensorManager {
     * @throws IllegalArgumentException when sensor is a trigger sensor.
     */
    public boolean cancelTriggerSensor(TriggerEventListener listener, Sensor sensor) {
        return cancelTriggerSensorImpl(listener, sensor);
        return cancelTriggerSensorImpl(listener, sensor, true);
    }

    /**
     * @hide
     */
    protected abstract boolean cancelTriggerSensorImpl(TriggerEventListener listener,
            Sensor sensor);
            Sensor sensor, boolean disable);


    private LegacySensorManager getLegacySensorManager() {
+28 −14
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.MessageQueue;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;
@@ -135,7 +136,7 @@ public class SystemSensorManager extends SensorManager {
                if (sensor == null) {
                    result = queue.removeAllSensors();
                } else {
                    result = queue.removeSensor(sensor);
                    result = queue.removeSensor(sensor, true);
                }
                if (result && !queue.hasSensors()) {
                    mSensorListeners.remove(listener);
@@ -170,7 +171,8 @@ public class SystemSensorManager extends SensorManager {

    /** @hide */
    @Override
    protected boolean cancelTriggerSensorImpl(TriggerEventListener listener, Sensor sensor) {
    protected boolean cancelTriggerSensorImpl(TriggerEventListener listener, Sensor sensor,
            boolean disable) {
        if (sensor != null && Sensor.getReportingMode(sensor) != Sensor.REPORTING_MODE_ONE_SHOT) {
            return false;
        }
@@ -181,7 +183,7 @@ public class SystemSensorManager extends SensorManager {
                if (sensor == null) {
                    result = queue.removeAllSensors();
                } else {
                    result = queue.removeSensor(sensor);
                    result = queue.removeSensor(sensor, disable);
                }
                if (result && !queue.hasSensors()) {
                    mTriggerListeners.remove(listener);
@@ -225,15 +227,18 @@ public class SystemSensorManager extends SensorManager {

        public boolean addSensor(Sensor sensor, int delay) {
            // Check if already present.
            if (mActiveSensors.get(sensor.getHandle())) return false;
            int handle = sensor.getHandle();
            if (mActiveSensors.get(handle)) return false;

            if (enableSensor(sensor, delay) == 0) {
                mActiveSensors.put(sensor.getHandle(), true);
            // Get ready to receive events before calling enable.
            mActiveSensors.put(handle, true);
            addSensorEvent(sensor);
                return true;
            }
            if (enableSensor(sensor, delay) != 0) {
                removeSensor(sensor, false);
                return false;
            }
            return true;
        }

        public boolean removeAllSensors() {
            for (int i=0 ; i<mActiveSensors.size(); i++) {
@@ -252,10 +257,10 @@ public class SystemSensorManager extends SensorManager {
            return true;
        }

        public boolean removeSensor(Sensor sensor) {
        public boolean removeSensor(Sensor sensor, boolean disable) {
            final int handle = sensor.getHandle();
            if (mActiveSensors.get(handle)) {
                disableSensor(sensor);
                if (disable) disableSensor(sensor);
                mActiveSensors.put(sensor.getHandle(), false);
                removeSensorEvent(sensor);
                return true;
@@ -334,6 +339,10 @@ public class SystemSensorManager extends SensorManager {
                long timestamp) {
            final Sensor sensor = sHandleToSensor.get(handle);
            SensorEvent t = mSensorsEvents.get(handle);
            if (t == null) {
                Log.e(TAG, "Error: Sensor Event is null for Sensor: " + sensor);
                return;
            }
            // Copy from the values array.
            System.arraycopy(values, 0, t.values, 0, t.values.length);
            t.timestamp = timestamp;
@@ -390,14 +399,19 @@ public class SystemSensorManager extends SensorManager {
                long timestamp) {
            final Sensor sensor = sHandleToSensor.get(handle);
            TriggerEvent t = mTriggerEvents.get(handle);
            if (t == null) {
                Log.e(TAG, "Error: Trigger Event is null for Sensor: " + sensor);
                return;
            }

            // Copy from the values array.
            System.arraycopy(values, 0, t.values, 0, t.values.length);
            t.timestamp = timestamp;
            t.sensor = sensor;

            // A trigger sensor should be auto disabled.
            mManager.cancelTriggerSensorImpl(mListener, sensor);
            // A trigger sensor is auto disabled. So just clean up and don't call native
            // disable.
            mManager.cancelTriggerSensorImpl(mListener, sensor, false);

            mListener.onTrigger(t);
        }