@Override
        protected void subscribeActual(SingleObserver<? super BluetoothGatt> observer) {
            rxBleGattCallback
                    .getOnConnectionStateChange()
                    .filter(new Predicate<RxBleConnection.RxBleConnectionState>() {
                        @Override
                        public boolean test(RxBleConnection.RxBleConnectionState rxBleConnectionState) {
                            return rxBleConnectionState == DISCONNECTED;
                        }
                    })
                    .firstOrError()
                    .map(new Function<RxBleConnection.RxBleConnectionState, BluetoothGatt>() {
                        @Override
                        public BluetoothGatt apply(RxBleConnection.RxBleConnectionState rxBleConnectionState) {
                            return bluetoothGatt;
                        }
                    })
                    .subscribe(observer);
            disconnectScheduler.createWorker().schedule(new Runnable() {
                @Override
                public void run() {
                    bluetoothGatt.disconnect();
                }
            });
        }
TODO: [DS] 09.02.2016 This operation makes the queue to block until disconnection - maybe it would be better if it would not?
What would happen then if a consecutive call to BluetoothDevice.connectGatt() would be made? What BluetoothGatt would be returned?
1. A completely fresh BluetoothGatt - would work with the current flow
2. The same BluetoothGatt - in this situation we should probably cancel the pending BluetoothGatt.close() call
rxandroidble/src/main/java/com/polidea/rxandroidble2/internal/operations/DisconnectOperation.java