X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosDroidTab.java;h=ec73f5e3c4ba5f102278719b7ec20ee4a3283ec9;hp=68bbe5935489b5875c94e21ca3273684104dce17;hb=d5c038473d56ebbe61b8a71b5eb28d03385f8c48;hpb=59dfcbe14622c20aaa7d5b131eece9f4c8db6887 diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java index 68bbe593..ec73f5e3 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java @@ -3,7 +3,8 @@ * * 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. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -17,8 +18,88 @@ package org.altusmetrum.AltosDroid; -import org.altusmetrum.altoslib_1.AltosState; +import org.altusmetrum.altoslib_12.*; +import android.location.Location; +import android.app.Activity; +import android.graphics.Color; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v4.app.FragmentManager; +import android.location.Location; +import android.widget.TextView; -public interface AltosDroidTab { - public void update_ui(AltosState state); +public abstract class AltosDroidTab extends Fragment implements AltosUnitsListener { + TelemetryState last_telem_state; + AltosState last_state; + AltosGreatCircle last_from_receiver; + Location last_receiver; + AltosDroid altos_droid; + + public abstract void show(TelemetryState telem_state, AltosState state, AltosGreatCircle from_receiver, Location receiver); + + public abstract String tab_name(); + + public void units_changed(boolean imperial_units) { + if (!isHidden()) + show(last_telem_state, last_state, last_from_receiver, last_receiver); + } + + public void set_value(TextView text_view, + AltosUnits units, + int width, + double value) { + if (value == AltosLib.MISSING) + text_view.setText(""); + else + text_view.setText(units.show(width, value)); + } + + public void set_visible(boolean visible) { + FragmentTransaction ft = AltosDroid.fm.beginTransaction(); + AltosDebug.debug("set visible %b %s\n", visible, tab_name()); + if (visible) { + ft.show(this); + show(last_telem_state, last_state, last_from_receiver, last_receiver); + } else + ft.hide(this); + try { + ft.commitAllowingStateLoss(); + } catch (IllegalStateException ie) { + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + altos_droid = (AltosDroid) activity; + altos_droid.registerTab(this); + } + + @Override + public void onDetach() { + super.onDetach(); + altos_droid.unregisterTab(this); + altos_droid = null; + } + + @Override + public void onResume() { + super.onResume(); + AltosDebug.debug("onResume tab %s\n", tab_name()); + set_visible(true); + } + + public void update_ui(TelemetryState telem_state, AltosState state, + AltosGreatCircle from_receiver, Location receiver, boolean is_current) + { + last_telem_state = telem_state; + last_state = state; + last_from_receiver = from_receiver; + last_receiver = receiver; + if (is_current) + show(telem_state, state, from_receiver, receiver); + else + return; + } }