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;
// 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;
// Tabs
TabHost mTabHost;
- ViewPager mViewPager;
+ AltosViewPager mViewPager;
TabsAdapter mTabsAdapter;
+ ArrayList<AltosDroidTab> mTabs = new ArrayList<AltosDroidTab>();
+
+ // Timer and Saved flight state for Age calculation
+ private Timer timer = new Timer();
+ AltosState saved_state;
// Service
private boolean mIsBound = false;
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;
}
}
};
}
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) {
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);
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);
}