TRACKING APP: If the app is killed but services continue running, restarting app continues correctly upon restart

This commit is contained in:
Lukas Zielinski committed 2014-11-28 12:41:02 +01:00
1 parent 984fe40748
commit 6c255c678d
8 files changed
+79 -18

No files matched your search

@@ -24,4 +24,6 @@
<string name="preference_gps_fastest_fix_interval_ms_default">100</string>
<string name="preference_battery_is_charging">batteryIsCharging</string>
<string name="preference_tracking_timer_started">trackingTimerStarted</string>
<string name="preference_tracker_is_tracking">trackerIsTracking</string>
<string name="preference_tracker_is_tracking_event_id">trackerIsTrackingEventId</string>
</resources>
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="tracking_activity_event_id_parameter">trackingActivityEventId</string>
<string name="tracking_activity_started_by_start_activity_parameter">startedByStartActivity</string>
</resources>
@@ -107,7 +107,10 @@ public class TrackingService extends Service implements ConnectionCallbacks,
locationUpdateRequested = true;
ExLog.i(this, TAG, "Started Tracking");
showNotification();
//showNotification();
prefs.setTrackerIsTracking(true);
prefs.setTrackerIsTrackingEventId(eventId);
}
public void stopTracking() {
@@ -116,9 +119,14 @@ public class TrackingService extends Service implements ConnectionCallbacks,
}
locationClient.disconnect();
locationUpdateRequested = false;
if (scheduler != null) {
scheduler.shutdown();
}
prefs.setTrackerIsTracking(false);
prefs.setTrackerIsTrackingEventId(-1);
stopSelf();
ExLog.i(this, TAG, "Stopped Tracking");
}
@@ -205,19 +213,19 @@ public class TrackingService extends Service implements ConnectionCallbacks,
.show();
}
private void showNotification() {
Intent intent = new Intent(this, RegattaActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
CharSequence text = getText(R.string.tracker_started);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(getText(R.string.app_name))
.setContentText(text).setContentIntent(pi)
.setSmallIcon(R.drawable.icon).build();
notification.flags |= Notification.FLAG_NO_CLEAR;
startForeground(NOTIFICATION_ID, notification);
}
// private void showNotification() {
// Intent intent = new Intent(this, RegattaActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
// | Intent.FLAG_ACTIVITY_SINGLE_TOP);
// PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
// CharSequence text = getText(R.string.tracker_started);
// Notification notification = new NotificationCompat.Builder(this)
// .setContentTitle(getText(R.string.app_name))
// .setContentText(text).setContentIntent(pi)
// .setSmallIcon(R.drawable.icon).build();
// notification.flags |= Notification.FLAG_NO_CLEAR;
// startForeground(NOTIFICATION_ID, notification);
// }
public void registerGPSQualityListener(GPSQualityListener listener) {
gpsQualityListener = listener;
@@ -66,5 +66,19 @@ public class StartActivity extends BaseActivity {
this.startService(serviceIntent);
intent.setData(null);
if (prefs.getTrackerIsTracking())
{
int eventId = prefs.getTrackerIsTrackingEventId();
startTrackingActivity(eventId);
}
}
private void startTrackingActivity(int eventId) {
Intent intent = new Intent(this, TrackingActivity.class);
intent.putExtra(getString(R.string.tracking_activity_event_id_parameter), eventId);
intent.putExtra(getString(R.string.tracking_activity_started_by_start_activity_parameter), true);
startActivity(intent);
}
}
@@ -28,6 +28,7 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
TransmittingService transmittingService;
boolean transmittingServiceBound;
boolean startedByStartActivity;
private final static String TAG = TrackingActivity.class.getName();
@@ -39,7 +40,8 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
Intent intent = getIntent();
eventId = intent.getExtras().getInt(getString(R.string.tracking_activity_event_id_parameter));
startedByStartActivity = intent.getExtras().getBoolean(getString(R.string.tracking_activity_started_by_start_activity_parameter));
setContentView(R.layout.fragment_container);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
@@ -174,4 +176,13 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
trackingServiceBound = false;
}
};
/**
* the fragment can call this to know if tracking was running before, so it doesn't reset the timer.
* @return
*/
public boolean getStartedByStartActivity()
{
return startedByStartActivity;
}
}
@@ -122,7 +122,7 @@ public class RegattaFragment extends BaseFragment implements OnClickListener {
}
else
{
showTrackingActivity();
startTrackingActivity();
}
break;
case R.id.add_photo_button:
@@ -215,7 +215,7 @@ public class RegattaFragment extends BaseFragment implements OnClickListener {
super.onActivityResult(requestCode, resultCode, data);
}
private void showTrackingActivity() {
private void startTrackingActivity() {
RegattaActivity regattaActivity = (RegattaActivity) getActivity();
Intent intent = new Intent(getActivity(), TrackingActivity.class);
intent.putExtra(getString(R.string.tracking_activity_event_id_parameter), regattaActivity.getEventId());
@@ -26,6 +26,7 @@ import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.services.TrackingService;
import com.sap.sailing.android.tracking.app.services.TrackingService.GPSQuality;
import com.sap.sailing.android.tracking.app.services.TransmittingService.APIConnectivity;
import com.sap.sailing.android.tracking.app.ui.activities.TrackingActivity;
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
import com.sap.sailing.android.tracking.app.views.AutoResizeTextView;
import com.sap.sailing.android.tracking.app.views.SignalQualityIndicatorView;
@@ -49,7 +50,11 @@ public class TrackingFragment extends BaseFragment implements OnClickListener {
stopTracking.setOnClickListener(this);
prefs = new AppPreferences(getActivity());
prefs.setTrackingTimerStarted(System.currentTimeMillis());
if (((TrackingActivity)getActivity()).getStartedByStartActivity() == false)
{
prefs.setTrackingTimerStarted(System.currentTimeMillis());
}
return view;
}
@@ -113,4 +113,24 @@ public class AppPreferences {
{
return preferences.getLong(context.getString(R.string.preference_tracking_timer_started), 0);
}
public void setTrackerIsTracking(boolean isTracking)
{
preferences.edit().putBoolean(context.getString(R.string.preference_tracker_is_tracking), isTracking).commit();
}
public boolean getTrackerIsTracking()
{
return preferences.getBoolean(context.getString(R.string.preference_tracker_is_tracking), false);
}
public void setTrackerIsTrackingEventId(int eventId)
{
preferences.edit().putInt(context.getString(R.string.preference_tracker_is_tracking_event_id), eventId).commit();
}
public Integer getTrackerIsTrackingEventId()
{
return preferences.getInt(context.getString(R.string.preference_tracker_is_tracking_event_id), -1);
}
}