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

Commit 656c8843 authored by Eric Rowe's avatar Eric Rowe Committed by Android (Google) Code Review
Browse files

Merge "Cleaned up BT test utils"

parents fbf80215 207c0a58
Loading
Loading
Loading
Loading
+113 −146
Original line number Diff line number Diff line
@@ -35,49 +35,29 @@ import java.util.List;
public class BluetoothTestUtils extends Assert {

    /**
     * Timeout for {@link BluetoothAdapter#disable()} in ms.
     * Timeout for enable/disable in ms.
     */
    private static final int DISABLE_TIMEOUT = 20000;
    private static final int ENABLE_DISABLE_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothAdapter#enable()} in ms.
     * Timeout for discoverable/undiscoverable in ms.
     */
    private static final int ENABLE_TIMEOUT = 20000;
    private static final int DISCOVERABLE_UNDISCOVERABLE_TIMEOUT = 5000;

    /**
     * Timeout for {@link BluetoothAdapter#setScanMode(int)} in ms.
     * Timeout for starting/stopping a scan in ms.
     */
    private static final int SET_SCAN_MODE_TIMEOUT = 5000;
    private static final int START_STOP_SCAN_TIMEOUT = 5000;

    /**
     * Timeout for {@link BluetoothAdapter#startDiscovery()} in ms.
     * Timeout for pair/unpair in ms.
     */
    private static final int START_DISCOVERY_TIMEOUT = 5000;
    private static final int PAIR_UNPAIR_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothAdapter#cancelDiscovery()} in ms.
     * Timeout for connecting/disconnecting a profile in ms.
     */
    private static final int CANCEL_DISCOVERY_TIMEOUT = 5000;

    /**
     * Timeout for {@link BluetoothDevice#createBond()} in ms.
     */
    private static final int PAIR_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothDevice#removeBond()} in ms.
     */
    private static final int UNPAIR_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothProfile#connect(BluetoothDevice)} in ms.
     */
    private static final int CONNECT_PROFILE_TIMEOUT = 20000;

    /**
     * Timeout for {@link BluetoothProfile#disconnect(BluetoothDevice)} in ms.
     */
    private static final int DISCONNECT_PROFILE_TIMEOUT = 20000;
    private static final int CONNECT_DISCONNECT_PROFILE_TIMEOUT = 20000;

