diff options
author | Keith Packard <keithp@keithp.com> | 2016-04-28 12:29:16 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2016-04-28 12:29:16 -0700 |
commit | ec20e2f72460010c4f59e6d59775671260e01026 (patch) | |
tree | 26550cdb6537581616e5ee8505dd80613a1f7c52 /altosdroid | |
parent | 3c7b68b8a513b611500dfd734182e1a2e7bdd40c (diff) |
altoslib: Make AltosPreferencesBackend abstract. Add set/put Serializable
This lets us add functionality to this directly, such as the new
serializable APIs.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosdroid')
5 files changed, 86 insertions, 39 deletions
diff --git a/altosdroid/res/values/strings.xml b/altosdroid/res/values/strings.xml index 58057cac..4380d62d 100644 --- a/altosdroid/res/values/strings.xml +++ b/altosdroid/res/values/strings.xml @@ -116,7 +116,7 @@ <!-- Idle mode --> <string name="idle_mode">Idle Mode</string> <string name="set_callsign_label">Callsign</string> - <string name="connect_idle">Connect</string> + <string name="connect_idle">Monitor</string> <string name="disconnect_idle">Disconnect</string> <string name="reboot_idle">Reboot</string> <string name="igniters_idle">Fire Igniters</string> diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java index 2b10b11f..0fd9af75 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java @@ -170,8 +170,8 @@ public abstract class AltosDroidLink extends AltosLink { } buffer_off = 0; } - if (AltosDebug.D) - debug_input(in_buffer[buffer_off]); +// if (AltosDebug.D) +// debug_input(in_buffer[buffer_off]); return in_buffer[buffer_off++]; } @@ -207,7 +207,7 @@ public abstract class AltosDroidLink extends AltosLink { public void print(String data) { byte[] bytes = data.getBytes(); - AltosDebug.debug(data.replace('\n', '\\')); +// AltosDebug.debug(data.replace('\n', '\\')); for (byte b : bytes) putchar(b); } diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java index c2db3774..5c7ec513 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidPreferencesBackend.java @@ -26,7 +26,7 @@ import android.util.*; import org.altusmetrum.altoslib_10.*; -public class AltosDroidPreferencesBackend implements AltosPreferencesBackend { +public class AltosDroidPreferencesBackend extends AltosPreferencesBackend { public final static String NAME = "org.altusmetrum.AltosDroid"; private Context context = null; private SharedPreferences prefs = null; diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java index 9e3dac67..931c3cfd 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/IgniterActivity.java @@ -43,7 +43,6 @@ class IgniterItem { public TextView status_view = null; private void update() { - AltosDebug.debug("update item %s %s", pretty, status); if (pretty_view != null) pretty_view.setText(pretty); if (status_view != null) @@ -77,7 +76,6 @@ class IgniterItem { } public IgniterItem() { - AltosDebug.debug("New igniter item"); } } @@ -102,9 +100,7 @@ class IgniterAdapter extends ArrayAdapter<IgniterItem> { item.realize(igniter_view, (TextView) igniter_view.findViewById(R.id.igniter_name), (TextView) igniter_view.findViewById(R.id.igniter_status)); - AltosDebug.debug("Realize new igniter view"); - } else - AltosDebug.debug("Reuse existing igniter view"); + } if (position == selected_item) item.igniter_view.setBackgroundColor(Color.RED); else @@ -123,11 +119,11 @@ public class IgniterActivity extends Activity { private IgniterAdapter igniters_adapter; private boolean is_bound; - private boolean timer_running; private Messenger service = null; private final Messenger messenger = new Messenger(new IncomingHandler(this)); - private Timer timer; + private Timer query_timer; + private boolean query_timer_running; private Timer arm_timer; private int arm_remaining; @@ -156,6 +152,7 @@ public class IgniterActivity extends Activity { private ServiceConnection connection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder binder) { service = new Messenger(binder); + query_timer_tick(); } public void onServiceDisconnected(ComponentName className) { @@ -205,12 +202,16 @@ public class IgniterActivity extends Activity { IgniterItem item = igniters_adapter.getItem(igniters_adapter.selected_item); FireThread ft = new FireThread(item.name); ft.run(); + arm.setChecked(false); } } private void arm_igniter(boolean is_checked) { if (is_checked) { + arm_timer_stop(); arm_timer = new Timer(); + arm_remaining = 10; + arm_set_text(); fire.setEnabled(true); arm_timer.scheduleAtFixedRate(new TimerTask() { public void run() { @@ -218,22 +219,37 @@ public class IgniterActivity extends Activity { }}, 1000L, 1000L); } else { - arm_timer.cancel(); + arm_timer_stop(); fire.setEnabled(false); } } - private synchronized void timer_tick() { - if (timer_running) + private synchronized void query_timer_tick() { + if (query_timer_running) return; - timer_running = true; - try { - Message msg = Message.obtain(null, TelemetryService.MSG_IGNITER_QUERY); - msg.replyTo = messenger; - service.send(msg); - } catch (RemoteException re) { - timer_running = false; - } + if (service == null) + return; + query_timer_running = true; + Thread thread = new Thread(new Runnable() { + public void run() { + try { + Message msg = Message.obtain(null, TelemetryService.MSG_IGNITER_QUERY); + msg.replyTo = messenger; + if (service == null) { + synchronized(IgniterActivity.this) { + query_timer_running = false; + } + } else + service.send(msg); + } catch (RemoteException re) { + AltosDebug.debug("igniter query thread failed"); + synchronized(IgniterActivity.this) { + query_timer_running = false; + } + } + } + }); + thread.start(); } private boolean set_igniter(HashMap <String,Integer> status, String name, String pretty) { @@ -253,7 +269,7 @@ public class IgniterActivity extends Activity { } private synchronized void igniter_status(HashMap <String,Integer> status) { - timer_running = false; + query_timer_running = false; if (status == null) { AltosDebug.debug("no igniter status"); return; @@ -266,24 +282,41 @@ public class IgniterActivity extends Activity { if (!set_igniter(status, name, pretty)) break; } -// if (igniters_adapter.selected_item >= 0) -// igniters_view.setSelection(selected_item); + } + + private synchronized void arm_timer_stop() { + if (arm_timer != null) { + arm_timer.cancel(); + arm_timer = null; + } + arm_remaining = 0; } private void arm_set_text() { String text = String.format("Armed %d", arm_remaining); + if (arm.isChecked()) + arm.setText(text); arm.setTextOn(text); } private void arm_timer_tick() { --arm_remaining; if (arm_remaining <= 0) { - timer.cancel(); - arm.setChecked(false); - fire.setEnabled(false); - } else - arm_set_text(); + arm_timer_stop(); + runOnUiThread(new Runnable() { + public void run() { + arm.setChecked(false); + fire.setEnabled(false); + } + }); + } else { + runOnUiThread(new Runnable() { + public void run() { + arm_set_text(); + } + }); + } } private void select_item(int position) { @@ -293,8 +326,6 @@ public class IgniterActivity extends Activity { if (position >= 0) { igniters_view.setItemChecked(position, true); arm.setEnabled(true); - arm_remaining = 10; - arm_set_text(); } else arm.setEnabled(false); igniters_adapter.selected_item = position; @@ -304,6 +335,7 @@ public class IgniterActivity extends Activity { private class IgniterItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> av, View v, int position, long id) { + AltosDebug.debug("select %d\n", position); select_item(position); } } @@ -325,6 +357,7 @@ public class IgniterActivity extends Activity { igniters_view.setOnItemClickListener(new IgniterItemClickListener()); fire = (Button) findViewById(R.id.igniter_fire); + fire.setEnabled(false); fire.setOnClickListener(new OnClickListener() { public void onClick(View v) { fire_igniter(); @@ -352,19 +385,24 @@ public class IgniterActivity extends Activity { @Override protected void onResume() { super.onResume(); - timer = new Timer(true); - timer.scheduleAtFixedRate(new TimerTask() { + query_timer = new Timer(true); + query_timer.scheduleAtFixedRate(new TimerTask() { public void run() { - timer_tick(); + query_timer_tick(); }}, - 1000L, 1000L); + 0L, 5000L); } @Override protected void onPause() { super.onPause(); - timer.cancel(); - timer = null; + if (query_timer != null) { + query_timer.cancel(); + query_timer = null; + } + arm_timer_stop(); + arm.setChecked(false); + fire.setEnabled(false); } @Override diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java index 172c44fe..401cdc9d 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/ManageFrequenciesActivity.java @@ -28,6 +28,7 @@ import android.graphics.*; import android.os.*; import android.view.*; import android.view.View.*; +import android.view.inputmethod.*; import android.widget.*; import android.widget.AdapterView.*; @@ -186,6 +187,13 @@ public class ManageFrequenciesActivity extends Activity { } } + private void hide_keyboard() { + InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); + View view = getCurrentFocus(); + if (view != null) + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + private void set() { String frequency_text = set_frequency.getEditableText().toString(); String description_text = set_description.getEditableText().toString(); @@ -199,6 +207,7 @@ public class ManageFrequenciesActivity extends Activity { changed = true; } catch (ParseException pe) { } + hide_keyboard(); } private void remove() { |