diff --git a/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index 1ee3058ea85..b5d9a432e1d 100644 --- a/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -1,25 +1,5 @@ package com.sap.sailing.android.buoy.positioning.app.ui.fragments; -import com.google.android.gms.maps.CameraUpdateFactory; -import com.google.android.gms.maps.GoogleMap; -import com.google.android.gms.maps.OnMapReadyCallback; -import com.google.android.gms.maps.SupportMapFragment; -import com.google.android.gms.maps.model.LatLng; -import com.google.android.gms.maps.model.MarkerOptions; -import com.sap.sailing.android.buoy.positioning.app.R; -import com.sap.sailing.android.buoy.positioning.app.ui.activities.PositioningActivity; -import com.sap.sailing.android.buoy.positioning.app.util.PingHelper; -import com.sap.sailing.android.buoy.positioning.app.util.PingServerReplyCallback; -import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo; -import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo; -import com.sap.sailing.android.shared.data.LeaderboardInfo; -import com.sap.sailing.android.shared.logging.ExLog; -import com.sap.sailing.android.shared.ui.customviews.GPSQuality; -import com.sap.sailing.android.shared.ui.customviews.SignalQualityIndicatorView; -import com.sap.sailing.android.shared.ui.fragments.BaseFragment; -import com.sap.sailing.android.shared.util.LocationHelper; -import com.sap.sailing.android.shared.util.ViewHelper; - import android.Manifest; import android.content.BroadcastReceiver; import android.content.Context; @@ -28,6 +8,7 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationManager; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; @@ -41,6 +22,30 @@ import android.widget.Button; import android.widget.TextView; import android.widget.Toast; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.MarkerOptions; +import com.sap.sailing.android.buoy.positioning.app.R; +import com.sap.sailing.android.buoy.positioning.app.ui.activities.PositioningActivity; +import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper; +import com.sap.sailing.android.buoy.positioning.app.util.PingHelper; +import com.sap.sailing.android.buoy.positioning.app.util.PingServerReplyCallback; +import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo; +import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo; +import com.sap.sailing.android.shared.data.CheckinUrlInfo; +import com.sap.sailing.android.shared.data.LeaderboardInfo; +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.ui.customviews.GPSQuality; +import com.sap.sailing.android.shared.ui.customviews.SignalQualityIndicatorView; +import com.sap.sailing.android.shared.ui.fragments.BaseFragment; +import com.sap.sailing.android.shared.util.LocationHelper; +import com.sap.sailing.android.shared.util.ViewHelper; + +import static com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants.URL_SECRET; + public class BuoyFragment extends BaseFragment implements android.location.LocationListener, OnMapReadyCallback { private static final String TAG = BuoyFragment.class.getName(); @@ -309,9 +314,11 @@ public class BuoyFragment extends BaseFragment implements android.location.Locat if (lastKnownLocation != null) { MarkInfo mark = positioningActivity.getMarkInfo(); LeaderboardInfo leaderBoard = positioningActivity.getLeaderBoard(); + CheckinUrlInfo checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(requireContext(), leaderBoard.checkinDigest); + String secret = Uri.parse(checkinUrl.urlString).getQueryParameter(URL_SECRET); helper.storePingInDatabase(getActivity(), lastKnownLocation, mark); helper.sendPingToServer(getActivity(), lastKnownLocation, leaderBoard, mark, - PingServerReplyCallback.class); + secret, PingServerReplyCallback.class); ((PositioningActivity) getActivity()).updatePing(); savedPosition = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); pingListener.updatePing(); diff --git a/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java b/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java index 2831fbc5bf7..1598b15b43b 100644 --- a/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java +++ b/mobile/com.sap.sailing.android.buoy.positioning.app/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java @@ -1,9 +1,8 @@ package com.sap.sailing.android.buoy.positioning.app.util; -import java.util.UUID; - -import org.json.JSONException; -import org.json.JSONObject; +import android.content.Context; +import android.location.Location; +import android.net.Uri; import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper.GeneralDatabaseHelperException; import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo; @@ -15,22 +14,34 @@ import com.sap.sailing.android.shared.services.sending.ServerReplyCallback; import com.sap.sailing.domain.common.tracking.impl.FlatSmartphoneUuidAndGPSFixMovingJsonSerializer; import com.sap.sailing.domain.common.tracking.impl.GPSFixImpl; -import android.content.Context; -import android.location.Location; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.UUID; + +import static com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants.URL_SECRET; public class PingHelper { private static String TAG = PingHelper.class.getName(); public void sendPingToServer(final Context context, Location location, LeaderboardInfo leaderBoard, MarkInfo mark, - Class callback) { + String secret, Class callback) { AppPreferences prefs = new AppPreferences(context); try { JSONObject fixJson = new JSONObject(); fixJson.put(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.TIME_MILLIS, location.getTime()); fixJson.put(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.LON_DEG, location.getLongitude()); fixJson.put(FlatSmartphoneUuidAndGPSFixMovingJsonSerializer.LAT_DEG, location.getLatitude()); - String postUrlStr = leaderBoard.serverUrl - + prefs.getServerMarkPingPath(leaderBoard.name, mark.getId().toString()); + + Uri uri = Uri.parse(leaderBoard.serverUrl); + Uri.Builder builder = new Uri.Builder() + .scheme(uri.getScheme()) + .authority(uri.getAuthority()) + .appendEncodedPath(prefs.getServerMarkPingPath(leaderBoard.name, mark.getId().toString())); + if (secret != null) { + builder.appendQueryParameter(URL_SECRET, secret); + } + String postUrlStr = builder.build().toString(); context.startService(MessageSendingService.createMessageIntent(context, postUrlStr, null, UUID.randomUUID(), fixJson.toString(), callback));