diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSendingService.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSendingService.java index b81fb70862a..ce6630de6b8 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSendingService.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/services/sending/MessageSendingService.java @@ -72,6 +72,8 @@ public class MessageSendingService extends Service implements MessageSendingList private Set suppressedMessageIds = new HashSet(); + private APIConnectivityListener apiConnectivityListener; + public void registerMessageForSuppression(Serializable messageId) { suppressedMessageIds.add(messageId); } @@ -273,18 +275,24 @@ public class MessageSendingService extends Service implements MessageSendingList @Override public void onMessageSent(Intent intent, boolean success, InputStream inputStream) { + ExLog.i(this, "MS", "on message sent"); int resendMillis = PrefUtils.getInt(this, R.string.preference_messageResendIntervalMillis_key, R.integer.preference_messageResendIntervalMillis_default); if (!success) { + ExLog.i(this, "MS", "success"); + reportApiConnectivity(APIConnectivity.transmissionError); ExLog.w(this, TAG, "Error while posting intent to server. Will persist intent..."); persistenceManager.persistIntent(intent); if (!isHandlerSet) { SendDelayedMessagesCaller delayedCaller = new SendDelayedMessagesCaller(this); handler.postDelayed(delayedCaller, resendMillis); // after 30 sec, try the sending again isHandlerSet = true; - } + } + reportUnsentGPSFixesCount(); serviceLogger.onMessageSentFailed(); } else { + ExLog.i(this, "MS", "!success"); + reportApiConnectivity(APIConnectivity.transmissionSuccess); ExLog.i(this, TAG, "Message successfully sent."); if (persistenceManager.areIntentsDelayed()) { persistenceManager.removeIntent(intent); @@ -306,6 +314,8 @@ public class MessageSendingService extends Service implements MessageSendingList String raceId = intent.getStringExtra(CALLBACK_PAYLOAD); callback.processResponse(this, inputStream, raceId); } + ExLog.i(this, "MS", "report"); + reportUnsentGPSFixesCount() ; } } @@ -339,4 +349,56 @@ public class MessageSendingService extends Service implements MessageSendingList URLEncoder.encode(raceName), URLEncoder.encode(fleetName), uuid); return url; } + + public void registerAPIConnectivityListener(APIConnectivityListener listener) { + apiConnectivityListener = listener; + } + + public void unregisterAPIConnectivityListener() { + apiConnectivityListener = null; + } + + public enum APIConnectivity { + notReachable(0), + transmissionSuccess(1), + transmissionError(2), + noAttempt(4); + + private final int apiConnectivity; + + APIConnectivity(int connectivity) { + this.apiConnectivity = connectivity; + } + + public int toInt() { + return this.apiConnectivity; + } + } + + public interface APIConnectivityListener { + public void apiConnectivityUpdated(APIConnectivity apiConnectivity); + public void setUnsentGPSFixesCount(int count); + } + + /** + * Report API connectivity to listening activity + * + * @param apiConnectivity + */ + private void reportApiConnectivity(APIConnectivity apiConnectivity) { + if (apiConnectivityListener != null) { + apiConnectivityListener.apiConnectivityUpdated(apiConnectivity); + } + } + + /** + * Report the number of currently unsent GPS-fixes + * + * @param unsentGPSFixesCount + */ + private void reportUnsentGPSFixesCount() { + if (apiConnectivityListener != null) { + apiConnectivityListener.setUnsentGPSFixesCount(getDelayedIntentsCount()); + } + } } diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java index 30755c33499..ccb87c01a5a 100644 --- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java +++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TrackingService.java @@ -185,6 +185,7 @@ public class TrackingService extends Service implements ConnectionCallbacks, String postUrlStr = event.server + prefs.getServerGpsFixesPostPath(); ExLog.e(this, "DEBUG", "calling start service"); + startService(MessageSendingService.createMessageIntent(this, postUrlStr, null, UUID.randomUUID(), json.toString(), null)); diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java index ce96b1106a6..ba45d9df6a7 100644 --- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java +++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/services/TransmittingService.java @@ -257,7 +257,7 @@ public class TransmittingService extends Service { private void sendFixesToAPI(List failedHosts) { ExLog.e(this, "REFACTORING", "Not sending any fixes here anymore."); - if (true) { + if (2 == 1) { return; } @@ -570,7 +570,6 @@ public class TransmittingService extends Service { public interface APIConnectivityListener { public void apiConnectivityUpdated(APIConnectivity apiConnectivity); - public void setUnsentGPSFixesCount(int count); } diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java index c4422c08ed4..835e9989281 100644 --- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java +++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/TrackingActivity.java @@ -18,6 +18,10 @@ import android.support.v7.widget.Toolbar; import android.widget.TextView; import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.services.sending.MessageSendingService; +import com.sap.sailing.android.shared.services.sending.MessageSendingService.APIConnectivity; +import com.sap.sailing.android.shared.services.sending.MessageSendingService.APIConnectivityListener; +import com.sap.sailing.android.shared.services.sending.MessageSendingService.MessageSendingBinder; import com.sap.sailing.android.tracking.app.BuildConfig; import com.sap.sailing.android.tracking.app.R; import com.sap.sailing.android.tracking.app.sensors.CompassManager; @@ -26,10 +30,6 @@ 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.TrackingService.GPSQualityListener; import com.sap.sailing.android.tracking.app.services.TrackingService.TrackingBinder; -import com.sap.sailing.android.tracking.app.services.TransmittingService; -import com.sap.sailing.android.tracking.app.services.TransmittingService.APIConnectivity; -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.SpeedFragment; import com.sap.sailing.android.tracking.app.ui.fragments.StopTrackingButtonFragment; @@ -46,8 +46,8 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener TrackingService trackingService; boolean trackingServiceBound; - TransmittingService transmittingService; - boolean transmittingServiceBound; + MessageSendingService messageSendingService; + boolean messageSendingServiceBound; private final static String TAG = TrackingActivity.class.getName(); private final static String SIS_TRACKING_FRAGMENT = "savedInstanceTrackingFragment"; @@ -61,7 +61,7 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener private String checkinDigest; - private TrackingFragment trackingFragment; + private TrackingFragment trackingFragment; private TimerRunnable timer; private int lastViewPagerItem; @@ -168,9 +168,8 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener @Override public void onStart() { super.onStart(); - Intent transmittingServiceIntent = new Intent(this, TransmittingService.class); - bindService(transmittingServiceIntent, transmittingServiceConnection, - Context.BIND_AUTO_CREATE); + Intent messageSendingServiceIntent = new Intent(this, MessageSendingService.class); + bindService(messageSendingServiceIntent, messageSendingServiceConnection, Context.BIND_AUTO_CREATE); Intent trackingServiceIntent = new Intent(this, TrackingService.class); bindService(trackingServiceIntent, trackingServiceConnection, Context.BIND_AUTO_CREATE); } @@ -188,11 +187,11 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener } } - if (transmittingServiceBound) { - transmittingService.unregisterAPIConnectivityListener(); - unbindService(transmittingServiceConnection); + if (messageSendingServiceBound) { + messageSendingService.unregisterAPIConnectivityListener(); + unbindService(messageSendingServiceConnection); - transmittingServiceBound = false; + messageSendingServiceBound = false; if (BuildConfig.DEBUG) { ExLog.i(this, TAG, "Unbound transmitting Service"); @@ -276,24 +275,24 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener } /** Defines callbacks for service binding, passed to bindService() */ - private ServiceConnection transmittingServiceConnection = new ServiceConnection() { + private ServiceConnection messageSendingServiceConnection = 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); + MessageSendingBinder binder = (MessageSendingBinder) service; + messageSendingService = binder.getService(); + messageSendingServiceBound = true; + messageSendingService.registerAPIConnectivityListener(TrackingActivity.this); if (BuildConfig.DEBUG) { - ExLog.i(TrackingActivity.this, TAG, "connected to transmitting service"); + ExLog.i(TrackingActivity.this, TAG, "connected to message sending service"); } } @Override public void onServiceDisconnected(ComponentName arg0) { - transmittingServiceBound = false; + messageSendingServiceBound = false; } }; diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/TrackingFragment.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/TrackingFragment.java index 8c27b5d211f..77e33277588 100644 --- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/TrackingFragment.java +++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/TrackingFragment.java @@ -15,11 +15,11 @@ import android.view.ViewGroup; import android.widget.TextView; import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.services.sending.MessageSendingService.APIConnectivity; import com.sap.sailing.android.tracking.app.BuildConfig; import com.sap.sailing.android.tracking.app.R; import com.sap.sailing.android.tracking.app.customviews.SignalQualityIndicatorView; 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; @@ -143,7 +143,7 @@ public class TrackingFragment extends BaseFragment { TextView textView = (TextView) getActivity().findViewById( R.id.mode); - if (apiConnectivity == APIConnectivity.reachableTransmissionSuccess) { + if (apiConnectivity == APIConnectivity.transmissionSuccess) { if (prefs.getEnergySavingEnabledByUser()) { textView.setText(getString(R.string.tracking_mode_battery_saving)); textView.setTextColor(Color @@ -158,7 +158,7 @@ public class TrackingFragment extends BaseFragment { textView.setText(getString(R.string.tracking_mode_offline)); textView.setTextColor(Color .parseColor(getString(R.color.sap_green))); - } else if (apiConnectivity == APIConnectivity.reachableTransmissionError) { + } else if (apiConnectivity == APIConnectivity.transmissionError) { textView.setText(getString(R.string.tracking_mode_api_error)); textView.setTextColor(Color .parseColor(getString(R.color.sap_red)));