summaryrefslogtreecommitdiff
path: root/altosui/AltosBTKnown.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-04-19 08:43:40 -0700
committerKeith Packard <keithp@keithp.com>2011-04-19 08:43:40 -0700
commit17f38e045fcd8ca0224095c0b2b7b098df77a8d8 (patch)
tree07c49d1151a54d3176f2356b55b6f9f129305b9c /altosui/AltosBTKnown.java
parentf249e5926f5fd9f86c41e7f0a414193533d4d8b0 (diff)
altosui: Use persistent list of bluetooth devices for device dialogs
Store a list of known bluetooth devices as preferences. Always include those in device dialogs with an option to go browse for more devices in both the device dialog and the Configure AltosUI dialog. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosui/AltosBTKnown.java')
-rw-r--r--altosui/AltosBTKnown.java97
1 files changed, 97 insertions, 0 deletions
diff --git a/altosui/AltosBTKnown.java b/altosui/AltosBTKnown.java
new file mode 100644
index 00000000..95830637
--- /dev/null
+++ b/altosui/AltosBTKnown.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright © 2011 Keith Packard <keithp@keithp.com>
+ *
+ * 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 altosui;
+import java.lang.*;
+import java.util.*;
+import libaltosJNI.*;
+import java.util.prefs.*;
+
+public class AltosBTKnown implements Iterable<AltosBTDevice> {
+ LinkedList<AltosBTDevice> devices = new LinkedList<AltosBTDevice>();
+ Preferences bt_pref = AltosPreferences.bt_devices();
+
+ private String get_address(String name) {
+ return bt_pref.get(name, "");
+ }
+
+ private void set_address(String name, String addr) {
+ bt_pref.put(name, addr);
+ System.out.printf("saving known %s %s\n", name, addr);
+ }
+
+ private void remove(String name) {
+ bt_pref.remove(name);
+ }
+
+ private void load() {
+ try {
+ String[] names = bt_pref.keys();
+ for (int i = 0; i < names.length; i++) {
+ String name = names[i];
+ String addr = get_address(name);
+ System.out.printf("Known device %s %s\n", name, addr);
+ devices.add(new AltosBTDevice(name, addr));
+ }
+ } catch (BackingStoreException be) {
+ } catch (IllegalStateException ie) {
+ }
+ }
+
+ public Iterator<AltosBTDevice> iterator() {
+ return devices.iterator();
+ }
+
+ private void flush() {
+ AltosPreferences.flush_preferences();
+ }
+
+ public void set(Iterable<AltosBTDevice> new_devices) {
+ for (AltosBTDevice old : devices) {
+ boolean found = false;
+ for (AltosBTDevice new_device : new_devices) {
+ if (new_device.equals(old)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ remove(old.getName());
+ }
+ devices = new LinkedList<AltosBTDevice>();
+ for (AltosBTDevice new_device : new_devices) {
+ devices.add(new_device);
+ set_address(new_device.getName(), new_device.getAddr());
+ }
+ flush();
+ }
+
+ public List<AltosDevice> list(int product) {
+ LinkedList<AltosDevice> list = new LinkedList<AltosDevice>();
+ for (AltosBTDevice device : devices) {
+ if (device.matchProduct(product))
+ list.add(device);
+ }
+ return list;
+ }
+
+ public AltosBTKnown() {
+ devices = new LinkedList<AltosBTDevice>();
+ bt_pref = AltosPreferences.bt_devices();
+ load();
+ }
+} \ No newline at end of file