diff options
| author | Bdale Garbee <bdale@gag.com> | 2012-08-28 23:39:53 -0600 | 
|---|---|---|
| committer | Bdale Garbee <bdale@gag.com> | 2012-08-28 23:39:53 -0600 | 
| commit | 5ed88fb72c3e3ecf3333c700d838667db71cfbdc (patch) | |
| tree | 3b371f563c0f7607f2fe53242673adb352b48514 /altosdroid/src | |
| parent | adbe64c5a9402b7c5075a444a12629131b663877 (diff) | |
| parent | 621d0930244f25165d2ac5da596dcc87e253b965 (diff) | |
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Conflicts:
	debian/control
Diffstat (limited to 'altosdroid/src')
3 files changed, 83 insertions, 133 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index b4a3227c..b4725e22 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -23,6 +23,7 @@ import android.content.Intent;  import android.os.Bundle;  import android.os.Handler;  import android.os.Message; +import android.text.method.ScrollingMovementMethod;  import android.util.Log;  import android.view.KeyEvent;  import android.view.Menu; @@ -32,10 +33,8 @@ import android.view.View;  import android.view.Window;  import android.view.View.OnClickListener;  import android.view.inputmethod.EditorInfo; -import android.widget.ArrayAdapter;  import android.widget.Button;  import android.widget.EditText; -import android.widget.ListView;  import android.widget.TextView;  import android.widget.Toast;  import org.altusmetrum.AltosDroid.R; @@ -46,11 +45,9 @@ import org.altusmetrum.AltosLib.*;   */  public class AltosDroid extends Activity {      // Debugging -    private static final String TAG = "BluetoothChat"; +    private static final String TAG = "AltosDroid";      private static final boolean D = true; -    private static final AltosLine q = new AltosLine(); -      // Message types sent from the BluetoothChatService Handler      public static final int MESSAGE_STATE_CHANGE = 1;      public static final int MESSAGE_READ = 2; @@ -63,20 +60,17 @@ public class AltosDroid extends Activity {      public static final String TOAST = "toast";      // Intent request codes -    private static final int REQUEST_CONNECT_DEVICE_SECURE = 1; -    private static final int REQUEST_CONNECT_DEVICE_INSECURE = 2; -    private static final int REQUEST_ENABLE_BT = 3; +    private static final int REQUEST_CONNECT_DEVICE = 1; +    private static final int REQUEST_ENABLE_BT      = 2;      // Layout Views      private TextView mTitle; -    private ListView mConversationView; +    private TextView mSerialView;      private EditText mOutEditText;      private Button mSendButton;      // Name of the connected device      private String mConnectedDeviceName = null; -    // Array adapter for the conversation thread -    private ArrayAdapter<String> mConversationArrayAdapter;      // String buffer for outgoing messages      private StringBuffer mOutStringBuffer;      // Local Bluetooth adapter @@ -144,13 +138,35 @@ public class AltosDroid extends Activity {          }      } +    @Override +    public synchronized void onPause() { +        super.onPause(); +        if(D) Log.e(TAG, "- ON PAUSE -"); +    } + +    @Override +    public void onStop() { +        super.onStop(); +        if(D) Log.e(TAG, "-- ON STOP --"); +    } + +    @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()"); -        // Initialize the array adapter for the conversation thread -        mConversationArrayAdapter = new ArrayAdapter<String>(this, R.layout.message); -        mConversationView = (ListView) findViewById(R.id.in); -        mConversationView.setAdapter(mConversationArrayAdapter); +        mSerialView = (TextView) findViewById(R.id.in); +        mSerialView.setMovementMethod(new ScrollingMovementMethod()); +        mSerialView.setClickable(false); +        mSerialView.setLongClickable(false);          // Initialize the compose field with a listener for the return key          mOutEditText = (EditText) findViewById(R.id.edit_text_out); @@ -174,36 +190,6 @@ public class AltosDroid extends Activity {          mOutStringBuffer = new StringBuffer("");      } -    @Override -    public synchronized void onPause() { -        super.onPause(); -        if(D) Log.e(TAG, "- ON PAUSE -"); -    } - -    @Override -    public void onStop() { -        super.onStop(); -        if(D) Log.e(TAG, "-- ON STOP --"); -    } - -    @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 ensureDiscoverable() { -        if(D) Log.d(TAG, "ensure discoverable"); -        if (mBluetoothAdapter.getScanMode() != -            BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { -            Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); -            discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); -            startActivity(discoverableIntent); -        } -    } -      /**       * Sends a message.       * @param message  A string of text to send. @@ -252,7 +238,7 @@ public class AltosDroid extends Activity {                  case BluetoothChatService.STATE_CONNECTED:                      mTitle.setText(R.string.title_connected_to);                      mTitle.append(mConnectedDeviceName); -                    mConversationArrayAdapter.clear(); +                    mSerialView.setText("");                      break;                  case BluetoothChatService.STATE_CONNECTING:                      mTitle.setText(R.string.title_connecting); @@ -267,13 +253,13 @@ public class AltosDroid extends Activity {                  byte[] writeBuf = (byte[]) msg.obj;                  // construct a string from the buffer                  String writeMessage = new String(writeBuf); -                mConversationArrayAdapter.add("Me:  " + writeMessage); +                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); -                mConversationArrayAdapter.add(mConnectedDeviceName+":  " + readMessage); +                mSerialView.append(readMessage);                  break;              case MESSAGE_DEVICE_NAME:                  // save the connected device's name @@ -292,16 +278,10 @@ public class AltosDroid extends Activity {      public void onActivityResult(int requestCode, int resultCode, Intent data) {          if(D) Log.d(TAG, "onActivityResult " + resultCode);          switch (requestCode) { -        case REQUEST_CONNECT_DEVICE_SECURE: -            // When DeviceListActivity returns with a device to connect +        case REQUEST_CONNECT_DEVICE: +            // When DeviceListActivity returns with a device to connect to              if (resultCode == Activity.RESULT_OK) { -                connectDevice(data, true); -            } -            break; -        case REQUEST_CONNECT_DEVICE_INSECURE: -            // When DeviceListActivity returns with a device to connect -            if (resultCode == Activity.RESULT_OK) { -                connectDevice(data, false); +                connectDevice(data);              }              break;          case REQUEST_ENABLE_BT: @@ -318,14 +298,14 @@ public class AltosDroid extends Activity {          }      } -    private void connectDevice(Intent data, boolean secure) { +    private void connectDevice(Intent data) {          // Get the device MAC address          String address = data.getExtras()              .getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);          // Get the BLuetoothDevice object          BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);          // Attempt to connect to the device -        mChatService.connect(device, secure); +        mChatService.connect(device);      }      @Override @@ -347,19 +327,10 @@ public class AltosDroid extends Activity {              serverIntent = new Intent(this, TelemetryServiceActivities.Binding.class);              startActivity(serverIntent);              return true; -        case R.id.secure_connect_scan: -            // Launch the DeviceListActivity to see devices and do scan -            serverIntent = new Intent(this, DeviceListActivity.class); -            startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_SECURE); -            return true; -        case R.id.insecure_connect_scan: +        case R.id.connect_scan:              // Launch the DeviceListActivity to see devices and do scan              serverIntent = new Intent(this, DeviceListActivity.class); -            startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_INSECURE); -            return true; -        case R.id.discoverable: -            // Ensure this device is discoverable by others -            ensureDiscoverable(); +            startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);              return true;          }          return false; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java b/altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java index 93cb75de..a93c08d6 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/BluetoothChatService.java @@ -19,9 +19,7 @@ package org.altusmetrum.AltosDroid;  import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStream; -//import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - +import java.util.UUID;  import android.bluetooth.BluetoothAdapter;  import android.bluetooth.BluetoothDevice;  import android.bluetooth.BluetoothSocket; @@ -103,9 +101,8 @@ public class BluetoothChatService {      /**       * Start the ConnectThread to initiate a connection to a remote device.       * @param device  The BluetoothDevice to connect -     * @param secure Socket Security type - Secure (true) , Insecure (false)       */ -    public synchronized void connect(BluetoothDevice device, boolean secure) { +    public synchronized void connect(BluetoothDevice device) {          if (D) Log.d(TAG, "connect to: " + device);          // Cancel any thread attempting to make a connection @@ -117,7 +114,7 @@ public class BluetoothChatService {          if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}          // Start the thread to connect with the given device -        mConnectThread = new ConnectThread(device, secure); +        mConnectThread = new ConnectThread(device);          mConnectThread.start();          setState(STATE_CONNECTING);      } @@ -127,9 +124,8 @@ public class BluetoothChatService {       * @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, final String socketType) { -        if (D) Log.d(TAG, "connected, Socket Type:" + socketType); +    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;} @@ -138,7 +134,7 @@ public class BluetoothChatService {          if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}          // Start the thread to manage the connection and perform transmissions -        mConnectedThread = new ConnectedThread(socket, socketType); +        mConnectedThread = new ConnectedThread(socket);          mConnectedThread.start();          // Send the name of the connected device back to the UI Activity @@ -224,37 +220,25 @@ public class BluetoothChatService {       * 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; -        private String mSocketType; -        public ConnectThread(BluetoothDevice device, boolean secure) { +		public ConnectThread(BluetoothDevice device) {              mmDevice = device;              BluetoothSocket tmp = null; -            mSocketType = secure ? "Secure" : "Insecure"; -            // Get a BluetoothSocket for a connection with the -            // given BluetoothDevice              try { -                if (secure) { -                	Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}); -                	tmp = (BluetoothSocket) m.invoke(device, 2); -//                    tmp = device.createRfcommSocket(1); -                } else { -                	Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); -                	tmp = (BluetoothSocket) m.invoke(device, 2); -//                    tmp = device.createInsecureRfcommSocket(1); -                } -            } catch (Exception e) { -                Log.e(TAG, "Socket Type: " + mSocketType + "create() failed", e); +				tmp = mmDevice.createInsecureRfcommSocketToServiceRecord(SPP_UUID); +			} catch (IOException e) {  				e.printStackTrace();  			}              mmSocket = tmp;          }          public void run() { -            Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType); -            setName("ConnectThread" + mSocketType); +            Log.i(TAG, "BEGIN mConnectThread"); +            setName("ConnectThread");              // Always cancel discovery because it will slow down a connection              mAdapter.cancelDiscovery(); @@ -269,8 +253,7 @@ public class BluetoothChatService {                  try {                      mmSocket.close();                  } catch (IOException e2) { -                    Log.e(TAG, "unable to close() " + mSocketType + -                            " socket during connection failure", e2); +                    Log.e(TAG, "unable to close() socket during connection failure", e2);                  }                  connectionFailed();                  return; @@ -282,14 +265,14 @@ public class BluetoothChatService {              }              // Start the connected thread -            connected(mmSocket, mmDevice, mSocketType); +            connected(mmSocket, mmDevice);          }          public void cancel() {              try {                  mmSocket.close();              } catch (IOException e) { -                Log.e(TAG, "close() of connect " + mSocketType + " socket failed", e); +                Log.e(TAG, "close() of connect socket failed", e);              }          }      } @@ -303,8 +286,8 @@ public class BluetoothChatService {          private final InputStream mmInStream;          private final OutputStream mmOutStream; -        public ConnectedThread(BluetoothSocket socket, String socketType) { -            Log.d(TAG, "create ConnectedThread: " + socketType); +        public ConnectedThread(BluetoothSocket socket) { +            Log.d(TAG, "create ConnectedThread");              mmSocket = socket;              InputStream tmpIn = null;              OutputStream tmpOut = null; @@ -333,7 +316,7 @@ public class BluetoothChatService {                      bytes = mmInStream.read(buffer);                      // Send the obtained bytes to the UI Activity -                    mHandler.obtainMessage(AltosDroid.MESSAGE_READ, bytes, -1, buffer) +                    mHandler.obtainMessage(AltosDroid.MESSAGE_READ, bytes, -1, buffer.clone())                              .sendToTarget();                  } catch (IOException e) {                      Log.e(TAG, "disconnected", e); @@ -350,6 +333,7 @@ public class BluetoothChatService {          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) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 40dff354..c0a32c92 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -37,7 +37,7 @@ public class TelemetryService extends Service {      // Unique Identification Number for the Notification.      // We use it on Notification start, and to cancel it. -    private int NOTIFICATION = R.string.telemetry_service_started; +    private int NOTIFICATION = R.string.telemetry_service_label;      /**       * Class for clients to access.  Because we know this service always @@ -52,15 +52,32 @@ public class TelemetryService extends Service {      @Override      public void onCreate() { +        // Create a reference to the NotificationManager so that we can update our notifcation text later          mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); - -        // Display a notification about us starting.  We put an icon in the status bar. -        showNotification();      }      @Override      public int onStartCommand(Intent intent, int flags, int startId) {          Log.i("TelemetryService", "Received start id " + startId + ": " + intent); + +        CharSequence text = getText(R.string.telemetry_service_started); + +        // Create notification to be displayed while the service runs +        Notification notification = new Notification(R.drawable.am_status_c, text, 0); + +        // The PendingIntent to launch our activity if the user selects this notification +        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, +                new Intent(this, TelemetryServiceActivities.Controller.class), 0); + +        // Set the info for the views that show in the notification panel. +        notification.setLatestEventInfo(this, getText(R.string.telemetry_service_label), text, contentIntent); + +        // Set the notification to be in the "Ongoing" section. +        notification.flags |= Notification.FLAG_ONGOING_EVENT; + +        // Move us into the foreground. +        startForeground(NOTIFICATION, notification); +          // We want this service to continue running until it is explicitly          // stopped, so return sticky.          return START_STICKY; @@ -68,8 +85,8 @@ public class TelemetryService extends Service {      @Override      public void onDestroy() { -        // Cancel the persistent notification. -        mNM.cancel(NOTIFICATION); +        // Demote us from the foreground, and cancel the persistent notification. +        stopForeground(true);          // Tell the user we stopped.          Toast.makeText(this, R.string.telemetry_service_stopped, Toast.LENGTH_SHORT).show(); @@ -84,26 +101,4 @@ public class TelemetryService extends Service {      // RemoteService for a more complete example.      private final IBinder mBinder = new TelemetryBinder(); -    /** -     * Show a notification while this service is running. -     */ -    private void showNotification() { -        // In this sample, we'll use the same text for the ticker and the expanded notification -        CharSequence text = getText(R.string.telemetry_service_started); - -        // Set the icon, scrolling text and timestamp -        Notification notification = new Notification(R.drawable.am_status, text, -                System.currentTimeMillis()); - -        // The PendingIntent to launch our activity if the user selects this notification -        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, -                new Intent(this, TelemetryServiceActivities.Controller.class), 0); - -        // Set the info for the views that show in the notification panel. -        notification.setLatestEventInfo(this, getText(R.string.telemetry_service_label), -                       text, contentIntent); - -        // Send the notification. -        mNM.notify(NOTIFICATION, notification); -    }  }  | 
