TRACKING APP: landscape version of tracking view

This commit is contained in:
Lukas Zielinski committed 2014-12-12 17:28:03 +01:00
1 parent b58bb1b7ab
commit 49bd357870
5 files changed
+415 -329

No files matched your search

@@ -63,7 +63,7 @@
<activity
android:name=".ui.activities.TrackingActivity"
android:label="@string/title_activity_tracking"
android:screenOrientation="portrait" >
android:screenOrientation="unspecified" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.activities.StartActivity" />
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.sap.sailing.android.tracking.app.views"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res/com.sap.sailing.android.tracking.app"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black" >
<RelativeLayout
android:id="@+id/stop_tracking_box"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:layout_alignParentBottom="true"
android:background="@color/gray" >
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="@color/white_transparent" />
<com.sap.sailing.android.tracking.app.customviews.OpenSansButton
android:id="@+id/stop_tracking"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="10dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:background="@drawable/rounded_btn_red"
android:padding="10dp"
android:text="@string/stop_tracking"
android:textAllCaps="true"
android:textStyle="bold" />
</RelativeLayout>
</RelativeLayout>
@@ -14,6 +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.widget.TextView;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.tracking.app.BuildConfig;
@@ -29,7 +30,6 @@ import com.sap.sailing.android.tracking.app.services.TransmittingService.APIConn
import com.sap.sailing.android.tracking.app.services.TransmittingService.APIConnectivityListener;
import com.sap.sailing.android.tracking.app.services.TransmittingService.TransmittingBinder;
import com.sap.sailing.android.tracking.app.ui.fragments.CompassFragment;
import com.sap.sailing.android.tracking.app.ui.fragments.RegattaFragment;
import com.sap.sailing.android.tracking.app.ui.fragments.SpeedFragment;
import com.sap.sailing.android.tracking.app.ui.fragments.StopTrackingButtonFragment;
import com.sap.sailing.android.tracking.app.ui.fragments.TrackingFragment;
@@ -39,320 +39,413 @@ import com.sap.sailing.android.tracking.app.utils.ServiceHelper;
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
import com.viewpagerindicator.CirclePageIndicator;
public class TrackingActivity extends BaseActivity implements GPSQualityListener, APIConnectivityListener, MagneticHeadingListener {
public class TrackingActivity extends BaseActivity implements GPSQualityListener,
APIConnectivityListener, MagneticHeadingListener {
TrackingService trackingService;
boolean trackingServiceBound;
TransmittingService transmittingService;
boolean transmittingServiceBound;
private final static String TAG = TrackingActivity.class.getName();
private final static String SIS_TRACKING_FRAGMENT = "savedInstanceTrackingFragment";
private final static String SIS_COMPASS_FRAGMENT = "savedInstanceCompassFragment";
private final static String SIS_SPEED_FRAGMENT = "savedInstanceSpeedFragment";
private final static String SIS_STOP_TRACKING_BUTTON_FRAGMENT = "savedInstanceStopTrackingButtonFragment";
private ViewPager mPager;
private ScreenSlidePagerAdapter mPagerAdapter;
private String eventId;
private ViewPager mPager;
private ScreenSlidePagerAdapter mPagerAdapter;
private String eventId;
private AppPreferences prefs;
private TrackingFragment trackingFragment;
private CompassFragment compassFragment;
private SpeedFragment speedFragment;
private StopTrackingButtonFragment stopTrackingButtonFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = new AppPreferences(this);
Intent intent = getIntent();
eventId = intent.getExtras().getString(getString(R.string.tracking_activity_event_id_parameter));
setContentView(R.layout.fragment_hud_container);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.sap_logo_64_sq);
toolbar.setPadding(20, 0, 0, 0);
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
}
if (getSupportActionBar() != null) {
EventInfo eventInfo = DatabaseHelper.getInstance().getEventInfoWithLeaderboard(this, eventId);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
toolbar.setNavigationIcon(R.drawable.sap_logo_64_sq);
toolbar.setPadding(20, 0, 0, 0);
getSupportActionBar().setTitle(eventInfo.leaderboardName);
getSupportActionBar().setSubtitle(getString(R.string.tracking_colon) + " " + eventInfo.name);
}
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
mPager.setOffscreenPageLimit(3);
if (savedInstanceState != null)
{
trackingFragment = (TrackingFragment)getSupportFragmentManager().getFragment(savedInstanceState, SIS_TRACKING_FRAGMENT);
compassFragment = (CompassFragment)getSupportFragmentManager().getFragment(savedInstanceState, SIS_COMPASS_FRAGMENT);
speedFragment = (SpeedFragment)getSupportFragmentManager().getFragment(savedInstanceState, SIS_SPEED_FRAGMENT);
stopTrackingButtonFragment = (StopTrackingButtonFragment)getSupportFragmentManager().getFragment(savedInstanceState, SIS_STOP_TRACKING_BUTTON_FRAGMENT);
}
else
{
trackingFragment = new TrackingFragment();
compassFragment = new CompassFragment();
speedFragment = new SpeedFragment();
stopTrackingButtonFragment = new StopTrackingButtonFragment();
}
//Bind the title indicator to the adapter
CirclePageIndicator titleIndicator = (CirclePageIndicator)findViewById(R.id.title_page_indicator);
titleIndicator.setViewPager(mPager);
titleIndicator.setOnPageChangeListener(new OnPageChangeListener() {
private TimerRunnable timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = new AppPreferences(this);
Intent intent = getIntent();
eventId = intent.getExtras().getString(
getString(R.string.tracking_activity_event_id_parameter));
setContentView(R.layout.fragment_hud_container);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.sap_logo_64_sq);
toolbar.setPadding(20, 0, 0, 0);
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
}
if (getSupportActionBar() != null) {
EventInfo eventInfo = DatabaseHelper.getInstance().getEventInfoWithLeaderboard(this,
eventId);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
toolbar.setNavigationIcon(R.drawable.sap_logo_64_sq);
toolbar.setPadding(20, 0, 0, 0);
getSupportActionBar().setTitle(eventInfo.leaderboardName);
getSupportActionBar().setSubtitle(
getString(R.string.tracking_colon) + " " + eventInfo.name);
}
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.pager);
if (mPagerAdapter == null)
{
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
}
mPager.setAdapter(mPagerAdapter);
mPager.setOffscreenPageLimit(3);
// 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) {
trackingFragment = (TrackingFragment) tFragment;
} else {
trackingFragment = new TrackingFragment();
}
Fragment cFragment = getSupportFragmentManager().getFragment(savedInstanceState, SIS_COMPASS_FRAGMENT);
if (cFragment != null) {
compassFragment = (CompassFragment) cFragment;
} else {
compassFragment = new CompassFragment();
}
Fragment sFragment = getSupportFragmentManager().getFragment(savedInstanceState, SIS_SPEED_FRAGMENT);
if (sFragment != null) {
speedFragment = (SpeedFragment) sFragment;
} else {
speedFragment = new SpeedFragment();
}
Fragment stFragment = getSupportFragmentManager().getFragment(savedInstanceState, SIS_STOP_TRACKING_BUTTON_FRAGMENT);
if (stFragment != null) {
stopTrackingButtonFragment = (StopTrackingButtonFragment) stFragment;
} else {
stopTrackingButtonFragment = new StopTrackingButtonFragment();
}
} else {
trackingFragment = new TrackingFragment();
compassFragment = new CompassFragment();
speedFragment = new SpeedFragment();
stopTrackingButtonFragment = new StopTrackingButtonFragment();
}
// Bind the title indicator to the adapter
CirclePageIndicator titleIndicator = (CirclePageIndicator) findViewById(R.id.title_page_indicator);
titleIndicator.setViewPager(mPager);
titleIndicator.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
replaceFragment(R.id.tracking_linear_layout, trackingFragment);
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);
getSupportFragmentManager().putFragment(outState, SIS_TRACKING_FRAGMENT, trackingFragment);
getSupportFragmentManager().putFragment(outState, SIS_COMPASS_FRAGMENT, compassFragment);
getSupportFragmentManager().putFragment(outState, SIS_SPEED_FRAGMENT, speedFragment);
getSupportFragmentManager().putFragment(outState, SIS_STOP_TRACKING_BUTTON_FRAGMENT, stopTrackingButtonFragment);
}
@Override
protected void onStart() {
super.onStart();
Intent transmittingServiceIntent = new Intent(this, TransmittingService.class);
bindService(transmittingServiceIntent, transmittingServiceConnection, Context.BIND_AUTO_CREATE);
Intent trackingServiceIntent = new Intent(this, TrackingService.class);
bindService(trackingServiceIntent, trackingServiceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
super.onStop();
if (trackingServiceBound) {
trackingService.unregisterGPSQualityListener();
unbindService(trackingServiceConnection);
trackingServiceBound = false;
if (BuildConfig.DEBUG)
{
ExLog.i(this, TAG, "Unbound tracking Service");
}
}
if (transmittingServiceBound)
{
transmittingService.unregisterAPIConnectivityListener();
unbindService(transmittingServiceConnection);
transmittingServiceBound = false;
if (BuildConfig.DEBUG)
{
ExLog.i(this, TAG, "Unbound transmitting Service");
}
}
}
@Override
protected void onPause() {
super.onPause();
CompassManager.getInstance(this).unregisterListener();
}
@Override
protected void onResume() {
super.onResume();
replaceFragment(R.id.tracking_linear_layout, trackingFragment);
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);
if (trackingFragment.isAdded()) {
getSupportFragmentManager().putFragment(outState, SIS_TRACKING_FRAGMENT, trackingFragment);
}
if (compassFragment.isAdded()) {
getSupportFragmentManager()
.putFragment(outState, SIS_COMPASS_FRAGMENT, compassFragment);
}
if (speedFragment.isAdded()) {
getSupportFragmentManager().putFragment(outState, SIS_SPEED_FRAGMENT, speedFragment);
}
if (stopTrackingButtonFragment.isAdded()) {
getSupportFragmentManager().putFragment(outState, SIS_STOP_TRACKING_BUTTON_FRAGMENT,
stopTrackingButtonFragment);
}
}
@Override
protected void onStart() {
super.onStart();
Intent transmittingServiceIntent = new Intent(this, TransmittingService.class);
bindService(transmittingServiceIntent, transmittingServiceConnection,
Context.BIND_AUTO_CREATE);
Intent trackingServiceIntent = new Intent(this, TrackingService.class);
bindService(trackingServiceIntent, trackingServiceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
super.onStop();
if (trackingServiceBound) {
trackingService.unregisterGPSQualityListener();
unbindService(trackingServiceConnection);
trackingServiceBound = false;
if (BuildConfig.DEBUG) {
ExLog.i(this, TAG, "Unbound tracking Service");
}
}
if (transmittingServiceBound) {
transmittingService.unregisterAPIConnectivityListener();
unbindService(transmittingServiceConnection);
transmittingServiceBound = false;
if (BuildConfig.DEBUG) {
ExLog.i(this, TAG, "Unbound transmitting Service");
}
}
}
@Override
protected void onPause() {
super.onPause();
CompassManager.getInstance(this).unregisterListener();
timer.stop();
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(null);
}
@Override
protected void onResume() {
super.onResume();
if (prefs.getHeadingFromMagneticSensorPreferred()) {
CompassManager.getInstance(this).registerListener(this);
}
}
@Override
public void gpsQualityAndAccurracyUpdated(GPSQuality quality, float gpsAccurracy, float bearing, float speed) {
trackingFragment.setGPSQualityAndAcurracy(quality, gpsAccurracy);
speedFragment.setSpeed(speed);
compassFragment.setBearing(bearing);
}
@Override
public void apiConnectivityUpdated(APIConnectivity apiConnectivity) {
trackingFragment.setAPIConnectivityStatus(apiConnectivity);
}
@Override
public void setUnsentGPSFixesCount(int count) {
trackingFragment.setUnsentGPSFixesCount(count);
}
timer = new TimerRunnable();
timer.start();
}
@Override
public void onBackPressed() {
public void gpsQualityAndAccurracyUpdated(GPSQuality quality, float gpsAccurracy,
float bearing, float speed) {
trackingFragment.setGPSQualityAndAcurracy(quality, gpsAccurracy);
speedFragment.setSpeed(speed);
compassFragment.setBearing(bearing);
}
@Override
public void apiConnectivityUpdated(APIConnectivity apiConnectivity) {
trackingFragment.setAPIConnectivityStatus(apiConnectivity);
}
@Override
public void setUnsentGPSFixesCount(int count) {
trackingFragment.setUnsentGPSFixesCount(count);
}
@Override
public void onBackPressed() {
trackingFragment.userTappedBackButton();
}
/** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection transmittingServiceConnection = new ServiceConnection() {
private ServiceConnection transmittingServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
TransmittingBinder binder = (TransmittingBinder) service;
transmittingService = binder.getService();
transmittingServiceBound = true;
transmittingService.registerAPIConnectivityListener(TrackingActivity.this);
if (BuildConfig.DEBUG)
{
ExLog.i(TrackingActivity.this, TAG, "connected to transmitting service");
}
}
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// We've bound to LocalService, cast the IBinder and get
// LocalService instance
TransmittingBinder binder = (TransmittingBinder) service;
transmittingService = binder.getService();
transmittingServiceBound = true;
transmittingService.registerAPIConnectivityListener(TrackingActivity.this);
if (BuildConfig.DEBUG) {
ExLog.i(TrackingActivity.this, TAG, "connected to transmitting service");
}
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
transmittingServiceBound = false;
}
};
@Override
public void onServiceDisconnected(ComponentName arg0) {
transmittingServiceBound = false;
}
};
/** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection trackingServiceConnection = new ServiceConnection() {
private ServiceConnection trackingServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
TrackingBinder binder = (TrackingBinder) service;
trackingService = binder.getService();
trackingServiceBound = true;
trackingService.registerGPSQualityListener(TrackingActivity.this);
if (BuildConfig.DEBUG)
{
ExLog.i(TrackingActivity.this, TAG, "connected to tracking service");
}
}
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// We've bound to LocalService, cast the IBinder and get
// LocalService instance
TrackingBinder binder = (TrackingBinder) service;
trackingService = binder.getService();
trackingServiceBound = true;
trackingService.registerGPSQualityListener(TrackingActivity.this);
if (BuildConfig.DEBUG) {
ExLog.i(TrackingActivity.this, TAG, "connected to tracking service");
}
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
trackingServiceBound = false;
}
};
@Override
public void onServiceDisconnected(ComponentName arg0) {
trackingServiceBound = false;
}
};
@Override
public void magneticHeadingUpdated(float heading) {
//HudFragment hudFragment = (HudFragment) getSupportFragmentManager().findFragmentById(R.id.hud_content_frame);
if (prefs.getHeadingFromMagneticSensorPreferred())
{
if (mPager.getCurrentItem() == ScreenSlidePagerAdapter.VIEW_PAGER_FRAGMENT_COMPASS)
{
compassFragment.setBearing(heading);
}
}
else
{
if (BuildConfig.DEBUG)
{
ExLog.i(this, TAG, "Received magnet compass update, even though prefs say get from GPS. Unregistering listener." );
}
CompassManager.getInstance(this).unregisterListener();
}
// HudFragment hudFragment = (HudFragment)
// getSupportFragmentManager().findFragmentById(R.id.hud_content_frame);
if (prefs.getHeadingFromMagneticSensorPreferred()) {
if (mPager.getCurrentItem() == ScreenSlidePagerAdapter.VIEW_PAGER_FRAGMENT_COMPASS) {
compassFragment.setBearing(heading);
}
} else {
if (BuildConfig.DEBUG) {
ExLog.i(this, TAG,
"Received magnet compass update, even though prefs say get from GPS. Unregistering listener.");
}
CompassManager.getInstance(this).unregisterListener();
}
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public final static int VIEW_PAGER_FRAGMENT_STOP_BUTTON= 0;
public final static int VIEW_PAGER_FRAGMENT_STOP_BUTTON = 0;
public final static int VIEW_PAGER_FRAGMENT_COMPASS = 1;
public final static int VIEW_PAGER_FRAGMENT_SPEED = 2;
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == VIEW_PAGER_FRAGMENT_STOP_BUTTON)
{
return stopTrackingButtonFragment;
}
else if (position == VIEW_PAGER_FRAGMENT_COMPASS)
{
return compassFragment;
}
else if (position == VIEW_PAGER_FRAGMENT_SPEED)
{
return speedFragment;
}
else
{
return null;
}
}
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == VIEW_PAGER_FRAGMENT_STOP_BUTTON) {
return stopTrackingButtonFragment;
} else if (position == VIEW_PAGER_FRAGMENT_COMPASS) {
return compassFragment;
} else if (position == VIEW_PAGER_FRAGMENT_SPEED) {
return speedFragment;
} else {
return null;
}
}
@Override
public int getCount() {
return 3;
}
}
@Override
public int getCount() {
return 3;
}
}
public void showStopTrackingConfirmationDialog() {
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(R.string.please_confirm)
AlertDialog dialog = new AlertDialog.Builder(this).setTitle(R.string.please_confirm)
.setMessage(R.string.do_you_really_want_to_stop_tracking)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.yes,
new DialogInterface.OnClickListener() {
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
stopTracking();
}
}).setNegativeButton(android.R.string.no, null).create();
public void onClick(DialogInterface dialog,
int whichButton) {
stopTracking();
}
}).setNegativeButton(android.R.string.no, null).create();
dialog.show();
}
public void stopTracking() {
prefs.setTrackingTimerStarted(0);
ServiceHelper.getInstance().stopTrackingService(this);
finish();
}
/**
* Update UI with a string containing the time since tracking started, e.g.
* 01:22:45
*/
public void updateTimer() {
long diff = System.currentTimeMillis() - prefs.getTrackingTimerStarted();
TextView textView = (TextView) findViewById(R.id.tracking_time_label);
if (textView != null) {
textView.setText(getTimeFormatString(diff));
}
}
private String getTimeFormatString(long milliseconds) {
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
return String.format(getResources().getConfiguration().locale, "%02d:%02d:%02d", hours, minutes, seconds);
}
private class TimerRunnable implements Runnable {
public Thread t;
public volatile boolean running = true;
public void start() {
running = true;
if (t == null) {
t = new Thread(this);
t.start();
}
}
@Override
public void run() {
while (running) {
runOnUiThread(new Runnable() {
@Override
public void run() {
trackingFragment.checkLastGPSReceived();
updateTimer();
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void stop() {
running = false;
}
}
}
@@ -6,11 +6,14 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.ui.activities.TrackingActivity;
public class StopTrackingButtonFragment extends BaseFragment {
private final static String SIS_TRACKING_TIMER = "savedInstanceTrackingTimer";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -35,4 +38,23 @@ public class StopTrackingButtonFragment extends BaseFragment {
return view;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
TextView timerView = (TextView) getActivity().findViewById(R.id.tracking_time_label);
outState.putString(SIS_TRACKING_TIMER, timerView.getText().toString());
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null)
{
TextView timerView = (TextView) getActivity().findViewById(R.id.tracking_time_label);
timerView.setText(savedInstanceState.getString(SIS_TRACKING_TIMER));
}
}
}
@@ -31,7 +31,7 @@ public class TrackingFragment extends BaseFragment {
static final String SIS_GPS_ACCURACY = "instanceStateGpsAccuracy";
static final String SIS_GPS_UNSENT_FIXES = "instanceStateGpsUnsentFixes";
private TimerRunnable timer;
private AppPreferences prefs;
private long lastGPSQualityUpdate;
@@ -57,14 +57,6 @@ public class TrackingFragment extends BaseFragment {
super.onResume();
// so it initally updates to "battery-saving" etc.
setAPIConnectivityStatus(APIConnectivity.noAttempt);
timer = new TimerRunnable();
timer.start();
}
@Override
public void onPause() {
super.onPause();
timer.stop();
}
@Override
@@ -102,22 +94,7 @@ public class TrackingFragment extends BaseFragment {
outState.putString(SIS_GPS_ACCURACY, accuracyText.getText().toString());
outState.putString(SIS_GPS_UNSENT_FIXES, unsentFixesText.getText().toString());
}
/**
* Update UI with a string containing the time since tracking started, e.g. 01:22:45
*/
public void updateTimer()
{
if (isAdded())
{
long diff = System.currentTimeMillis() - prefs.getTrackingTimerStarted();
TextView textView = (TextView) getActivity().findViewById(R.id.tracking_time_label);
if (textView != null)
{
textView.setText(getTimeFormatString(diff));
}
}
}
/**
* If last GPS update is too long ago, let's assume there's no signal and set quality to .noSignal
@@ -237,15 +214,6 @@ public class TrackingFragment extends BaseFragment {
activity.showStopTrackingConfirmationDialog();
}
private String getTimeFormatString(long milliseconds) {
int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours = (int) ((milliseconds / (1000*60*60)) % 24);
return String.format(getResources().getConfiguration().locale, "%02d:%02d:%02d", hours, minutes, seconds);
}
public void setGPSQualityAndAcurracy(GPSQuality quality, float gpsAccurracy)
{
if (isAdded())
@@ -285,40 +253,5 @@ public class TrackingFragment extends BaseFragment {
}
}
private class TimerRunnable implements Runnable {
public Thread t;
public volatile boolean running = true;
public void start() {
running = true;
if (t == null) {
t = new Thread(this);
t.start();
}
}
@Override
public void run() {
while (running) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
checkLastGPSReceived();
updateTimer();
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void stop()
{
running = false;
}
}
}