diff options
| -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(); +	}  } | 
