diff --git a/mobile/com.sap.sailing.android.shared/res/values/strings.xml b/mobile/com.sap.sailing.android.shared/res/values/strings.xml
index 36f425926e8..31727b149bd 100644
--- a/mobile/com.sap.sailing.android.shared/res/values/strings.xml
+++ b/mobile/com.sap.sailing.android.shared/res/values/strings.xml
@@ -59,4 +59,10 @@
EULA
Licence Information
+
+ (Request %1$d) %2$s\nHTTP response code: %3$d.\nHTTP response body: %4$s.
+ (Request %d) HTTP request executed.
+ (Request %d) HTTP request aborted.
+ (Request %d) HTTP request failed.
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpRequest.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpRequest.java
index 22d8255aa03..9829cce07e1 100644
--- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpRequest.java
+++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/HttpRequest.java
@@ -94,26 +94,27 @@ public abstract class HttpRequest {
try {
responseInputStream = doRequest(connection);
} catch (FileNotFoundException fnfe) {
+ if (HttpURLConnection.HTTP_UNAUTHORIZED == connection.getResponseCode()) {
+ throw new UnauthorizedException();
+ }
// 404 errors...
- throw new FileNotFoundException(String.format(
- "(Request %d) %s\nHTTP response code: %d.\nHTTP response body: %s.", this.hashCode(),
- fnfe.getMessage(), connection.getResponseCode(), connection.getResponseMessage()));
+ throw new FileNotFoundException(context.getString(R.string.http_request_exception, this.hashCode(), fnfe.getMessage(), connection.getResponseCode(), connection.getResponseMessage()));
}
validateHttpResponseCode(connection);
InputStream copiedResponseInputStream = readAndCopyResponse(connection, responseInputStream);
-
+
if (copiedResponseInputStream != null) {
- ExLog.i(context, TAG, String.format("(Request %d) HTTP request executed.", this.hashCode()));
+ ExLog.i(context, TAG, context.getString(R.string.http_request_executed, this.hashCode()));
} else {
- ExLog.i(context, TAG, String.format("(Request %d) HTTP request aborted.", this.hashCode()));
+ ExLog.i(context, TAG, context.getString(R.string.http_request_aborted, this.hashCode()));
}
-
+
connection.disconnect();
return copiedResponseInputStream;
} catch (IOException e) {
- ExLog.i(context, TAG, String.format("(Request %d) HTTP request failed.", this.hashCode()));
+ ExLog.i(context, TAG, context.getString(R.string.http_request_failed, this.hashCode()));
throw e;
} finally {
safeClose(responseInputStream);
diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/UnauthorizedException.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/UnauthorizedException.java
new file mode 100644
index 00000000000..aa44e7dc729
--- /dev/null
+++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/data/http/UnauthorizedException.java
@@ -0,0 +1,10 @@
+package com.sap.sailing.android.shared.data.http;
+
+import java.io.IOException;
+
+/**
+ * Used for HTTP-Request ResponseCode 401
+ */
+public class UnauthorizedException extends IOException {
+
+}
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml
index a5052b5b831..8506c5ad3be 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml
@@ -465,5 +465,6 @@
Select Race
Getting Started
http://www.sapsailing.com/gwt/Home.html?locale=de#SolutionsPlace:navigationTab=RaceCommitteeApp
+ Request fehlgeschlagen. User ist nicht autorisiert.
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
index f17e4036d2f..6c2e499a2a0 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
@@ -492,5 +492,6 @@
Select Race
Getting Started
http://www.sapsailing.com/gwt/Home.html?locale=en#SolutionsPlace:navigationTab=RaceCommitteeApp
+ Request failed. User is unauthorized.
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/LoadFailedDialog.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/LoadFailedDialog.java
index 38f069c20ac..790af887571 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/LoadFailedDialog.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/LoadFailedDialog.java
@@ -31,10 +31,7 @@ public class LoadFailedDialog extends FragmentAttachedDialogFragment {
@Override
protected AlertDialog.Builder createDialog(AlertDialog.Builder builder) {
return builder
- .setMessage(String.format(
- getString(R.string.generic_load_failure),
- getArguments().getString(ARGS_ERROR_MSG)))
- .setTitle(getString(R.string.loading_failure))
- .setIcon(R.drawable.ic_warning_grey_600_36dp);
+ .setMessage(getString(R.string.generic_load_failure, getArguments().getString(ARGS_ERROR_MSG)))
+ .setTitle(getString(R.string.loading_failure));
}
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/lists/NamedListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/lists/NamedListFragment.java
index a78cceb444a..084012b9d55 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/lists/NamedListFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/lists/NamedListFragment.java
@@ -11,12 +11,14 @@ import android.app.Activity;
import android.app.FragmentManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.os.Bundle;
+import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
+import com.sap.sailing.android.shared.data.http.UnauthorizedException;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
@@ -101,11 +103,19 @@ public abstract class NamedListFragment extends LoggableListFra
showProgressBar(false);
- String message = reason.getMessage();
- if (message == null) {
- message = reason.toString();
+ if (reason instanceof UnauthorizedException) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
+ builder.setTitle(R.string.loading_failure);
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.setMessage(getActivity().getString(R.string.user_unauthorized));
+ builder.show();
+ } else {
+ String message = reason.getMessage();
+ if (message == null) {
+ message = reason.toString();
+ }
+ showLoadFailedDialog(message);
}
- showLoadFailedDialog(message);
}
@Override