mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-27 06:17:27 +00:00
TRACKING APP: landscape version of tracking view
This commit is contained in:
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>
|
||||
+351
-258
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
+22
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-70
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user