altosdroid: Add service start/bind/unbind to AltosDroid
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / AltosDroid.java
index c18a73f8044966f9816988ee32d4a53089bcd958..54b61c67ca793849d19e0c3707e49977d7165d93 100644 (file)
@@ -21,9 +21,15 @@ import android.app.Activity;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.content.Intent;
+import android.content.Context;
+import android.content.ComponentName;
+import android.content.ServiceConnection;
+import android.os.IBinder;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
 import android.text.method.ScrollingMovementMethod;
 import android.util.Log;
 //import android.view.KeyEvent;
@@ -39,7 +45,6 @@ import android.view.Window;
 import android.widget.TextView;
 import android.widget.Toast;
 import org.altusmetrum.AltosDroid.R;
-import org.altusmetrum.AltosLib.*;
 
 /**
  * This is the main Activity that displays the current chat session.
@@ -71,11 +76,30 @@ public class AltosDroid extends Activity {
        private TextView mSerialView;
        //private EditText mOutEditText;
        //private Button mSendButton;
+
+       private boolean mIsBound;
+       Messenger mService = null;
+
        // Name of the connected device
        private String mConnectedDeviceName = null;
        // Local Bluetooth adapter
        private BluetoothAdapter mBluetoothAdapter = null;
 
+       };
+
+
+       private ServiceConnection mConnection = new ServiceConnection() {
+               public void onServiceConnected(ComponentName className, IBinder service) {
+                       mService = new Messenger(service);
+               }
+
+               public void onServiceDisconnected(ComponentName className) {
+                       // This is called when the connection with the service has been unexpectedly disconnected - process crashed.
+                       mService = null;
+               }
+       };
+
+
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
@@ -86,8 +110,6 @@ public class AltosDroid extends Activity {
                setContentView(R.layout.main);
                getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);
 
-        // Get local Bluetooth adapter
-        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                // Set up the custom title
                mTitle = (TextView) findViewById(R.id.title_left_text);
                mTitle.setText(R.string.app_name);
@@ -98,6 +120,9 @@ public class AltosDroid extends Activity {
                mSerialView.setClickable(false);
                mSerialView.setLongClickable(false);
 
+               // Get local Bluetooth adapter
+               mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+
                // If the adapter is null, then Bluetooth is not supported
                if (mBluetoothAdapter == null) {
                        Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
@@ -105,6 +130,10 @@ public class AltosDroid extends Activity {
                        return;
                }
 
+               // Start Telemetry Service
+               startService(new Intent(AltosDroid.this, TelemetryService.class));
+
+               doBindService();
        }
 
        @Override
@@ -152,6 +181,9 @@ public class AltosDroid extends Activity {
        @Override
        public void onDestroy() {
                super.onDestroy();
+
+               doUnbindService();
+
                if(D) Log.e(TAG, "--- ON DESTROY ---");
        }
 
@@ -277,4 +309,19 @@ public class AltosDroid extends Activity {
                return false;
        }
 
+
+       void doBindService() {
+               bindService(new Intent(this, TelemetryService.class), mConnection, Context.BIND_AUTO_CREATE);
+               mIsBound = true;
+       }
+
+       void doUnbindService() {
+               if (mIsBound) {
+                       // If we have received the service, and hence registered with it, then now is the time to unregister.
+                       // Detach our existing connection.
+                       unbindService(mConnection);
+                       mIsBound = false;
+               }
+       }
+
 }