Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / TelemetryLogger.java
1 package org.altusmetrum.AltosDroid;
2
3 import org.altusmetrum.altoslib_5.*;
4
5 import android.content.BroadcastReceiver;
6 import android.content.Context;
7 import android.content.Intent;
8 import android.content.IntentFilter;
9 import android.os.Environment;
10 import android.util.Log;
11
12 public class TelemetryLogger {
13         private static final String TAG = "TelemetryLogger";
14         private static final boolean D = true;
15
16         private Context   context = null;
17         private AltosLink link    = null;
18         private AltosLog  logger  = null;
19
20         private BroadcastReceiver mExternalStorageReceiver;
21
22         public TelemetryLogger(Context in_context, AltosLink in_link) {
23                 context = in_context;
24                 link    = in_link;
25
26                 startWatchingExternalStorage();
27         }
28
29         public void stop() {
30                 stopWatchingExternalStorage();
31                 close();
32         }
33
34         private void close() {
35                 if (logger != null) {
36                         if (D) Log.d(TAG, "Shutting down Telemetry Logging");
37                         logger.close();
38                         logger = null;
39                 }
40         }
41         
42         void handleExternalStorageState() {
43                 String state = Environment.getExternalStorageState();
44                 if (Environment.MEDIA_MOUNTED.equals(state)) {
45                         if (logger == null) {
46                                 if (D) Log.d(TAG, "Starting up Telemetry Logging");
47                                 logger = new AltosLog(link);
48                         }
49                 } else {
50                         if (D) Log.d(TAG, "External Storage not present - stopping");
51                         close();
52                 }
53         }
54
55         void startWatchingExternalStorage() {
56                 mExternalStorageReceiver = new BroadcastReceiver() {
57                         @Override
58                         public void onReceive(Context context, Intent intent) {
59                                 handleExternalStorageState();
60                         }
61                 };
62                 IntentFilter filter = new IntentFilter();
63                 filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
64                 filter.addAction(Intent.ACTION_MEDIA_REMOVED);
65                 context.registerReceiver(mExternalStorageReceiver, filter);
66                 handleExternalStorageState();
67         }
68
69         void stopWatchingExternalStorage() {
70                 context.unregisterReceiver(mExternalStorageReceiver);
71         }
72
73 }