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

Commit 1bf3ea17 authored by Jason Monk's avatar Jason Monk Committed by android-build-merger
Browse files

Merge "Protect against weak pointer crash." into oc-mr1-dev

am: 04805806

Change-Id: I2efed3ec7096c23bc486d44b5303e24716b31fb7
parents 3a3cf6e3 04805806
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -296,12 +296,15 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa

        @Override
        public void run() {
            mBondState = mDevice.get().getBondState();
            mMaxConnectionState = mDevice.get().getMaxConnectionState();
            CachedBluetoothDevice device = mDevice.get();
            if (device != null) {
                mBondState = device.getBondState();
                mMaxConnectionState = device.getMaxConnectionState();
                mUiHandler.removeMessages(H.MSG_PAIRED_DEVICES_CHANGED);
                mUiHandler.sendEmptyMessage(H.MSG_PAIRED_DEVICES_CHANGED);
            }
        }
    }

    private final class H extends Handler {
        private final ArrayList<BluetoothController.Callback> mCallbacks = new ArrayList<>();
+22 −0
Original line number Diff line number Diff line
@@ -137,4 +137,26 @@ public class BluetoothControllerImplTest extends SysuiTestCase {
        verify(callback).onBluetoothDevicesChanged();
        mainLooper.destroy();
    }

    @Test
    public void testNullAsync_DoesNotCrash() throws Exception {
        CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
        when(device.getMaxConnectionState()).thenReturn(BluetoothProfile.STATE_CONNECTED);
        BluetoothController.Callback callback = mock(BluetoothController.Callback.class);
        mBluetoothControllerImpl.addCallback(callback);

        // Grab the main looper, we'll need it later.
        TestableLooper mainLooper = new TestableLooper(Looper.getMainLooper());

        try {
            // Trigger the state getting.
            assertEquals(BluetoothProfile.STATE_DISCONNECTED,
                    mBluetoothControllerImpl.getMaxConnectionState(null));

            mTestableLooper.processMessages(1);
            mainLooper.processAllMessages();
        } finally {
            mainLooper.destroy();
        }
    }
}