From b5f5db7949f1201ba0b47dcf0ff57f5400f9f1fd Mon Sep 17 00:00:00 2001 From: y20k Date: Thu, 29 Sep 2016 12:54:57 +0200 Subject: [PATCH] implementation of track statistics as BottomSheet - added some missing Getters to Track object --- .../trackbook/MainActivityTrackFragment.java | 49 ++++++ .../org/y20k/trackbook/TrackerService.java | 6 +- .../java/org/y20k/trackbook/core/Track.java | 22 ++- .../y20k/trackbook/helpers/StorageHelper.java | 12 +- .../res/layout-land/fragment_main_track.xml | 14 -- .../res/layout/content_main_track_map.xml | 12 -- .../layout/content_main_track_statistics.xml | 133 -------------- .../main/res/layout/fragment_main_track.xml | 164 +++++++++++++++++- app/src/main/res/values/strings.xml | 11 ++ 9 files changed, 248 insertions(+), 175 deletions(-) delete mode 100644 app/src/main/res/layout-land/fragment_main_track.xml delete mode 100644 app/src/main/res/layout/content_main_track_map.xml delete mode 100644 app/src/main/res/layout/content_main_track_statistics.xml diff --git a/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java b/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java index ac492aa..b2e0658 100644 --- a/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java +++ b/app/src/main/java/org/y20k/trackbook/MainActivityTrackFragment.java @@ -16,12 +16,18 @@ package org.y20k.trackbook; +import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.design.widget.BottomSheetBehavior; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; + +import org.y20k.trackbook.core.Track; +import org.y20k.trackbook.helpers.StorageHelper; /** @@ -34,7 +40,18 @@ public class MainActivityTrackFragment extends Fragment { /* Main class variables */ + private Activity mActivity; private View mRootView; + private TextView mDistanceView; + private TextView mStepsView; + private TextView mWaypointsView; + private TextView mDurationView; + private TextView mRecordingStartView; + private TextView mRecordingStopView; + private View mStatisticsSheet; + private BottomSheetBehavior mStatisticsSheetBehavior; + private Track mTrack; + @Override @@ -43,6 +60,9 @@ public class MainActivityTrackFragment extends Fragment { // action bar has options menu setHasOptionsMenu(true); + + // store activity + mActivity = getActivity(); } @@ -53,6 +73,17 @@ public class MainActivityTrackFragment extends Fragment { // inflate root view from xml mRootView = inflater.inflate(R.layout.fragment_main_track, container, false); + // get views + mDistanceView = (TextView) mRootView.findViewById(R.id.statistics_data_distance); + mStepsView = (TextView) mRootView.findViewById(R.id.statistics_data_steps); + mWaypointsView = (TextView) mRootView.findViewById(R.id.statistics_data_waypoints); + mDurationView = (TextView) mRootView.findViewById(R.id.statistics_data_duration); + mRecordingStartView = (TextView) mRootView.findViewById(R.id.statistics_data_recording_start); + mRecordingStopView = (TextView) mRootView.findViewById(R.id.statistics_data_recording_stop); + mStatisticsSheet = mRootView.findViewById(R.id.statistic_sheet); + + mStatisticsSheetBehavior = BottomSheetBehavior.from(mStatisticsSheet); + return mRootView; } @@ -60,6 +91,24 @@ public class MainActivityTrackFragment extends Fragment { @Override public void onResume() { super.onResume(); + + // get most current track from storage + StorageHelper storageHelper = new StorageHelper(mActivity); + mTrack = storageHelper.loadTrack(storageHelper.getMostCurrentTrack()); + + // populate views + if (mTrack != null) { + mDistanceView.setText(mTrack.getTrackDistance()); + mStepsView.setText(String.valueOf(mTrack.getStepCount())); + mWaypointsView.setText(String.valueOf(mTrack.getWayPoints().size())); + mDurationView.setText(mTrack.getTrackDuration()); + mRecordingStartView.setText(mTrack.getRecordingStart().toString()); + mRecordingStopView.setText(mTrack.getRecordingStop().toString()); + } + + mStatisticsSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + + } diff --git a/app/src/main/java/org/y20k/trackbook/TrackerService.java b/app/src/main/java/org/y20k/trackbook/TrackerService.java index 3f328ec..08622b4 100644 --- a/app/src/main/java/org/y20k/trackbook/TrackerService.java +++ b/app/src/main/java/org/y20k/trackbook/TrackerService.java @@ -251,9 +251,11 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven // get last WayPoint and compare it to current location Location lastWayPoint = mTrack.getWayPointLocation(trackSize - 1); - // compute average speed + // default value for average speed float averageSpeed = 0f; - if (trackSize > 1) { + + // compute average speed if new location come from network provider + if (trackSize > 1 && mCurrentBestLocation.getProvider().equals(LocationManager.NETWORK_PROVIDER)) { Location firstWayPoint = mTrack.getWayPointLocation(0); float distance = firstWayPoint.distanceTo(lastWayPoint); long timeDifference = lastWayPoint.getElapsedRealtimeNanos() - firstWayPoint.getElapsedRealtimeNanos(); diff --git a/app/src/main/java/org/y20k/trackbook/core/Track.java b/app/src/main/java/org/y20k/trackbook/core/Track.java index cd41dd3..219fc06 100644 --- a/app/src/main/java/org/y20k/trackbook/core/Track.java +++ b/app/src/main/java/org/y20k/trackbook/core/Track.java @@ -48,7 +48,7 @@ public class Track implements TrackbookKeys, Parcelable { private float mStepCount; private int mUnitSystem; private Date mRecordingStart; - private Date mRecordingEnd; + private Date mRecordingStop; /* Constructor */ @@ -58,7 +58,7 @@ public class Track implements TrackbookKeys, Parcelable { mStepCount = 0; mUnitSystem = getUnitSystem(Locale.getDefault()); mRecordingStart = GregorianCalendar.getInstance().getTime(); - mRecordingEnd = mRecordingStart; + mRecordingStop = mRecordingStart; } @@ -69,7 +69,7 @@ public class Track implements TrackbookKeys, Parcelable { mStepCount = in.readFloat(); mUnitSystem = in.readInt(); mRecordingStart = new Date(in.readLong()); - mRecordingEnd = new Date(in.readLong()); + mRecordingStop = new Date(in.readLong()); } @@ -118,7 +118,7 @@ public class Track implements TrackbookKeys, Parcelable { /* Setter for end time and date of recording */ public void setRecordingEnd (Date recordingEnd) { - mRecordingEnd = recordingEnd; + mRecordingStop = recordingEnd; } @@ -157,6 +157,17 @@ public class Track implements TrackbookKeys, Parcelable { } + /* Getter for stop date of recording */ + public Date getRecordingStop() { + return mRecordingStop; + } + + + /* Getter for step count of recording */ + public float getStepCount() { + return mStepCount; + } + /* Getter for distance of track */ public String getTrackDistance() { @@ -181,6 +192,7 @@ public class Track implements TrackbookKeys, Parcelable { return mWayPoints.get(index).getLocation(); } + /* Adds distance to given location to length of track */ private float addDistanceToTrack(Location location) { // get number of previously recorded WayPoints @@ -210,7 +222,7 @@ public class Track implements TrackbookKeys, Parcelable { parcel.writeFloat(mStepCount); parcel.writeInt(mUnitSystem); parcel.writeLong(mRecordingStart.getTime()); - parcel.writeLong(mRecordingEnd.getTime()); + parcel.writeLong(mRecordingStop.getTime()); } diff --git a/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java b/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java index a4c4abc..0e500c5 100644 --- a/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java +++ b/app/src/main/java/org/y20k/trackbook/helpers/StorageHelper.java @@ -120,6 +120,12 @@ public class StorageHelper implements TrackbookKeys { /* Loads given file into memory */ public Track loadTrack (File file) { + // check if given file was null + if (file == null) { + LogHelper.e(LOG_TAG, "Did not receive file object."); + return null; + } + try (BufferedReader br = new BufferedReader(new FileReader(file))) { LogHelper.v(LOG_TAG, "Loading track to external storage: " + file.toString()); @@ -154,8 +160,10 @@ public class StorageHelper implements TrackbookKeys { // get files and sort them File[] files = mFolder.listFiles(); files = sortFiles(files); - // return latest track - return files[0]; + if (files.length > 0 && files[0].getName().endsWith(mFileExtension)){ + // return latest track + return files[0]; + } } LogHelper.e(LOG_TAG, "Unable to get files from given folder."); return null; diff --git a/app/src/main/res/layout-land/fragment_main_track.xml b/app/src/main/res/layout-land/fragment_main_track.xml deleted file mode 100644 index 12910c7..0000000 --- a/app/src/main/res/layout-land/fragment_main_track.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/content_main_track_map.xml b/app/src/main/res/layout/content_main_track_map.xml deleted file mode 100644 index 4cd8262..0000000 --- a/app/src/main/res/layout/content_main_track_map.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/content_main_track_statistics.xml b/app/src/main/res/layout/content_main_track_statistics.xml deleted file mode 100644 index d7e9e0c..0000000 --- a/app/src/main/res/layout/content_main_track_statistics.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_track.xml b/app/src/main/res/layout/fragment_main_track.xml index 0a84097..e296a98 100644 --- a/app/src/main/res/layout/fragment_main_track.xml +++ b/app/src/main/res/layout/fragment_main_track.xml @@ -1,14 +1,164 @@ - + android:layout_height="match_parent" + tools:context=".MainActivityMapFragment"> - - - - + + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f0ff208..f5c1544 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,6 +49,17 @@ Source Accuracy + + Statistics + track data missing + Total distance: + Steps taken: + Recorded waypoints: + Total duration: + Recording started: + Recording stopped: + + Hello Trackbook App Icon