    /**
     * Timeout to connect a profile proxy in ms.
@@ -265,7 +245,6 @@ public class BluetoothTestUtils extends Assert {

        @Override
        public void onReceive(Context context, Intent intent) {

            if (mConnectionAction != null && mConnectionAction.equals(intent.getAction())) {
                if (!mDevice.equals(intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE))) {
                    return;
@@ -397,11 +376,11 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < ENABLE_TIMEOUT) {
        while (System.currentTimeMillis() - s < ENABLE_DISABLE_TIMEOUT) {
            state = adapter.getState();
            if (state == BluetoothAdapter.STATE_ON) {
            if (state == BluetoothAdapter.STATE_ON
                    && (receiver.getFiredFlags() & mask) == mask) {
                assertTrue(adapter.isEnabled());
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("enable() completed in %d ms", (finish - start)));
@@ -411,9 +390,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.STATE_TURNING_ON, state);
            }
            sleep(POLL_TIME);
        }

@@ -454,24 +430,20 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < DISABLE_TIMEOUT) {
        while (System.currentTimeMillis() - s < ENABLE_DISABLE_TIMEOUT) {
            state = adapter.getState();
            if (state == BluetoothAdapter.STATE_OFF) {
            if (state == BluetoothAdapter.STATE_OFF
                    && (receiver.getFiredFlags() & mask) == mask) {
                assertFalse(adapter.isEnabled());
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                        writeOutput(String.format("disable() completed in %d ms",
                                (finish - start)));
                    writeOutput(String.format("disable() completed in %d ms", (finish - start)));
                } else {
                    writeOutput("disable() completed");
                }
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.STATE_TURNING_OFF, state);
            }
            sleep(POLL_TIME);
        }

@@ -499,18 +471,15 @@ public class BluetoothTestUtils extends Assert {
        long start = System.currentTimeMillis();
        assertTrue(adapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE));

        while (System.currentTimeMillis() - start < SET_SCAN_MODE_TIMEOUT) {
        while (System.currentTimeMillis() - start < DISCOVERABLE_UNDISCOVERABLE_TIMEOUT) {
            scanMode = adapter.getScanMode();
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE
                    && (receiver.getFiredFlags() & mask) == mask) {
                writeOutput(String.format("discoverable() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.SCAN_MODE_CONNECTABLE, scanMode);
            }
            sleep(POLL_TIME);
        }

@@ -539,18 +508,15 @@ public class BluetoothTestUtils extends Assert {
        long start = System.currentTimeMillis();
        assertTrue(adapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE));

        while (System.currentTimeMillis() - start < SET_SCAN_MODE_TIMEOUT) {
        while (System.currentTimeMillis() - start < DISCOVERABLE_UNDISCOVERABLE_TIMEOUT) {
            scanMode = adapter.getScanMode();
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (scanMode == BluetoothAdapter.SCAN_MODE_CONNECTABLE
                    && (receiver.getFiredFlags() & mask) == mask) {
                writeOutput(String.format("undiscoverable() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
                removeReceiver(receiver);
                return;
            }
            } else {
                assertEquals(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, scanMode);
            }
            sleep(POLL_TIME);
        }

@@ -577,7 +543,7 @@ public class BluetoothTestUtils extends Assert {
        long start = System.currentTimeMillis();
        assertTrue(adapter.startDiscovery());

        while (System.currentTimeMillis() - start < START_DISCOVERY_TIMEOUT) {
        while (System.currentTimeMillis() - start < START_STOP_SCAN_TIMEOUT) {
            if (adapter.isDiscovering() && ((receiver.getFiredFlags() & mask) == mask)) {
                writeOutput(String.format("startScan() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
@@ -610,7 +576,7 @@ public class BluetoothTestUtils extends Assert {
        // TODO: put assertTrue() around cancelDiscovery() once it starts returning true.
        adapter.cancelDiscovery();

        while (System.currentTimeMillis() - start < CANCEL_DISCOVERY_TIMEOUT) {
        while (System.currentTimeMillis() - start < START_STOP_SCAN_TIMEOUT) {
            if (!adapter.isDiscovering() && ((receiver.getFiredFlags() & mask) == mask)) {
                writeOutput(String.format("stopScan() completed in %d ms",
                        (receiver.getCompletedTime() - start)));
@@ -670,11 +636,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < PAIR_TIMEOUT) {
        while (System.currentTimeMillis() - s < PAIR_UNPAIR_TIMEOUT) {
            state = device.getBondState();
            if (state == BluetoothDevice.BOND_BONDED) {
            if (state == BluetoothDevice.BOND_BONDED && (receiver.getFiredFlags() & mask) == mask) {
                assertTrue(adapter.getBondedDevices().contains(device));
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("%s completed in %d ms: device=%s", methodName,
@@ -685,7 +650,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            }
            sleep(POLL_TIME);
        }

@@ -727,10 +691,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < UNPAIR_TIMEOUT) {
            if (device.getBondState() == BluetoothDevice.BOND_NONE) {
        while (System.currentTimeMillis() - s < PAIR_UNPAIR_TIMEOUT) {
            if (device.getBondState() == BluetoothDevice.BOND_NONE
                    && (receiver.getFiredFlags() & mask) == mask) {
                assertFalse(adapter.getBondedDevices().contains(device));
                if ((receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("unpair() completed in %d ms: device=%s",
@@ -742,7 +706,6 @@ public class BluetoothTestUtils extends Assert {
                return;
            }
        }
        }

        int firedFlags = receiver.getFiredFlags();
        removeReceiver(receiver);
@@ -794,10 +757,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < CONNECT_PROFILE_TIMEOUT) {
        while (System.currentTimeMillis() - s < CONNECT_DISCONNECT_PROFILE_TIMEOUT) {
            state = proxy.getConnectionState(device);
            if (state == BluetoothProfile.STATE_CONNECTED) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (state == BluetoothProfile.STATE_CONNECTED
                    && (receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("connectProfile() completed in %d ms: "
@@ -809,7 +772,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            }
            sleep(POLL_TIME);
        }

@@ -863,10 +825,10 @@ public class BluetoothTestUtils extends Assert {
        }

        long s = System.currentTimeMillis();
        while (System.currentTimeMillis() - s < DISCONNECT_PROFILE_TIMEOUT) {
        while (System.currentTimeMillis() - s < CONNECT_DISCONNECT_PROFILE_TIMEOUT) {
            state = proxy.getConnectionState(device);
            if (state == BluetoothProfile.STATE_DISCONNECTED) {
                if ((receiver.getFiredFlags() & mask) == mask) {
            if (state == BluetoothProfile.STATE_DISCONNECTED
                    && (receiver.getFiredFlags() & mask) == mask) {
                long finish = receiver.getCompletedTime();
                if (start != -1 && finish != -1) {
                    writeOutput(String.format("disconnectProfile() completed in %d ms: "
@@ -878,7 +840,6 @@ public class BluetoothTestUtils extends Assert {
                removeReceiver(receiver);
                return;
            }
            }
            sleep(POLL_TIME);
        }

@@ -902,38 +863,44 @@ public class BluetoothTestUtils extends Assert {
        }
    }

    private BluetoothReceiver getBluetoothReceiver(int expectedFlags) {
        BluetoothReceiver receiver = new BluetoothReceiver(expectedFlags);
    private void addReceiver(BroadcastReceiver receiver, String[] actions) {
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        filter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        for (String action: actions) {
            filter.addAction(action);
        }
        mContext.registerReceiver(receiver, filter);
        mReceivers.add(receiver);
    }

    private BluetoothReceiver getBluetoothReceiver(int expectedFlags) {
        String[] actions = {
                BluetoothAdapter.ACTION_DISCOVERY_FINISHED,
                BluetoothAdapter.ACTION_DISCOVERY_STARTED,
                BluetoothAdapter.ACTION_SCAN_MODE_CHANGED,
                BluetoothAdapter.ACTION_STATE_CHANGED};
        BluetoothReceiver receiver = new BluetoothReceiver(expectedFlags);
        addReceiver(receiver, actions);
        return receiver;
    }

    private PairReceiver getPairReceiver(BluetoothDevice device, int passkey, byte[] pin,
            int expectedFlags) {
        String[] actions = {
                BluetoothDevice.ACTION_PAIRING_REQUEST,
                BluetoothDevice.ACTION_BOND_STATE_CHANGED};
        PairReceiver receiver = new PairReceiver(device, passkey, pin, expectedFlags);
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST);
        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
        mContext.registerReceiver(receiver, filter);
        mReceivers.add(receiver);
        addReceiver(receiver, actions);
        return receiver;
    }

    private ConnectProfileReceiver getConnectProfileReceiver(BluetoothDevice device, int profile,
            int expectedFlags) {
        String[] actions = {
                BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED,
                BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED};
        ConnectProfileReceiver receiver = new ConnectProfileReceiver(device, profile,
                expectedFlags);
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
        filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
        mContext.registerReceiver(receiver, filter);
        mReceivers.add(receiver);
        addReceiver(receiver, actions);
        return receiver;
    }