X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosDroid.java;h=c9ce46a0d0c8487c075d6c95e6a8b6a845e32657;hp=2777a4d4d2780afd2a3762f23d8e02def7136ead;hb=eba7b2ef8ef23bdb61b0390e47be6f27ffde31dc;hpb=2a81d637308e680b99d7218ba9e03c9ade6626f1 diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index 2777a4d4..c9ce46a0 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -18,6 +18,9 @@ package org.altusmetrum.AltosDroid; import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Timer; +import java.util.TimerTask; import android.app.Activity; import android.bluetooth.BluetoothAdapter; @@ -55,6 +58,7 @@ public class AltosDroid extends FragmentActivity { // Message types received by our Handler public static final int MSG_STATE_CHANGE = 1; public static final int MSG_TELEMETRY = 2; + public static final int MSG_UPDATE_AGE = 3; // Intent request codes private static final int REQUEST_CONNECT_DEVICE = 1; @@ -76,8 +80,13 @@ public class AltosDroid extends FragmentActivity { // Tabs TabHost mTabHost; - ViewPager mViewPager; + AltosViewPager mViewPager; TabsAdapter mTabsAdapter; + ArrayList mTabs = new ArrayList(); + + // Timer and Saved flight state for Age calculation + private Timer timer = new Timer(); + AltosState saved_state; // Service private boolean mIsBound = false; @@ -128,6 +137,11 @@ public class AltosDroid extends FragmentActivity { case MSG_TELEMETRY: ad.update_ui((AltosState) msg.obj); break; + case MSG_UPDATE_AGE: + if (ad.saved_state != null) { + ad.mAgeView.setText(String.format("%d", (System.currentTimeMillis() - ad.saved_state.report_time + 500) / 1000)); + } + break; } } }; @@ -175,21 +189,51 @@ public class AltosDroid extends FragmentActivity { } public void registerTab(AltosDroidTab mTab) { + mTabs.add(mTab); } public void unregisterTab(AltosDroidTab mTab) { + mTabs.remove(mTab); } void update_ui(AltosState state) { + if (saved_state != null) { + if (saved_state.state != state.state) { + String currentTab = mTabHost.getCurrentTabTag(); + switch (state.state) { + case AltosLib.ao_flight_boost: + if (currentTab.equals("pad")) mTabHost.setCurrentTabByTag("ascent"); + break; + case AltosLib.ao_flight_drogue: + if (currentTab.equals("ascent")) mTabHost.setCurrentTabByTag("descent"); + break; + case AltosLib.ao_flight_landed: + if (currentTab.equals("descent")) mTabHost.setCurrentTabByTag("landed"); + break; + } + } + } + saved_state = state; + mCallsignView.setText(state.data.callsign); mSerialView.setText(String.format("%d", state.data.serial)); mFlightView.setText(String.format("%d", state.data.flight)); mStateView.setText(state.data.state()); mRSSIView.setText(String.format("%d", state.data.rssi)); + for (AltosDroidTab mTab : mTabs) + mTab.update_ui(state); + mAltosVoice.tell(state); } + private void onTimerTick() { + try { + mMessenger.send(Message.obtain(null, MSG_UPDATE_AGE)); + } catch (RemoteException e) { + } + } + static String pos(double p, String pos, String neg) { String h = pos; if (p < 0) { @@ -228,7 +272,7 @@ public class AltosDroid extends FragmentActivity { mTabHost = (TabHost)findViewById(android.R.id.tabhost); mTabHost.setup(); - mViewPager = (ViewPager)findViewById(R.id.pager); + mViewPager = (AltosViewPager)findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(4); mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager); @@ -258,6 +302,8 @@ public class AltosDroid extends FragmentActivity { mStateView = (TextView) findViewById(R.id.state_value); mAgeView = (TextView) findViewById(R.id.age_value); + timer.scheduleAtFixedRate(new TimerTask(){ public void run() {onTimerTick();}}, 1000L, 100L); + mAltosVoice = new AltosVoice(this); }