mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-23 12:33:53 +00:00
Refactored qr code error handling
This commit is contained in:
1 parent
84d51da9e0
commit
39568664f5
1 file changed
+89
-96
+89
-96
@@ -68,39 +68,36 @@ public class CheckinManager {
|
||||
}
|
||||
|
||||
private URLData extractRequestParametersFromUri(Uri uri, String scheme) {
|
||||
URLData urlData = null;
|
||||
URLData urlData = new URLData();
|
||||
urlData.uriStr = uri.toString();
|
||||
urlData.server = scheme + "://" + uri.getHost();
|
||||
urlData.port = (uri.getPort() == -1) ? 80 : uri.getPort();
|
||||
urlData.hostWithPort = urlData.server + ":" + urlData.port;
|
||||
|
||||
Exception exception = null;
|
||||
try {
|
||||
urlData = new URLData();
|
||||
urlData.uriStr = uri.toString();
|
||||
urlData.server = scheme + "://" + uri.getHost();
|
||||
urlData.port = (uri.getPort() == -1) ? 80 : uri.getPort();
|
||||
urlData.hostWithPort = urlData.server + ":" + urlData.port;
|
||||
String leaderboardNameFromQR = URLEncoder.encode(uri.getQueryParameter(DeviceMappingConstants.URL_LEADERBOARD_NAME), "UTF-8")
|
||||
.replace("+", "%20");
|
||||
urlData.competitorId = uri.getQueryParameter(DeviceMappingConstants.URL_COMPETITOR_ID_AS_STRING);
|
||||
urlData.checkinURLStr = urlData.hostWithPort + prefs.getServerCheckinPath().replace("{leaderboard-name}", leaderboardNameFromQR);
|
||||
urlData.eventId = uri.getQueryParameter(DeviceMappingConstants.URL_EVENT_ID);
|
||||
urlData.leaderboardName = leaderboardNameFromQR;
|
||||
|
||||
String leaderboardNameFromQR = "";
|
||||
try {
|
||||
leaderboardNameFromQR = URLEncoder.encode(uri.getQueryParameter(DeviceMappingConstants.URL_LEADERBOARD_NAME), "UTF-8")
|
||||
.replace("+", "%20");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
ExLog.e(activity, TAG, "Failed to encode leaderboard name: " + e.getMessage());
|
||||
} catch (NullPointerException e) {
|
||||
ExLog.e(activity, TAG, "Invalid Barcode (no leaderboard-name set): " + e.getMessage());
|
||||
Toast.makeText(activity, activity.getString(R.string.error_invalid_qr_code), Toast.LENGTH_LONG).show();
|
||||
prefs.setLastScannedQRCode(null);
|
||||
urlData = null;
|
||||
}
|
||||
if (urlData != null) {
|
||||
urlData.competitorId = uri.getQueryParameter(DeviceMappingConstants.URL_COMPETITOR_ID_AS_STRING);
|
||||
urlData.checkinURLStr = urlData.hostWithPort + prefs.getServerCheckinPath().replace("{leaderboard-name}", leaderboardNameFromQR);
|
||||
urlData.eventId = uri.getQueryParameter(DeviceMappingConstants.URL_EVENT_ID);
|
||||
urlData.leaderboardName = leaderboardNameFromQR;
|
||||
urlData.deviceUuid = new SmartphoneUUIDIdentifierImpl(UUID.fromString(UniqueDeviceUuid.getUniqueId(activity)));
|
||||
|
||||
urlData.deviceUuid = new SmartphoneUUIDIdentifierImpl(UUID.fromString(UniqueDeviceUuid.getUniqueId(activity)));
|
||||
|
||||
urlData.eventUrl = urlData.hostWithPort + prefs.getServerEventPath(urlData.eventId);
|
||||
urlData.leaderboardUrl = urlData.hostWithPort + prefs.getServerLeaderboardPath(urlData.leaderboardName);
|
||||
urlData.competitorUrl = urlData.hostWithPort + prefs.getServerCompetitorPath(urlData.competitorId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
urlData.eventUrl = urlData.hostWithPort + prefs.getServerEventPath(urlData.eventId);
|
||||
urlData.leaderboardUrl = urlData.hostWithPort + prefs.getServerLeaderboardPath(urlData.leaderboardName);
|
||||
urlData.competitorUrl = urlData.hostWithPort + prefs.getServerCompetitorPath(urlData.competitorId);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
ExLog.e(activity, TAG, "Failed to encode leaderboard name: " + e.getMessage());
|
||||
exception = e;
|
||||
} catch (NullPointerException e){
|
||||
ExLog.e(activity, TAG, "Invalid Barcode (no leaderboard-name set or missing parameter): " + e.getMessage());
|
||||
exception = e;
|
||||
}
|
||||
if (exception != null) {
|
||||
Toast.makeText(activity, activity.getString(R.string.error_invalid_qr_code), Toast.LENGTH_LONG).show();
|
||||
prefs.setLastScannedQRCode(null);
|
||||
urlData = null;
|
||||
}
|
||||
return urlData;
|
||||
@@ -112,7 +109,6 @@ public class CheckinManager {
|
||||
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
final String leaderboardName;
|
||||
|
||||
@@ -120,7 +116,6 @@ public class CheckinManager {
|
||||
leaderboardName = response.getString("name");
|
||||
} catch (JSONException e) {
|
||||
ExLog.e(activity, TAG, "Error getting data from call on URL: " + urlData.leaderboardUrl + ", Error: " + e.getMessage());
|
||||
activity.dismissProgressDialog();
|
||||
handleApiError();
|
||||
return;
|
||||
}
|
||||
@@ -131,6 +126,7 @@ public class CheckinManager {
|
||||
getEventFromServer(leaderboardName, getEventRequest, urlData);
|
||||
} catch (MalformedURLException e1) {
|
||||
ExLog.e(activity, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e1.getMessage());
|
||||
handleApiError();
|
||||
}
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
@@ -138,8 +134,7 @@ public class CheckinManager {
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
ExLog.e(activity, TAG, "Failed to get event from API: " + e.getMessage());
|
||||
activity.dismissProgressDialog();
|
||||
displayAPIErrorRecommendRetry();
|
||||
handleApiError();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -147,76 +142,77 @@ public class CheckinManager {
|
||||
private void getEventFromServer(final String leaderboardName, HttpGetRequest getEventRequest, final URLData urlData) {
|
||||
NetworkHelper.getInstance(activity).executeHttpJsonRequestAsnchronously(getEventRequest, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
|
||||
try {
|
||||
urlData.eventId = response.getString("id");
|
||||
urlData.eventName = response.getString("name");
|
||||
urlData.eventStartDateStr = response.getString("startDate");
|
||||
urlData.eventEndDateStr = response.getString("endDate");
|
||||
try {
|
||||
urlData.eventId = response.getString("id");
|
||||
urlData.eventName = response.getString("name");
|
||||
urlData.eventStartDateStr = response.getString("startDate");
|
||||
urlData.eventEndDateStr = response.getString("endDate");
|
||||
|
||||
JSONArray imageUrls = response.getJSONArray("imageURLs");
|
||||
JSONArray imageUrls = response.getJSONArray("imageURLs");
|
||||
|
||||
if (imageUrls.length() > 0) {
|
||||
urlData.eventFirstImageUrl = imageUrls.getString(0);
|
||||
} else {
|
||||
urlData.eventFirstImageUrl = null;
|
||||
}
|
||||
|
||||
} catch (JSONException e) {
|
||||
ExLog.e(activity, TAG, "Error getting data from call on URL: " + urlData.eventUrl + ", Error: " + e.getMessage());
|
||||
displayAPIErrorRecommendRetry();
|
||||
return;
|
||||
if (imageUrls.length() > 0) {
|
||||
urlData.eventFirstImageUrl = imageUrls.getString(0);
|
||||
} else {
|
||||
urlData.eventFirstImageUrl = null;
|
||||
}
|
||||
|
||||
HttpGetRequest getCompetitorRequest;
|
||||
try {
|
||||
getCompetitorRequest = new HttpGetRequest(new URL(urlData.competitorUrl), activity);
|
||||
getCompetitorFromServer(getCompetitorRequest, urlData, leaderboardName);
|
||||
|
||||
} catch (MalformedURLException e2) {
|
||||
ExLog.e(activity, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e2.getMessage());
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
ExLog.e(activity, TAG, "Error getting data from call on URL: " + urlData.eventUrl + ", Error: " + e.getMessage());
|
||||
handleApiError();
|
||||
return;
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
ExLog.e(activity, TAG, "Failed to get leaderboard from API: " + e.getMessage());
|
||||
HttpGetRequest getCompetitorRequest;
|
||||
try {
|
||||
getCompetitorRequest = new HttpGetRequest(new URL(urlData.competitorUrl), activity);
|
||||
getCompetitorFromServer(getCompetitorRequest, urlData, leaderboardName);
|
||||
|
||||
} catch (MalformedURLException e2) {
|
||||
ExLog.e(activity, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e2.getMessage());
|
||||
handleApiError();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
ExLog.e(activity, TAG, "Failed to get leaderboard from API: " + e.getMessage());
|
||||
handleApiError();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void getCompetitorFromServer(HttpGetRequest getCompetitorRequest, final URLData urlData, final String leaderboardName) {
|
||||
NetworkHelper.getInstance(activity)
|
||||
.executeHttpJsonRequestAsnchronously(getCompetitorRequest, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
activity.dismissProgressDialog();
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
activity.dismissProgressDialog();
|
||||
|
||||
try {
|
||||
urlData.competitorName = response.getString("name");
|
||||
urlData.competitorId = response.getString("id");
|
||||
urlData.competitorSailId = response.getString("sailID");
|
||||
urlData.competitorNationality = response.getString("nationality");
|
||||
urlData.competitorCountryCode = response.getString("countryCode");
|
||||
} catch (JSONException e) {
|
||||
ExLog.e(activity, TAG, "Error getting data from call on URL: " + urlData.competitorUrl + ", Error: " + e.getMessage());
|
||||
handleApiError();
|
||||
return;
|
||||
}
|
||||
saveCheckinDataAndNotifyListeners(urlData, leaderboardName);
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
ExLog.e(activity, TAG, "Failed to get competitor from API: " + e.getMessage());
|
||||
try {
|
||||
urlData.competitorName = response.getString("name");
|
||||
urlData.competitorId = response.getString("id");
|
||||
urlData.competitorSailId = response.getString("sailID");
|
||||
urlData.competitorNationality = response.getString("nationality");
|
||||
urlData.competitorCountryCode = response.getString("countryCode");
|
||||
} catch (JSONException e) {
|
||||
ExLog.e(activity, TAG, "Error getting data from call on URL: " + urlData.competitorUrl + ", Error: " + e.getMessage());
|
||||
handleApiError();
|
||||
return;
|
||||
}
|
||||
});
|
||||
saveCheckinDataAndNotifyListeners(urlData, leaderboardName);
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
ExLog.e(activity, TAG, "Failed to get competitor from API: " + e.getMessage());
|
||||
handleApiError();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void saveCheckinDataAndNotifyListeners(URLData urlData, String leaderboardName) {
|
||||
@@ -258,6 +254,13 @@ public class CheckinManager {
|
||||
return checkinData;
|
||||
}
|
||||
|
||||
private void handleApiError() {
|
||||
prefs.setLastScannedQRCode(null);
|
||||
activity.dismissProgressDialog();
|
||||
displayAPIErrorRecommendRetry();
|
||||
setCheckinData(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows a pop-up-dialog that informs the user than an API-call has failed and recommends a retry.
|
||||
*/
|
||||
@@ -278,16 +281,6 @@ public class CheckinManager {
|
||||
setCheckinData(null);
|
||||
}
|
||||
|
||||
private void handleApiError() {
|
||||
prefs.setLastScannedQRCode(null);
|
||||
activity.dismissProgressDialog();
|
||||
displayAPIErrorRecommendRetry();
|
||||
setCheckinData(null);
|
||||
}
|
||||
|
||||
public interface CheckinDataHandler {
|
||||
}
|
||||
|
||||
private class URLData {
|
||||
public String uriStr;
|
||||
public String server;
|
||||
|
||||
Reference in new issue
Block a user