altosdroid: initial implementation of telemetry logging.
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / TelemetryLogger.java
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java
new file mode 100644 (file)
index 0000000..b2dcdb4
--- /dev/null
@@ -0,0 +1,73 @@
+package org.altusmetrum.AltosDroid;
+
+import org.altusmetrum.AltosLib.*;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Environment;
+import android.util.Log;
+
+public class TelemetryLogger {
+       private static final String TAG = "TelemetryLogger";
+       private static final boolean D = true;
+
+       private Context   context = null;
+       private AltosLink link    = null;
+       private AltosLog  logger  = null;
+
+       private BroadcastReceiver mExternalStorageReceiver;
+
+       public TelemetryLogger(Context in_context, AltosLink in_link) {
+               context = in_context;
+               link    = in_link;
+
+               startWatchingExternalStorage();
+       }
+
+       public void stop() {
+               stopWatchingExternalStorage();
+               close();
+       }
+
+       private void close() {
+               if (logger != null) {
+                       if (D) Log.d(TAG, "Shutting down Telemetry Logging");
+                       logger.close();
+                       logger = null;
+               }
+       }
+       
+       void handleExternalStorageState() {
+               String state = Environment.getExternalStorageState();
+               if (Environment.MEDIA_MOUNTED.equals(state)) {
+                       if (logger == null) {
+                               if (D) Log.d(TAG, "Starting up Telemetry Logging");
+                               logger = new AltosLog(link);
+                       }
+               } else {
+                       if (D) Log.d(TAG, "External Storage not present - stopping");
+                       close();
+               }
+       }
+
+       void startWatchingExternalStorage() {
+               mExternalStorageReceiver = new BroadcastReceiver() {
+                       @Override
+                       public void onReceive(Context context, Intent intent) {
+                               handleExternalStorageState();
+                       }
+               };
+               IntentFilter filter = new IntentFilter();
+               filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
+               filter.addAction(Intent.ACTION_MEDIA_REMOVED);
+               context.registerReceiver(mExternalStorageReceiver, filter);
+               handleExternalStorageState();
+       }
+
+       void stopWatchingExternalStorage() {
+               context.unregisterReceiver(mExternalStorageReceiver);
+       }
+
+}