service can resume a recording (see #33)

master
y20k 2018-03-21 15:18:40 +01:00
parent 764673edc8
commit 39a4cbbe41
6 changed files with 44 additions and 31 deletions

View File

@ -90,7 +90,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
private CardView mFloatingActionButtonSubSaveLabel; private CardView mFloatingActionButtonSubSaveLabel;
private CardView mFloatingActionButtonSubClearLabel; private CardView mFloatingActionButtonSubClearLabel;
private CardView mFloatingActionButtonSubResumeLabel; private CardView mFloatingActionButtonSubResumeLabel;
private BroadcastReceiver mTrackingStoppedReceiver; private BroadcastReceiver mTrackingChangedReceiver;
private int mFloatingActionButtonState; private int mFloatingActionButtonState;
private int mSelectedTab; private int mSelectedTab;
@ -140,10 +140,10 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
// register broadcast receiver for stopped tracking // register broadcast receiver for changed tracking state
mTrackingStoppedReceiver = createTrackingStoppedReceiver(); mTrackingChangedReceiver = createTrackingChangedReceiver();
IntentFilter trackingStoppedIntentFilter = new IntentFilter(ACTION_TRACKING_STOPPED); IntentFilter trackingStoppedIntentFilter = new IntentFilter(ACTION_TRACKING_STATE_CHANGED);
LocalBroadcastManager.getInstance(this).registerReceiver(mTrackingStoppedReceiver, trackingStoppedIntentFilter); LocalBroadcastManager.getInstance(this).registerReceiver(mTrackingChangedReceiver, trackingStoppedIntentFilter);
} }
@ -179,7 +179,7 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
mSelectedTab = FRAGMENT_ID_MAP; mSelectedTab = FRAGMENT_ID_MAP;
// disable broadcast receiver // disable broadcast receiver
LocalBroadcastManager.getInstance(this).unregisterReceiver(mTrackingStoppedReceiver); LocalBroadcastManager.getInstance(this).unregisterReceiver(mTrackingChangedReceiver);
} }
@ -258,12 +258,6 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
// dismiss notification // dismiss notification
startTrackerService(ACTION_DISMISS, null); startTrackerService(ACTION_DISMISS, null);
// Intent intent = new Intent(this, TrackerService.class);
// intent.setAction(ACTION_DISMISS);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// startForegroundService(intent);
// }
// hide Floating Action Button sub menu // hide Floating Action Button sub menu
showFloatingActionButtonMenu(false); showFloatingActionButtonMenu(false);
@ -336,17 +330,15 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
/* Handles tap on the button "resume" */ /* Handles tap on the button "resume" */
private void handleResumeButtonClick(View view) { private void handleResumeButtonClick(View view) {
// change state
mTrackerServiceRunning = true;
mFloatingActionButtonState = FAB_STATE_RECORDING;
setFloatingActionButtonState();
showFloatingActionButtonMenu(false);
// show snackbar // show snackbar
Snackbar.make(view, R.string.snackbar_message_tracking_resumed, Snackbar.LENGTH_SHORT).setAction("Action", null).show(); Snackbar.make(view, R.string.snackbar_message_tracking_resumed, Snackbar.LENGTH_SHORT).setAction("Action", null).show();
// resume tracking // resume tracking
startTrackerService(ACTION_RESUME, null); startTrackerService(ACTION_RESUME, null);
// hide sub menu
showFloatingActionButtonMenu(false);
} }
@ -695,18 +687,23 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
/* Creates receiver for stopped tracking */ /* Creates receiver for stopped tracking */
private BroadcastReceiver createTrackingStoppedReceiver() { private BroadcastReceiver createTrackingChangedReceiver() {
return new BroadcastReceiver() { return new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
// change state // change state
mTrackerServiceRunning = false; mTrackerServiceRunning = intent.getBooleanExtra(EXTRA_TRACKING_STATE, false);
mFloatingActionButtonState = FAB_STATE_SAVE; if (mTrackerServiceRunning) {
mFloatingActionButtonState = FAB_STATE_RECORDING;
} else {
mFloatingActionButtonState = FAB_STATE_SAVE;
}
setFloatingActionButtonState(); setFloatingActionButtonState();
// pass tracking state to MainActivityMapFragment // todo check -> may produce NullPointerException // pass tracking state to MainActivityMapFragment // todo check -> may produce NullPointerException
MainActivityMapFragment mainActivityMapFragment = (MainActivityMapFragment) mSectionsPagerAdapter.getFragment(FRAGMENT_ID_MAP); MainActivityMapFragment mainActivityMapFragment = (MainActivityMapFragment) mSectionsPagerAdapter.getFragment(FRAGMENT_ID_MAP);
mainActivityMapFragment.setTrackingState(false); mainActivityMapFragment.setTrackingState(mTrackerServiceRunning);
} }
}; };
} }

View File

