From 80bf63702175322053f2b38c4fff56b653ab7c70 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Sun, 26 Aug 2012 14:52:30 +1200 Subject: [PATCH] altosdroid: excise BluetoothChatService example code Signed-off-by: Mike Beattie --- .../altusmetrum/AltosDroid/AltosDroid.java | 75 +--- .../AltosDroid/BluetoothChatService.java | 354 ------------------ 2 files changed, 11 insertions(+), 418 deletions(-) delete mode 100644 altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index 92ba5587..521588fb 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -64,10 +64,6 @@ public class AltosDroid extends Activity { private EditText mOutEditText; private Button mSendButton; - // String buffer for outgoing messages - private StringBuffer mOutStringBuffer; - // Member object for the chat services - private BluetoothChatService mChatService = null; // Intent request codes private static final int REQUEST_CONNECT_DEVICE = 1; private static final int REQUEST_ENABLE_BT = 2; @@ -115,7 +111,7 @@ public class AltosDroid extends Activity { Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT); } else { - if (mChatService == null) setupChat(); + //if (mChatService == null) setupChat(); } } @@ -127,13 +123,13 @@ public class AltosDroid extends Activity { // Performing this check in onResume() covers the case in which BT was // not enabled during onStart(), so we were paused to enable it... // onResume() will be called when ACTION_REQUEST_ENABLE activity returns. - if (mChatService != null) { - // Only if the state is STATE_NONE, do we know that we haven't started already - if (mChatService.getState() == BluetoothChatService.STATE_NONE) { - // Start the Bluetooth chat services - mChatService.start(); - } - } + //if (mChatService != null) { + // Only if the state is STATE_NONE, do we know that we haven't started already + //if (mChatService.getState() == BluetoothChatService.STATE_NONE) { + // Start the Bluetooth chat services + //mChatService.start(); + //} + //} } @Override @@ -151,13 +147,12 @@ public class AltosDroid extends Activity { @Override public void onDestroy() { super.onDestroy(); - // Stop the Bluetooth chat services - if (mChatService != null) mChatService.stop(); if(D) Log.e(TAG, "--- ON DESTROY ---"); } +/* private void setupChat() { Log.d(TAG, "setupChat()"); @@ -187,6 +182,7 @@ public class AltosDroid extends Activity { // Initialize the buffer for outgoing messages mOutStringBuffer = new StringBuffer(""); } +*/ /** * Sends a message. @@ -228,54 +224,6 @@ public class AltosDroid extends Activity { }; */ - // The Handler that gets information back from the BluetoothChatService - private final Handler mHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case MESSAGE_STATE_CHANGE: - if(D) Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1); - switch (msg.arg1) { - case BluetoothChatService.STATE_CONNECTED: - mTitle.setText(R.string.title_connected_to); - mTitle.append(mConnectedDeviceName); - mSerialView.setText(""); - break; - case BluetoothChatService.STATE_CONNECTING: - mTitle.setText(R.string.title_connecting); - break; - case BluetoothChatService.STATE_READY: - case BluetoothChatService.STATE_NONE: - mTitle.setText(R.string.title_not_connected); - break; - } - break; - case MESSAGE_WRITE: - byte[] writeBuf = (byte[]) msg.obj; - // construct a string from the buffer - String writeMessage = new String(writeBuf); - mSerialView.append(writeMessage + '\n'); - break; - case MESSAGE_READ: - byte[] readBuf = (byte[]) msg.obj; - // construct a string from the valid bytes in the buffer - String readMessage = new String(readBuf, 0, msg.arg1); - mSerialView.append(readMessage); - break; - case MESSAGE_DEVICE_NAME: - // save the connected device's name - mConnectedDeviceName = msg.getData().getString(DEVICE_NAME); - Toast.makeText(getApplicationContext(), "Connected to " - + mConnectedDeviceName, Toast.LENGTH_SHORT).show(); - break; - case MESSAGE_TOAST: - Toast.makeText(getApplicationContext(), msg.getData().getString(TOAST), - Toast.LENGTH_SHORT).show(); - break; - } - } - }; - public void onActivityResult(int requestCode, int resultCode, Intent data) { if(D) Log.d(TAG, "onActivityResult " + resultCode); switch (requestCode) { @@ -289,7 +237,7 @@ public class AltosDroid extends Activity { // When the request to enable Bluetooth returns if (resultCode == Activity.RESULT_OK) { // Bluetooth is now enabled, so set up a chat session - setupChat(); + //setupChat(); } else { // User did not enable Bluetooth or an error occured Log.d(TAG, "BT not enabled"); @@ -306,7 +254,6 @@ public class AltosDroid extends Activity { // Get the BLuetoothDevice object BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); // Attempt to connect to the device - mChatService.connect(device); } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java b/altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java deleted file mode 100644 index a93c08d6..00000000 --- a/altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.altusmetrum.AltosDroid; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.UUID; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothSocket; -import android.content.Context; -import android.os.Bundle; -import android.os.Handler; -import android.os.Message; -import android.util.Log; - -/** - * This class does all the work for setting up and managing Bluetooth - * connections with other devices. It has a thread that listens for - * incoming connections, a thread for connecting with a device, and a - * thread for performing data transmissions when connected. - */ -public class BluetoothChatService { - // Debugging - private static final String TAG = "BluetoothChatService"; - private static final boolean D = true; - - // Member fields - private final BluetoothAdapter mAdapter; - private final Handler mHandler; - private ConnectThread mConnectThread; - private ConnectedThread mConnectedThread; - private int mState; - - // Constants that indicate the current connection state - public static final int STATE_NONE = 0; // we're doing nothing - public static final int STATE_READY = 1; - public static final int STATE_CONNECTING = 2; // now initiating an outgoing connection - public static final int STATE_CONNECTED = 3; // now connected to a remote device - - /** - * Constructor. Prepares a new BluetoothChat session. - * @param context The UI Activity Context - * @param handler A Handler to send messages back to the UI Activity - */ - public BluetoothChatService(Context context, Handler handler) { - mAdapter = BluetoothAdapter.getDefaultAdapter(); - mState = STATE_NONE; - mHandler = handler; - } - - /** - * Set the current state of the chat connection - * @param state An integer defining the current connection state - */ - private synchronized void setState(int state) { - if (D) Log.d(TAG, "setState() " + mState + " -> " + state); - mState = state; - - // Give the new state to the Handler so the UI Activity can update - mHandler.obtainMessage(AltosDroid.MESSAGE_STATE_CHANGE, state, -1).sendToTarget(); - } - - /** - * Return the current connection state. */ - public synchronized int getState() { - return mState; - } - - /** - * Start the chat service. Specifically start AcceptThread to begin a - * session in listening (server) mode. Called by the Activity onResume() */ - public synchronized void start() { - if (D) Log.d(TAG, "start"); - - // Cancel any thread attempting to make a connection - if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;} - - // Cancel any thread currently running a connection - if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;} - - setState(STATE_READY); - - } - - /** - * Start the ConnectThread to initiate a connection to a remote device. - * @param device The BluetoothDevice to connect - */ - public synchronized void connect(BluetoothDevice device) { - if (D) Log.d(TAG, "connect to: " + device); - - // Cancel any thread attempting to make a connection - if (mState == STATE_CONNECTING) { - if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;} - } - - // Cancel any thread currently running a connection - if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;} - - // Start the thread to connect with the given device - mConnectThread = new ConnectThread(device); - mConnectThread.start(); - setState(STATE_CONNECTING); - } - - /** - * Start the ConnectedThread to begin managing a Bluetooth connection - * @param socket The BluetoothSocket on which the connection was made - * @param device The BluetoothDevice that has been connected - */ - public synchronized void connected(BluetoothSocket socket, BluetoothDevice device) { - if (D) Log.d(TAG, "connected"); - - // Cancel the thread that completed the connection - if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;} - - // Cancel any thread currently running a connection - if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;} - - // Start the thread to manage the connection and perform transmissions - mConnectedThread = new ConnectedThread(socket); - mConnectedThread.start(); - - // Send the name of the connected device back to the UI Activity - Message msg = mHandler.obtainMessage(AltosDroid.MESSAGE_DEVICE_NAME); - Bundle bundle = new Bundle(); - bundle.putString(AltosDroid.DEVICE_NAME, device.getName()); - msg.setData(bundle); - mHandler.sendMessage(msg); - - setState(STATE_CONNECTED); - } - - /** - * Stop all threads - */ - public synchronized void stop() { - if (D) Log.d(TAG, "stop"); - - if (mConnectThread != null) { - mConnectThread.cancel(); - mConnectThread = null; - } - - if (mConnectedThread != null) { - mConnectedThread.cancel(); - mConnectedThread = null; - } - - setState(STATE_NONE); - } - - /** - * Write to the ConnectedThread in an unsynchronized manner - * @param out The bytes to write - * @see ConnectedThread#write(byte[]) - */ - public void write(byte[] out) { - // Create temporary object - ConnectedThread r; - // Synchronize a copy of the ConnectedThread - synchronized (this) { - if (mState != STATE_CONNECTED) return; - r = mConnectedThread; - } - // Perform the write unsynchronized - r.write(out); - } - - /** - * Indicate that the connection attempt failed and notify the UI Activity. - */ - private void connectionFailed() { - // Send a failure message back to the Activity - Message msg = mHandler.obtainMessage(AltosDroid.MESSAGE_TOAST); - Bundle bundle = new Bundle(); - bundle.putString(AltosDroid.TOAST, "Unable to connect device"); - msg.setData(bundle); - mHandler.sendMessage(msg); - - // Start the service over to restart listening mode - BluetoothChatService.this.start(); - } - - /** - * Indicate that the connection was lost and notify the UI Activity. - */ - private void connectionLost() { - // Send a failure message back to the Activity - Message msg = mHandler.obtainMessage(AltosDroid.MESSAGE_TOAST); - Bundle bundle = new Bundle(); - bundle.putString(AltosDroid.TOAST, "Device connection was lost"); - msg.setData(bundle); - mHandler.sendMessage(msg); - - // Start the service over to restart listening mode - BluetoothChatService.this.start(); - } - - - /** - * This thread runs while attempting to make an outgoing connection - * with a device. It runs straight through; the connection either - * succeeds or fails. - */ - private class ConnectThread extends Thread { - private final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); - private final BluetoothSocket mmSocket; - private final BluetoothDevice mmDevice; - - public ConnectThread(BluetoothDevice device) { - mmDevice = device; - BluetoothSocket tmp = null; - - try { - tmp = mmDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); - } catch (IOException e) { - e.printStackTrace(); - } - mmSocket = tmp; - } - - public void run() { - Log.i(TAG, "BEGIN mConnectThread"); - setName("ConnectThread"); - - // Always cancel discovery because it will slow down a connection - mAdapter.cancelDiscovery(); - - // Make a connection to the BluetoothSocket - try { - // This is a blocking call and will only return on a - // successful connection or an exception - mmSocket.connect(); - } catch (IOException e) { - // Close the socket - try { - mmSocket.close(); - } catch (IOException e2) { - Log.e(TAG, "unable to close() socket during connection failure", e2); - } - connectionFailed(); - return; - } - - // Reset the ConnectThread because we're done - synchronized (BluetoothChatService.this) { - mConnectThread = null; - } - - // Start the connected thread - connected(mmSocket, mmDevice); - } - - public void cancel() { - try { - mmSocket.close(); - } catch (IOException e) { - Log.e(TAG, "close() of connect socket failed", e); - } - } - } - - /** - * This thread runs during a connection with a remote device. - * It handles all incoming and outgoing transmissions. - */ - private class ConnectedThread extends Thread { - private final BluetoothSocket mmSocket; - private final InputStream mmInStream; - private final OutputStream mmOutStream; - - public ConnectedThread(BluetoothSocket socket) { - Log.d(TAG, "create ConnectedThread"); - mmSocket = socket; - InputStream tmpIn = null; - OutputStream tmpOut = null; - - // Get the BluetoothSocket input and output streams - try { - tmpIn = socket.getInputStream(); - tmpOut = socket.getOutputStream(); - } catch (IOException e) { - Log.e(TAG, "temp sockets not created", e); - } - - mmInStream = tmpIn; - mmOutStream = tmpOut; - } - - public void run() { - Log.i(TAG, "BEGIN mConnectedThread"); - byte[] buffer = new byte[1024]; - int bytes; - - // Keep listening to the InputStream while connected - while (true) { - try { - // Read from the InputStream - bytes = mmInStream.read(buffer); - - // Send the obtained bytes to the UI Activity - mHandler.obtainMessage(AltosDroid.MESSAGE_READ, bytes, -1, buffer.clone()) - .sendToTarget(); - } catch (IOException e) { - Log.e(TAG, "disconnected", e); - connectionLost(); - break; - } - } - } - - /** - * Write to the connected OutStream. - * @param buffer The bytes to write - */ - public void write(byte[] buffer) { - try { - mmOutStream.write(buffer); - mmOutStream.write('\n'); - - // Share the sent message back to the UI Activity - mHandler.obtainMessage(AltosDroid.MESSAGE_WRITE, -1, -1, buffer) - .sendToTarget(); - } catch (IOException e) { - Log.e(TAG, "Exception during write", e); - } - } - - public void cancel() { - try { - mmSocket.close(); - } catch (IOException e) { - Log.e(TAG, "close() of connect socket failed", e); - } - } - } -} -- 2.30.2