diff options
author | Keith Packard <keithp@keithp.com> | 2012-09-20 11:30:19 +0200 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-09-20 11:30:19 +0200 |
commit | 2f2734bb418f5c3a89fa3f1bf1b98ce4cfe432e1 (patch) | |
tree | 5a5400d13c22e7ca6c666c00f4d391ed8429e3a6 | |
parent | e69a433fd93b9f6bd2297d8045eb075fee29e73b (diff) | |
parent | 3fe5c2f9fc01258d45c20070e9874d76bc6c8c07 (diff) |
Merge remote-tracking branch 'mjb/altosdroid'
-rw-r--r-- | altosdroid/AndroidManifest.xml | 1 | ||||
-rw-r--r-- | altosdroid/Makefile.am | 3 | ||||
-rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java | 7 | ||||
-rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java | 101 | ||||
-rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java | 73 | ||||
-rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java | 8 | ||||
-rw-r--r-- | altoslib/AltosLog.java | 6 | ||||
-rw-r--r-- | altoslib/AltosPreferences.java | 4 | ||||
-rw-r--r-- | altoslib/AltosPreferencesBackend.java | 4 | ||||
-rw-r--r-- | altosui/AltosUIPreferencesBackend.java | 6 |
10 files changed, 207 insertions, 6 deletions
diff --git a/altosdroid/AndroidManifest.xml b/altosdroid/AndroidManifest.xml index 12391759..7147c0b1 100644 --- a/altosdroid/AndroidManifest.xml +++ b/altosdroid/AndroidManifest.xml @@ -22,6 +22,7 @@ <uses-sdk android:targetSdkVersion="10" android:minSdkVersion="10"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH" /> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:label="@string/app_name" android:icon="@drawable/app_icon" > diff --git a/altosdroid/Makefile.am b/altosdroid/Makefile.am index 36d28ca2..96831b72 100644 --- a/altosdroid/Makefile.am +++ b/altosdroid/Makefile.am @@ -23,8 +23,11 @@ ALTOSLIB=$(EXT_LIBDIR)/$(ALTOSLIB_JAR) SRC=\ $(SRC_DIR)/AltosDroid.java \ + $(SRC_DIR)/AltosDroidPreferences.java \ + $(SRC_DIR)/AltosVoice.java \ $(SRC_DIR)/TelemetryService.java \ $(SRC_DIR)/TelemetryReader.java \ + $(SRC_DIR)/TelemetryLogger.java \ $(SRC_DIR)/AltosBluetooth.java \ $(SRC_DIR)/DeviceListActivity.java \ $(SRC_DIR)/Dumper.java diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index 00689684..3396f77e 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -87,6 +87,9 @@ public class AltosDroid extends Activity { private Messenger mService = null; final Messenger mMessenger = new Messenger(new IncomingHandler(this)); + // Preferences + private AltosDroidPreferences prefs = null; + // TeleBT Config data private AltosConfigData mConfigData = null; // Local Bluetooth adapter @@ -228,6 +231,10 @@ public class AltosDroid extends Activity { return; } + // Initialise preferences + prefs = new AltosDroidPreferences(this); + AltosPreferences.init(prefs); + // Set up the window layout requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); //setContentView(R.layout.main); diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java new file mode 100644 index 00000000..3b4bdcf8 --- /dev/null +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java @@ -0,0 +1,101 @@ +/* + * Copyright © 2012 Mike Beattie <mike@ethernal.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.AltosDroid; + +import java.io.File; +import java.util.Map; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Environment; + +import org.altusmetrum.AltosLib.*; + +public class AltosDroidPreferences implements AltosPreferencesBackend { + public final static String NAME = "org.altusmetrum.AltosDroid"; + private Context context = null; + private SharedPreferences prefs = null; + private SharedPreferences.Editor editor = null; + + public AltosDroidPreferences(Context in_context) { + this(in_context, NAME); + } + + public AltosDroidPreferences(Context in_context, String in_prefs) { + context = in_context; + prefs = context.getSharedPreferences(in_prefs, 0); + editor = prefs.edit(); + } + + public String[] keys() { + Map<String, ?> all = prefs.getAll(); + return (String[])all.keySet().toArray(); + } + + public AltosPreferencesBackend node(String key) { + return new AltosDroidPreferences(context, key); + } + + public boolean nodeExists(String key) { + return prefs.contains(key); + } + + public boolean getBoolean(String key, boolean def) { + return prefs.getBoolean(key, def); + } + + public double getDouble(String key, double def) { + Float f = Float.valueOf(prefs.getFloat(key, (float)def)); + return f.doubleValue(); + } + + public int getInt(String key, int def) { + return prefs.getInt(key, def); + } + + public String getString(String key, String def) { + return prefs.getString(key, def); + } + + public void putBoolean(String key, boolean value) { + editor.putBoolean(key, value); + } + + public void putDouble(String key, double value) { + editor.putFloat(key, (float)value); + } + + public void putInt(String key, int value) { + editor.putInt(key, value); + } + + public void putString(String key, String value) { + editor.putString(key, value); + } + + public void remove(String key) { + editor.remove(key); + } + + public void flush() { + editor.apply(); + } + + public File homeDirectory() { + return Environment.getExternalStorageDirectory(); + } +} diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java new file mode 100644 index 00000000..b2dcdb48 --- /dev/null +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java @@ -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); + } + +} diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java index 393fd2f6..3cb498e8 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java @@ -76,6 +76,7 @@ public class TelemetryService extends Service { private AltosBluetooth mAltosBluetooth = null; private AltosConfigData mConfigData = null; private TelemetryReader mTelemetryReader = null; + private TelemetryLogger mTelemetryLogger = null; // internally track state of bluetooth connection private int state = STATE_NONE; @@ -164,6 +165,11 @@ public class TelemetryService extends Service { } mTelemetryReader = null; } + if (mTelemetryLogger != null) { + if (D) Log.d(TAG, "stopAltosBluetooth(): stopping TelemetryLogger"); + mTelemetryLogger.stop(); + mTelemetryLogger = null; + } if (mAltosBluetooth != null) { if (D) Log.d(TAG, "stopAltosBluetooth(): stopping AltosBluetooth"); mAltosBluetooth.close(); @@ -216,6 +222,8 @@ public class TelemetryService extends Service { mTelemetryReader = new TelemetryReader(mAltosBluetooth, mHandler); mTelemetryReader.start(); + + mTelemetryLogger = new TelemetryLogger(this, mAltosBluetooth); } diff --git a/altoslib/AltosLog.java b/altoslib/AltosLog.java index 3c124700..1c7069ce 100644 --- a/altoslib/AltosLog.java +++ b/altoslib/AltosLog.java @@ -25,7 +25,7 @@ import java.util.concurrent.LinkedBlockingQueue; * This creates a thread to capture telemetry data and write it to * a log file */ -class AltosLog implements Runnable { +public class AltosLog implements Runnable { LinkedBlockingQueue<AltosLine> input_queue; LinkedBlockingQueue<String> pending_queue; @@ -45,7 +45,7 @@ class AltosLog implements Runnable { } } - void close() { + public void close() { close_log_file(); if (log_thread != null) { log_thread.interrupt(); @@ -53,7 +53,7 @@ class AltosLog implements Runnable { } } - File file() { + public File file() { return file; } diff --git a/altoslib/AltosPreferences.java b/altoslib/AltosPreferences.java index a82ea3f6..47196d6e 100644 --- a/altoslib/AltosPreferences.java +++ b/altoslib/AltosPreferences.java @@ -19,7 +19,6 @@ package org.altusmetrum.AltosLib; import java.io.*; import java.util.*; -import javax.swing.filechooser.FileSystemView; public class AltosPreferences { public static AltosPreferencesBackend backend = null; @@ -145,8 +144,7 @@ public class AltosPreferences { if (logdir_string != null) logdir = new File(logdir_string); else { - /* Use the file system view default directory */ - logdir = new File(FileSystemView.getFileSystemView().getDefaultDirectory(), logdirName); + logdir = new File(backend.homeDirectory(), logdirName); if (!logdir.exists()) logdir.mkdirs(); } diff --git a/altoslib/AltosPreferencesBackend.java b/altoslib/AltosPreferencesBackend.java index 3fc4b0aa..a1184c0b 100644 --- a/altoslib/AltosPreferencesBackend.java +++ b/altoslib/AltosPreferencesBackend.java @@ -17,6 +17,8 @@ package org.altusmetrum.AltosLib; +import java.io.File; + public interface AltosPreferencesBackend { public String getString(String key, String def); @@ -38,4 +40,6 @@ public interface AltosPreferencesBackend { public void remove(String key); public void flush(); + + public File homeDirectory(); } diff --git a/altosui/AltosUIPreferencesBackend.java b/altosui/AltosUIPreferencesBackend.java index 210dcb8b..3131fd32 100644 --- a/altosui/AltosUIPreferencesBackend.java +++ b/altosui/AltosUIPreferencesBackend.java @@ -17,8 +17,10 @@ package altosui; +import java.io.File; import java.util.prefs.*; import org.altusmetrum.AltosLib.*; +import javax.swing.filechooser.FileSystemView; public class AltosUIPreferencesBackend implements AltosPreferencesBackend { @@ -92,4 +94,8 @@ public class AltosUIPreferencesBackend implements AltosPreferencesBackend { } } + public File homeDirectory() { + /* Use the file system view default directory */ + return FileSystemView.getFileSystemView().getDefaultDirectory(); + } } |