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

Commit 31d14ce5 authored by Aravind Akella's avatar Aravind Akella
Browse files

Fix for ClassCastException in SystemSensorManager.

Bug: 11068858
Change-Id: I074798a6978b91766b37dec32f2683d8e4adf5d3
parent 0aeca872
Loading
Loading
Loading
Loading
+27 −7
Original line number Original line Diff line number Diff line
@@ -358,15 +358,21 @@ public class SystemSensorManager extends SensorManager {
            mListener = listener;
            mListener = listener;
        }
        }


        @Override
        public void addSensorEvent(Sensor sensor) {
        public void addSensorEvent(Sensor sensor) {
            SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor,
            SensorEvent t = new SensorEvent(Sensor.getMaxLengthValuesArray(sensor,
                    mManager.mTargetSdkLevel));
                    mManager.mTargetSdkLevel));
            synchronized (mSensorsEvents) {
                mSensorsEvents.put(sensor.getHandle(), t);
                mSensorsEvents.put(sensor.getHandle(), t);
            }
            }
        }


        @Override
        public void removeSensorEvent(Sensor sensor) {
        public void removeSensorEvent(Sensor sensor) {
            synchronized (mSensorsEvents) {
                mSensorsEvents.delete(sensor.getHandle());
                mSensorsEvents.delete(sensor.getHandle());
            }
            }
        }


        // Called from native code.
        // Called from native code.
        @SuppressWarnings("unused")
        @SuppressWarnings("unused")
@@ -374,9 +380,14 @@ public class SystemSensorManager extends SensorManager {
        protected void dispatchSensorEvent(int handle, float[] values, int inAccuracy,
        protected void dispatchSensorEvent(int handle, float[] values, int inAccuracy,
                long timestamp) {
                long timestamp) {
            final Sensor sensor = sHandleToSensor.get(handle);
            final Sensor sensor = sHandleToSensor.get(handle);
            SensorEvent t = mSensorsEvents.get(handle);
            SensorEvent t = null;
            synchronized (mSensorsEvents) {
                t = mSensorsEvents.get(handle);
            }

            if (t == null) {
            if (t == null) {
                Log.e(TAG, "Error: Sensor Event is null for Sensor: " + sensor);
                // This may happen if the client has unregistered and there are pending events in
                // the queue waiting to be delivered. Ignore.
                return;
                return;
            }
            }
            // Copy from the values array.
            // Copy from the values array.
@@ -427,15 +438,21 @@ public class SystemSensorManager extends SensorManager {
            mListener = listener;
            mListener = listener;
        }
        }


        @Override
        public void addSensorEvent(Sensor sensor) {
        public void addSensorEvent(Sensor sensor) {
            TriggerEvent t = new TriggerEvent(Sensor.getMaxLengthValuesArray(sensor,
            TriggerEvent t = new TriggerEvent(Sensor.getMaxLengthValuesArray(sensor,
                    mManager.mTargetSdkLevel));
                    mManager.mTargetSdkLevel));
            synchronized (mTriggerEvents) {
                mTriggerEvents.put(sensor.getHandle(), t);
                mTriggerEvents.put(sensor.getHandle(), t);
            }
            }
        }


        @Override
        public void removeSensorEvent(Sensor sensor) {
        public void removeSensorEvent(Sensor sensor) {
            synchronized (mTriggerEvents) {
                mTriggerEvents.delete(sensor.getHandle());
                mTriggerEvents.delete(sensor.getHandle());
            }
            }
        }


        // Called from native code.
        // Called from native code.
        @SuppressWarnings("unused")
        @SuppressWarnings("unused")
@@ -443,7 +460,10 @@ public class SystemSensorManager extends SensorManager {
        protected void dispatchSensorEvent(int handle, float[] values, int accuracy,
        protected void dispatchSensorEvent(int handle, float[] values, int accuracy,
                long timestamp) {
                long timestamp) {
            final Sensor sensor = sHandleToSensor.get(handle);
            final Sensor sensor = sHandleToSensor.get(handle);
            TriggerEvent t = mTriggerEvents.get(handle);
            TriggerEvent t = null;
            synchronized (mTriggerEvents) {
                t = mTriggerEvents.get(handle);
            }
            if (t == null) {
            if (t == null) {
                Log.e(TAG, "Error: Trigger Event is null for Sensor: " + sensor);
                Log.e(TAG, "Error: Trigger Event is null for Sensor: " + sensor);
                return;
                return;