@ -679,7 +679,7 @@ public class MainActivityMapFragment extends Fragment implements TrackbookKeys {
} }
// delete temp file // delete temp file
mStorageHelper.deleteTempFile(); // mStorageHelper.deleteTempFile(); // todo check if necessary
} }
} }
/** /**

View File

@ -124,7 +124,7 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven
startTracking(intent, true); startTracking(intent, true);
} }
// ACTION START // ACTION RESUME
else if (intent.getAction().equals(ACTION_RESUME) && mLocationSystemSetting) { else if (intent.getAction().equals(ACTION_RESUME) && mLocationSystemSetting) {
startTracking(intent, false); startTracking(intent, false);
} }
@ -207,7 +207,7 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven
private void startTracking(@Nullable Intent intent, boolean createNewTrack) { private void startTracking(@Nullable Intent intent, boolean createNewTrack) {
LogHelper.v(LOG_TAG, "Service received command: START"); LogHelper.v(LOG_TAG, "Service received command: START");
// create a new track -- if necessary // create a new track - if requested
if (createNewTrack) { if (createNewTrack) {
mTrack = new Track(); mTrack = new Track();
} else { } else {
@ -215,8 +215,13 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven
if (storageHelper.tempFileExists()) { if (storageHelper.tempFileExists()) {
// load temp track file // load temp track file
mTrack = storageHelper.loadTrack(FILE_TEMP_TRACK); mTrack = storageHelper.loadTrack(FILE_TEMP_TRACK);
// try to mark last waypoint as stopover
int lastWayPoint = mTrack.getWayPoints().size() - 1;
if (lastWayPoint >= 0) {
mTrack.getWayPoints().get(lastWayPoint).setIsStopOver(true);
}
} else { } else {
// fallback, if temfile did not exist // fallback, if tempfile did not exist
LogHelper.e(LOG_TAG, "Unable to find previously saved track temp file."); LogHelper.e(LOG_TAG, "Unable to find previously saved track temp file.");
mTrack = new Track(); mTrack = new Track();
} }
@ -423,6 +428,9 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven
} }
LocationHelper.registerLocationListeners(mLocationManager, mGPSListener, mNetworkListener); LocationHelper.registerLocationListeners(mLocationManager, mGPSListener, mNetworkListener);
saveTrackerServiceState(mTrackerServiceRunning, FAB_STATE_RECORDING); saveTrackerServiceState(mTrackerServiceRunning, FAB_STATE_RECORDING);
// notify MainActivity
broadcastTrackingStateChange();
} }
@ -433,11 +441,18 @@ public class TrackerService extends Service implements TrackbookKeys, SensorEven
mTrackerServiceRunning = false; mTrackerServiceRunning = false;
saveTrackerServiceState(mTrackerServiceRunning, FAB_STATE_SAVE); saveTrackerServiceState(mTrackerServiceRunning, FAB_STATE_SAVE);
// notify MainActivityMapFragment // notify MainActivity
broadcastTrackingStateChange();
}
/* Sends a broadcast with tracking changed */
private void broadcastTrackingStateChange() {
Intent i = new Intent(); Intent i = new Intent();
i.setAction(ACTION_TRACKING_STOPPED); i.setAction(ACTION_TRACKING_STATE_CHANGED);
i.putExtra(EXTRA_TRACK, mTrack); i.putExtra(EXTRA_TRACK, mTrack);
i.putExtra(EXTRA_LAST_LOCATION, mCurrentBestLocation); i.putExtra(EXTRA_LAST_LOCATION, mCurrentBestLocation);
i.putExtra(EXTRA_TRACKING_STATE, mTrackerServiceRunning);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(i);
} }

View File

@ -27,7 +27,7 @@ import org.y20k.trackbook.BuildConfig;
*/ */
public final class LogHelper { public final class LogHelper {
private final static boolean mTesting = false; private final static boolean mTesting = true;
public static void d(final String tag, String message) { public static void d(final String tag, String message) {
// include logging only in debug versions // include logging only in debug versions

View File

@ -63,7 +63,7 @@ public class StorageHelper implements TrackbookKeys {
mContext = context; mContext = context;
// get "tracks" folder // get "tracks" folder
mFolder = mContext.getExternalFilesDir(TRACKS_DIRECTORY_NAME); mFolder = mContext.getExternalFilesDir(TRACKS_DIRECTORY_NAME);
// mFolder = getTracksDirectory(); // mFolder = getTracksDirectory();
// create "tracks" folder if necessary // create "tracks" folder if necessary
@ -73,7 +73,8 @@ public class StorageHelper implements TrackbookKeys {
} }
// create temp file object // todo check -> may produce NullPointerException // create temp file object // todo check -> may produce NullPointerException
mTempFile = new File(mFolder.toString() + "/" + FILE_NAME_TEMP + FILE_TYPE_TRACKBOOK_EXTENSION); String tempFilePathName = mFolder.toString() + "/" + FILE_NAME_TEMP + FILE_TYPE_TRACKBOOK_EXTENSION;
mTempFile = new File(tempFilePathName);
// delete old track - exclude temp file // delete old track - exclude temp file
deleteOldTracks(false); deleteOldTracks(false);

View File

@ -33,7 +33,7 @@ public interface TrackbookKeys {
String ACTION_SHOW_MAP = "SHOW_MAP"; String ACTION_SHOW_MAP = "SHOW_MAP";
String ACTION_TRACK_UPDATED = "TRACK_UPDATED"; String ACTION_TRACK_UPDATED = "TRACK_UPDATED";
String ACTION_TRACK_REQUEST = "TRACK_REQUEST"; String ACTION_TRACK_REQUEST = "TRACK_REQUEST";
String ACTION_TRACKING_STOPPED = "TRACKING_STOPPED"; String ACTION_TRACKING_STATE_CHANGED = "TRACKING_STATE_CHANGED";
String ACTION_TRACK_SAVE = "TRACK_SAVE"; String ACTION_TRACK_SAVE = "TRACK_SAVE";
/* EXTRAS */ /* EXTRAS */