diff options
author | Mike Beattie <mike@ethernal.org> | 2013-03-07 21:33:27 +1300 |
---|---|---|
committer | Mike Beattie <mike@ethernal.org> | 2013-03-07 21:33:27 +1300 |
commit | 2a81d637308e680b99d7218ba9e03c9ade6626f1 (patch) | |
tree | 6152beaa79c579873867642055b928d60150f1ab | |
parent | 59dfcbe14622c20aaa7d5b131eece9f4c8db6887 (diff) |
altosdroid: implement tabs interface
Signed-off-by: Mike Beattie <mike@ethernal.org>
-rw-r--r-- | altosdroid/res/layout/altosdroid.xml | 528 | ||||
-rw-r--r-- | altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java | 54 |
2 files changed, 206 insertions, 376 deletions
diff --git a/altosdroid/res/layout/altosdroid.xml b/altosdroid/res/layout/altosdroid.xml index dd277ffb..ce812414 100644 --- a/altosdroid/res/layout/altosdroid.xml +++ b/altosdroid/res/layout/altosdroid.xml @@ -15,352 +15,182 @@ with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. --> - <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:layout_weight="0" > - - <RelativeLayout - android:id="@+id/strut" - android:layout_width="10dip" - android:layout_height="wrap_content" - android:layout_centerHorizontal="true" > - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/callsign_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_toLeftOf="@+id/strut" > - - <TextView - android:id="@+id/callsign_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/callsign_label" /> - - <TextView - android:id="@+id/callsign_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@id/callsign_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/rssi_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_toRightOf="@id/strut" - android:layout_alignParentRight="true" > - - <TextView - android:id="@+id/rssi_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/rssi_label" /> - - <TextView - android:id="@+id/rssi_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/rssi_label" - android:textAppearance="?android:attr/textAppearanceLarge" /> - </RelativeLayout> - - <RelativeLayout - android:id="@+id/serial_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@+id/callsign_container" - android:layout_toLeftOf="@+id/strut" > - - <TextView - android:id="@+id/serial_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/serial_label" /> - - <TextView - android:id="@+id/serial_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/serial_label" - android:textAppearance="?android:attr/textAppearanceLarge" /> - </RelativeLayout> - - <RelativeLayout - android:id="@+id/flight_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@+id/callsign_container" - android:layout_toRightOf="@+id/strut" - android:layout_alignParentRight="true" > - - <TextView - android:id="@+id/flight_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/flight_label" /> - - <TextView - android:id="@+id/flight_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/flight_label" - android:textAppearance="?android:attr/textAppearanceLarge" /> - </RelativeLayout> - - <RelativeLayout - android:id="@+id/state_container" - android:layout_width="fill_parent" - android:layout_height="wrap_content" - android:layout_below="@+id/serial_container" > - - <TextView - android:id="@+id/state_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/state_label" /> - - <TextView - android:id="@+id/state_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@+id/state_label" - android:layout_centerInParent="true" - android:textAppearance="?android:attr/textAppearanceLarge" - android:textSize="50dip" /> - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/speed_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_below="@+id/state_container" - android:layout_toLeftOf="@+id/strut" > - - <TextView - android:id="@+id/speed_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/speed_label" /> - - <TextView - android:id="@+id/speed_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@id/speed_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/accel_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/state_container" - android:layout_toRightOf="@+id/strut" > - - <TextView - android:id="@+id/accel_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/accel_label" /> - - <TextView - android:id="@+id/accel_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/accel_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/range_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_below="@+id/speed_container" - android:layout_toLeftOf="@+id/strut" > - - <TextView - android:id="@+id/range_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/range_label" /> - - <TextView - android:id="@+id/range_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/range_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/height_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@id/speed_container" - android:layout_toRightOf="@id/strut" > - - <TextView - android:id="@+id/height_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/height_label" /> - - <TextView - android:id="@+id/height_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/height_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - </RelativeLayout> - - <RelativeLayout - android:id="@+id/elevation_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentLeft="true" - android:layout_below="@id/range_container" - android:layout_toLeftOf="@id/strut" > - - <TextView - android:id="@+id/elevation_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/elevation_label" /> - - <TextView - android:id="@+id/elevation_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/elevation_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - </RelativeLayout> - - <RelativeLayout - android:id="@+id/bearing_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/range_container" - android:layout_toRightOf="@+id/strut" > - - <TextView - android:id="@+id/bearing_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/bearing_label" /> - - <TextView - android:id="@+id/bearing_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/bearing_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/latitude_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@+id/elevation_container" > - - <TextView - android:id="@+id/latitude_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/latitude_label" /> - - <TextView - android:id="@+id/latitude_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/latitude_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - - </RelativeLayout> - - <RelativeLayout - android:id="@+id/longitude_container" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_below="@id/latitude_container" > - - <TextView - android:id="@+id/longitude_label" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/longitude_label" /> - - <TextView - android:id="@+id/longitude_value" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentRight="true" - android:layout_below="@+id/longitude_label" - android:text="" - android:textAppearance="?android:attr/textAppearanceLarge" /> - - </RelativeLayout> - - - <RelativeLayout - android:id="@+id/text_container" - android:layout_width="wrap_content" - android:layout_height="fill_parent" - android:layout_below="@id/longitude_container" > - - <TextView - android:id="@+id/text" - android:layout_width="fill_parent" - android:layout_height="fill_parent" - android:layout_above="@+id/version" - android:scrollbars="vertical" - android:textSize="7dp" - android:typeface="monospace" /> - - <TextView - android:id="@+id/version" - android:layout_width="fill_parent" - android:layout_height="10dip" - android:layout_alignParentBottom="true" - android:gravity="bottom|right" - android:textSize="7dp" - android:typeface="monospace" /> - - </RelativeLayout> - - </RelativeLayout> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_weight="0" + android:orientation="vertical" > + + <LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:layout_weight="0" + android:baselineAligned="true" + android:orientation="horizontal" > + + <RelativeLayout + android:id="@+id/callsign_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" > + + <TextView + android:id="@+id/callsign_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/callsign_label" /> + + <TextView + android:id="@+id/callsign_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/callsign_label" + android:text="" + android:textAppearance="?android:attr/textAppearanceLarge" /> + </RelativeLayout> + + <RelativeLayout + android:id="@+id/serial_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" > + + <TextView + android:id="@+id/serial_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/serial_label" /> + + <TextView + android:id="@+id/serial_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/serial_label" + android:textAppearance="?android:attr/textAppearanceLarge" /> + </RelativeLayout> + + <RelativeLayout + android:id="@+id/flight_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" > + + <TextView + android:id="@+id/flight_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/flight_label" /> + + <TextView + android:id="@+id/flight_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/flight_label" + android:textAppearance="?android:attr/textAppearanceLarge" /> + </RelativeLayout> + + <RelativeLayout + android:id="@+id/state_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" > + + <TextView + android:id="@+id/state_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/state_label" /> + + <TextView + android:id="@+id/state_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/state_label" + android:textAppearance="?android:attr/textAppearanceLarge" /> + </RelativeLayout> + + <RelativeLayout + android:id="@+id/rssi_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" > + + <TextView + android:id="@+id/rssi_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/rssi_label" /> + + <TextView + android:id="@+id/rssi_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/rssi_label" + android:textAppearance="?android:attr/textAppearanceLarge" /> + </RelativeLayout> + + <RelativeLayout + android:id="@+id/age_container" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" > + + <TextView + android:id="@+id/age_label" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/age_label" /> + + <TextView + android:id="@+id/age_value" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@+id/age_label" + android:textAppearance="?android:attr/textAppearanceLarge" /> + </RelativeLayout> + </LinearLayout> + + <TabHost + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@android:id/tabhost" + android:layout_width="fill_parent" + android:layout_height="0dp" + android:layout_weight="1" > + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" > + + <TabWidget + android:id="@android:id/tabs" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="0" + android:orientation="horizontal" /> + + <FrameLayout + android:id="@android:id/tabcontent" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_weight="0" /> + + <android.support.v4.view.ViewPager + android:id="@+id/pager" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" /> + </LinearLayout> + </TabHost> + + <TextView + android:id="@+id/version" + android:layout_width="fill_parent" + android:layout_height="10dip" + android:layout_weight="0" + android:gravity="bottom|right" + android:textSize="7sp" + android:typeface="monospace" /> + +</LinearLayout> diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index 625a2eee..2777a4d4 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -33,18 +33,21 @@ import android.os.Handler; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; +import android.support.v4.app.FragmentActivity; +import android.support.v4.view.ViewPager; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.Window; +import android.widget.TabHost; import android.widget.TextView; import android.widget.Toast; import android.app.AlertDialog; import org.altusmetrum.altoslib_1.*; -public class AltosDroid extends Activity { +public class AltosDroid extends FragmentActivity { // Debugging private static final String TAG = "AltosDroid"; private static final boolean D = true; @@ -66,18 +69,16 @@ public class AltosDroid extends Activity { private TextView mSerialView; private TextView mFlightView; private TextView mStateView; - private TextView mSpeedView; - private TextView mAccelView; - private TextView mRangeView; - private TextView mHeightView; - private TextView mElevationView; - private TextView mBearingView; - private TextView mLatitudeView; - private TextView mLongitudeView; + private TextView mAgeView; // field to display the version at the bottom of the screen private TextView mVersion; + // Tabs + TabHost mTabHost; + ViewPager mViewPager; + TabsAdapter mTabsAdapter; + // Service private boolean mIsBound = false; private Messenger mService = null; @@ -181,19 +182,10 @@ public class AltosDroid extends Activity { void update_ui(AltosState state) { mCallsignView.setText(state.data.callsign); - mRSSIView.setText(String.format("%d", state.data.rssi)); mSerialView.setText(String.format("%d", state.data.serial)); mFlightView.setText(String.format("%d", state.data.flight)); mStateView.setText(state.data.state()); - mSpeedView.setText(String.format("%6.0f m/s", state.speed())); - mAccelView.setText(String.format("%6.0f m/s²", state.acceleration)); - mRangeView.setText(String.format("%6.0f m", state.range)); - mHeightView.setText(String.format("%6.0f m", state.height)); - mElevationView.setText(String.format("%3.0f°", state.elevation)); - if (state.from_pad != null) - mBearingView.setText(String.format("%3.0f°", state.from_pad.bearing)); - mLatitudeView.setText(pos(state.gps.lat, "N", "S")); - mLongitudeView.setText(pos(state.gps.lon, "W", "E")); + mRSSIView.setText(String.format("%d", state.data.rssi)); mAltosVoice.tell(state); } @@ -233,6 +225,21 @@ public class AltosDroid extends Activity { setContentView(R.layout.altosdroid); getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title); + mTabHost = (TabHost)findViewById(android.R.id.tabhost); + mTabHost.setup(); + + mViewPager = (ViewPager)findViewById(R.id.pager); + mViewPager.setOffscreenPageLimit(4); + + mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager); + + mTabsAdapter.addTab(mTabHost.newTabSpec("pad").setIndicator("Pad"), TabPad.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("ascent").setIndicator("Ascent"), TabAscent.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("descent").setIndicator("Descent"), TabDescent.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("landed").setIndicator("Landed"), TabLanded.class, null); + mTabsAdapter.addTab(mTabHost.newTabSpec("map").setIndicator("Map"), TabMap.class, null); + + // Set up the custom title mTitle = (TextView) findViewById(R.id.title_left_text); mTitle.setText(R.string.app_name); @@ -249,14 +256,7 @@ public class AltosDroid extends Activity { mSerialView = (TextView) findViewById(R.id.serial_value); mFlightView = (TextView) findViewById(R.id.flight_value); mStateView = (TextView) findViewById(R.id.state_value); - mSpeedView = (TextView) findViewById(R.id.speed_value); - mAccelView = (TextView) findViewById(R.id.accel_value); - mRangeView = (TextView) findViewById(R.id.range_value); - mHeightView = (TextView) findViewById(R.id.height_value); - mElevationView = (TextView) findViewById(R.id.elevation_value); - mBearingView = (TextView) findViewById(R.id.bearing_value); - mLatitudeView = (TextView) findViewById(R.id.latitude_value); - mLongitudeView = (TextView) findViewById(R.id.longitude_value); + mAgeView = (TextView) findViewById(R.id.age_value); mAltosVoice = new AltosVoice(this); } |