Back to project page lamp.
The source code is released under:
GNU General Public License
If you think the Android project lamp listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/** Copyright (C) 2013 Marek Sebera <marek@msebera.cz> */* www . ja v a2s . c om*/ * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package cz.tomsuch.lampicka.util; import java.io.FilterInputStream; import java.io.FilterOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; /** * Wrapper class, to prevent multiple calls to BluetoothSocket.close() * * @author Marek Sebera <marek@msebera.cz> * */ public final class FixedBluetoothSocket { private BluetoothSocket socket; private boolean isClosed = true; /** * Constructor, takes one socket * * @param sock * socket to wrap on, must not be null * */ public FixedBluetoothSocket(BluetoothSocket sock) { assert (sock != null); this.socket = sock; } /** * Closes socket only if it hasn't been closed yet * */ public void close() throws IOException { synchronized (socket) { if (!isClosed) { socket.close(); isClosed = true; } } } /** * Wraps around BluetoothSocket.connect() * */ public void connect() throws IOException { socket.connect(); isClosed = false; } /** * Wraps around BluetoothSocket.getInputStream() * */ public InputStream getInputStream() throws IOException { return new FilterInputStream(socket.getInputStream()) { @Override public void close() throws IOException { FixedBluetoothSocket.this.close(); } }; } /** * Wraps around BluetoothSocket.getOutputStream() * */ public OutputStream getOutputStream() throws IOException { return new FilterOutputStream(socket.getOutputStream()) { @Override public void close() throws IOException { FixedBluetoothSocket.this.close(); } }; } /** * Wraps around BluetoothSocket.getRemoteDevice() * */ public BluetoothDevice getRemoteDevice() { if (isClosed) return null; return socket.getRemoteDevice(); } /** * Wraps around BluetoothSocket.isConnected() * * This method always returns true, as it is not reliable across all devices * */ public boolean isConnected() { return true; } }