From fe8ab96e8727c25c04cac473cafb264cf7e80156 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Mon, 17 Sep 2012 01:29:33 +1200 Subject: altosdroid: implement AltosPreferencesBackend, and initialize. Signed-off-by: Mike Beattie --- .../src/org/altusmetrum/AltosDroid/AltosDroid.java | 7 ++ .../AltosDroid/AltosDroidPreferences.java | 97 ++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.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..7ba328f4 --- /dev/null +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java @@ -0,0 +1,97 @@ +/* + * Copyright © 2012 Mike Beattie + * + * 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.util.Map; +import android.content.Context; +import android.content.SharedPreferences; +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 AltosPreferencesBackend node(String key) { + return new AltosDroidPreferences(context, key); + } + + public void flush() { + editor.apply(); + } + + public String[] keys() { + Map data = prefs.getAll(); + String[] keys = new String[data.size()]; + data.keySet().toArray(keys); + return keys; + } + + 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); + } + +} -- cgit v1.2.3 From f79b445cc29fc1e424f99c97e71c7d3637bf4ba6 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 18 Sep 2012 23:38:12 +1200 Subject: altosdroid: Update Makefile.am Signed-off-by: Mike Beattie --- altosdroid/Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/altosdroid/Makefile.am b/altosdroid/Makefile.am index 36d28ca2..c06afebe 100644 --- a/altosdroid/Makefile.am +++ b/altosdroid/Makefile.am @@ -23,6 +23,8 @@ 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)/AltosBluetooth.java \ -- cgit v1.2.3 From 8f11a6d2c3de228c3cefb95a7d1a76d53e532acd Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 18 Sep 2012 23:42:11 +1200 Subject: altosdroid: simplify keys() method Signed-off-by: Mike Beattie --- .../src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java index 7ba328f4..28ecc182 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java @@ -47,10 +47,8 @@ public class AltosDroidPreferences implements AltosPreferencesBackend { } public String[] keys() { - Map data = prefs.getAll(); - String[] keys = new String[data.size()]; - data.keySet().toArray(keys); - return keys; + Map all = prefs.getAll(); + return (String[])all.keySet().toArray(); } public boolean nodeExists(String key) { -- cgit v1.2.3 From 36e684724e327dbd4319411ef0602fafb4d0c073 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 18 Sep 2012 23:43:18 +1200 Subject: altosdroid: cosmetic re-order of methods Signed-off-by: Mike Beattie --- .../altusmetrum/AltosDroid/AltosDroidPreferences.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java index 28ecc182..b8487d07 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java @@ -38,19 +38,15 @@ public class AltosDroidPreferences implements AltosPreferencesBackend { editor = prefs.edit(); } - public AltosPreferencesBackend node(String key) { - return new AltosDroidPreferences(context, key); - } - - public void flush() { - editor.apply(); - } - public String[] keys() { Map 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); } @@ -92,4 +88,8 @@ public class AltosDroidPreferences implements AltosPreferencesBackend { editor.remove(key); } + public void flush() { + editor.apply(); + } + } -- cgit v1.2.3 From c058ec2d6070458a0b7d3ef56041e985412ee565 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 18 Sep 2012 23:46:17 +1200 Subject: altos{lib,ui,droid}: move OS specific code out of altoslib This is to allow the usage of AltosLog on Android - no swing, so we need to push the "home directory" code used to pick a default telemetry logging path - using the PreferencesBackend interface for now. Signed-off-by: Mike Beattie --- .../src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java | 6 ++++++ altoslib/AltosPreferences.java | 4 +--- altoslib/AltosPreferencesBackend.java | 4 ++++ altosui/AltosUIPreferencesBackend.java | 6 ++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java index b8487d07..3b4bdcf8 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferences.java @@ -17,9 +17,12 @@ 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 { @@ -92,4 +95,7 @@ public class AltosDroidPreferences implements AltosPreferencesBackend { editor.apply(); } + public File homeDirectory() { + return Environment.getExternalStorageDirectory(); + } } 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(); + } } -- cgit v1.2.3 From 0541201d4afe3e5d7913465e1db10e586d7182bb Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 18 Sep 2012 23:47:06 +1200 Subject: altoslib: make parts of AltosLog public for usage outside altoslib. Signed-off-by: Mike Beattie --- altoslib/AltosLog.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 input_queue; LinkedBlockingQueue 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; } -- cgit v1.2.3 From 3fe5c2f9fc01258d45c20070e9874d76bc6c8c07 Mon Sep 17 00:00:00 2001 From: Mike Beattie Date: Tue, 18 Sep 2012 23:47:50 +1200 Subject: altosdroid: initial implementation of telemetry logging. Signed-off-by: Mike Beattie --- altosdroid/AndroidManifest.xml | 1 + altosdroid/Makefile.am | 1 + .../altusmetrum/AltosDroid/TelemetryLogger.java | 73 ++++++++++++++++++++++ .../altusmetrum/AltosDroid/TelemetryService.java | 8 +++ 4 files changed, 83 insertions(+) create mode 100644 altosdroid/src/org/altusmetrum/AltosDroid/TelemetryLogger.java 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 @@ + diff --git a/altosdroid/Makefile.am b/altosdroid/Makefile.am index c06afebe..96831b72 100644 --- a/altosdroid/Makefile.am +++ b/altosdroid/Makefile.am @@ -27,6 +27,7 @@ SRC=\ $(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/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); } -- cgit v1.2.3