TRACKING APP: let activity handle values for viewPager-fragments

This commit is contained in:
Lukas Zielinski committed 2014-12-16 16:02:40 +01:00
1 parent b3031d6e09
commit a3855baa5a
4 files changed
+69 -75

No files matched your search

@@ -14,9 +14,7 @@ import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.widget.Toolbar;
import android.view.MotionEvent;
import android.widget.TextView;
import android.widget.Toast;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.tracking.app.BuildConfig;
@@ -52,6 +50,9 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
private final static String TAG = TrackingActivity.class.getName();
private final static String SIS_TRACKING_FRAGMENT = "savedInstanceTrackingFragment";
private final static String SIS_LAST_VIEWPAGER_ITEM = "instanceStateLastViewPagerItem";
private final static String SIS_LAST_SPEED_TEXT = "instanceStateLastSpeedText";
private final static String SIS_LAST_COMPASS_TEXT = "instanceStateLastCompassText";
private ViewPager mPager;
private ScreenSlidePagerAdapter mPagerAdapter;
@@ -59,9 +60,20 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
private String eventId;
private AppPreferences prefs;
private TrackingFragment trackingFragment;
private TrackingFragment trackingFragment;
private TimerRunnable timer;
private int lastViewPagerItem;
/**
* This isn't nice. The callbacks for fragments inside a
* view pager are unreliable, but I want the values
* to be displayed immediately after device rotation.
* Thus they are cached here and the fragments can pick
* them up.
*/
public String lastSpeedIndicatorText = "";
public String lastCompassIndicatorText = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -101,12 +113,8 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
}
mPager.setAdapter(mPagerAdapter);
mPager.setOffscreenPageLimit(3);
mPager.setOffscreenPageLimit(0);
// ok, here be dragons.
// however, I haven't found out how the ViewPager retains and dismisses fragments, so I check for every case.
// The easy way (if savedInstanceState != null) takeFromBundle(); doesn't work, since only some fragments are
// saved to the bundle it seems.
if (savedInstanceState != null) {
Fragment tFragment = getSupportFragmentManager().getFragment(savedInstanceState, SIS_TRACKING_FRAGMENT);
if (tFragment != null) {
@@ -114,6 +122,10 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
} else {
trackingFragment = new TrackingFragment();
}
lastViewPagerItem = savedInstanceState.getInt(SIS_LAST_VIEWPAGER_ITEM);
lastSpeedIndicatorText = savedInstanceState.getString(SIS_LAST_SPEED_TEXT);
lastCompassIndicatorText = savedInstanceState.getString(SIS_LAST_COMPASS_TEXT);
} else {
trackingFragment = new TrackingFragment();
}
@@ -125,6 +137,7 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
@Override
public void onPageSelected(int arg0) {
lastViewPagerItem = arg0;
}
@Override
@@ -140,23 +153,17 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
ServiceHelper.getInstance().startTrackingService(this, eventId);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
// HudFragment hudFragment = (HudFragment)
// getSupportFragmentManager().findFragmentById(R.id.hud_content_frame);
// hudFragment.layoutOverlay();
//
// hudFragment.setSpeedOverGround(0);
// hudFragment.setHeading(0);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SIS_LAST_VIEWPAGER_ITEM, lastViewPagerItem);
outState.putString(SIS_LAST_SPEED_TEXT, lastSpeedIndicatorText);
outState.putString(SIS_LAST_COMPASS_TEXT, lastCompassIndicatorText);
if (trackingFragment.isAdded()) {
getSupportFragmentManager().putFragment(outState, SIS_TRACKING_FRAGMENT, trackingFragment);
}
}
}
@Override
@@ -219,7 +226,9 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
{
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
}
mPager.setAdapter(mPagerAdapter);
mPager.setCurrentItem(lastViewPagerItem);
}
@Override
@@ -367,14 +376,6 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
return 3;
}
// public StopTrackingButtonFragment getStopTrackingButtonFragment() {
// if (stbFragment != null && stbFragment.isAdded())
// {
// return stbFragment;
// }
// else return null;
// }
public CompassFragment getCompassFragment() {
if (cFragment != null && cFragment.isAdded())
{
@@ -7,11 +7,11 @@ import android.view.ViewGroup;
import android.widget.TextView;
import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.ui.activities.TrackingActivity;
public class CompassFragment extends BaseFragment {
private String TAG = CompassFragment.class.getName();
private final String SIS_HEADING_TEXTIVEW = "CompassFragmentHeadingTextView";
//private String TAG = CompassFragment.class.getName();
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
@@ -25,6 +25,12 @@ public class CompassFragment extends BaseFragment {
{
TextView headingText = (TextView) getActivity().findViewById(R.id.compass_bearing_text_view);
headingText.setText(String.valueOf(Math.round(heading)) + "°");
TrackingActivity activity = (TrackingActivity) getActivity();
if (activity != null) {
activity.lastCompassIndicatorText = headingText.getText().toString();
}
}
}
@@ -32,20 +38,12 @@ public class CompassFragment extends BaseFragment {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView headingText = (TextView)getActivity().findViewById(R.id.compass_bearing_text_view);
if (savedInstanceState != null)
{
headingText.setText(savedInstanceState.getString(SIS_HEADING_TEXTIVEW));
TrackingActivity activity = (TrackingActivity) getActivity();
if (activity != null) {
headingText.setText(activity.lastCompassIndicatorText);
} else {
headingText.setText("");
}
else
{
headingText.setText("---°");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
TextView headingText = (TextView)getActivity().findViewById(R.id.compass_bearing_text_view);
outState.putString(SIS_HEADING_TEXTIVEW, headingText.getText().toString());
}
}
}
@@ -11,22 +11,20 @@ import android.view.ViewGroup;
import android.widget.TextView;
import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.ui.activities.TrackingActivity;
public class SpeedFragment extends BaseFragment {
private String TAG = SpeedFragment.class.getName();
private final String SIS_SPEED_TEXTIVEW = "SpeedFragmentSpeedTextView";
//private String TAG = SpeedFragment.class.getName();
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_speed, container, false);
ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_speed, container, false);
return view;
}
public void setSpeed(float speedInMetersPerSecond)
{
if (isAdded())
{
public void setSpeed(float speedInMetersPerSecond) {
if (isAdded()) {
float speedInKnots = speedInMetersPerSecond * 1.9438444924574f;
NumberFormat df = DecimalFormat.getInstance();
@@ -34,30 +32,29 @@ public class SpeedFragment extends BaseFragment {
df.setMaximumFractionDigits(2);
df.setRoundingMode(RoundingMode.HALF_UP);
String formattedSpeed = df.format(speedInKnots);
TextView speedText = (TextView) getActivity().findViewById(R.id.speed_text_view);
speedText.setText(formattedSpeed + "kn");
TrackingActivity activity = (TrackingActivity) getActivity();
if (activity != null) {
activity.lastSpeedIndicatorText = speedText.getText().toString();
}
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TextView speedText = (TextView)getActivity().findViewById(R.id.speed_text_view);
if (savedInstanceState != null)
{
speedText.setText(savedInstanceState.getString(SIS_SPEED_TEXTIVEW));
}
else
{
speedText.setText("--kn");
TextView speedText = (TextView) getActivity().findViewById(R.id.speed_text_view);
TrackingActivity activity = (TrackingActivity) getActivity();
if (activity != null) {
speedText.setText(activity.lastSpeedIndicatorText);
} else {
speedText.setText("");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
TextView speedText = (TextView)getActivity().findViewById(R.id.speed_text_view);
outState.putString(SIS_SPEED_TEXTIVEW, speedText.getText().toString());
}
}
}
@@ -14,6 +14,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.google.android.gms.internal.mp;
import com.google.android.gms.internal.mv;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.tracking.app.BuildConfig;
import com.sap.sailing.android.tracking.app.R;
@@ -31,7 +33,6 @@ public class TrackingFragment extends BaseFragment {
static final String SIS_GPS_ACCURACY = "instanceStateGpsAccuracy";
static final String SIS_GPS_UNSENT_FIXES = "instanceStateGpsUnsentFixes";
private AppPreferences prefs;
private long lastGPSQualityUpdate;
@@ -247,11 +248,8 @@ public class TrackingFragment extends BaseFragment {
{
unsentGpsFixesTextView.setText(String.valueOf(count));
}
}
});
}
}
}