From 4ec76ca88dce29e09671b3cd322ce864a6867995 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 17 Aug 2015 23:42:07 +0300 Subject: improve error reporting a bit --- .../src/main/java/org/fox/ttrss/ApiRequest.java | 87 ++++++++++++---------- .../java/org/fox/ttrss/FeedCategoriesFragment.java | 8 +- .../src/main/java/org/fox/ttrss/FeedsFragment.java | 8 +- .../main/java/org/fox/ttrss/HeadlinesFragment.java | 8 +- .../main/java/org/fox/ttrss/OnlineActivity.java | 27 ++++++- .../java/org/fox/ttrss/util/HeadlinesRequest.java | 7 +- 6 files changed, 99 insertions(+), 46 deletions(-) (limited to 'org.fox.ttrss/src') diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java index e603b989..03a2769f 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiRequest.java @@ -51,20 +51,21 @@ public class ApiRequest extends AsyncTask, Integer, JsonE protected boolean m_canUseProgress = false; protected Context m_context; private SharedPreferences m_prefs; - + protected String m_lastErrorMessage; + protected ApiError m_lastError; public ApiRequest(Context context) { m_context = context; m_prefs = PreferenceManager.getDefaultSharedPreferences(m_context); - + m_api = m_prefs.getString("ttrss_url", "").trim(); m_transportDebugging = m_prefs.getBoolean("transport_debugging", false); m_lastError = ApiError.NO_ERROR; - + } - + @SuppressLint("NewApi") @SuppressWarnings("unchecked") public void execute(HashMap map) { @@ -73,7 +74,7 @@ public class ApiRequest extends AsyncTask, Integer, JsonE else super.execute(map); } - + public int getErrorMessage() { switch (m_lastError) { case NO_ERROR: @@ -117,7 +118,7 @@ public class ApiRequest extends AsyncTask, Integer, JsonE return R.string.error_unknown; } } - + @Override protected JsonElement doInBackground(HashMap... params) { @@ -125,12 +126,12 @@ public class ApiRequest extends AsyncTask, Integer, JsonE m_lastError = ApiError.NETWORK_UNAVAILABLE; return null; } - + Gson gson = new Gson(); - + String requestStr = gson.toJson(new HashMap(params[0])); byte[] postData = null; - + try { postData = requestStr.getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { @@ -138,50 +139,50 @@ public class ApiRequest extends AsyncTask, Integer, JsonE e.printStackTrace(); return null; } - + /* disableConnectionReuseIfNecessary(); */ - + if (m_transportDebugging) Log.d(TAG, ">>> (" + requestStr + ") " + m_api); - + /* ApiRequest.trustAllHosts(m_prefs.getBoolean("ssl_trust_any", false), - m_prefs.getBoolean("ssl_trust_any_host", false)); */ - + m_prefs.getBoolean("ssl_trust_any_host", false)); */ + URL url; - + try { - url = new URL(m_api + "/api/"); + url = new URL(m_api + "/api/"); } catch (Exception e) { m_lastError = ApiError.INVALID_URL; e.printStackTrace(); return null; } - - try { + + try { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - + String httpLogin = m_prefs.getString("http_login", "").trim(); String httpPassword = m_prefs.getString("http_password", "").trim(); - + if (httpLogin.length() > 0) { if (m_transportDebugging) Log.d(TAG, "Using HTTP Basic authentication."); - - conn.setRequestProperty("Authorization", "Basic " + - Base64.encodeToString((httpLogin + ":" + httpPassword).getBytes("UTF-8"), Base64.NO_WRAP)); + + conn.setRequestProperty("Authorization", "Basic " + + Base64.encodeToString((httpLogin + ":" + httpPassword).getBytes("UTF-8"), Base64.NO_WRAP)); } - - conn.setDoInput(true); - conn.setDoOutput(true); - conn.setUseCaches(false); - conn.setRequestMethod("POST"); + + conn.setDoInput(true); + conn.setDoOutput(true); + conn.setUseCaches(false); + conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Length", Integer.toString(postData.length)); OutputStream out = conn.getOutputStream(); out.write(postData); out.close(); - + m_responseCode = conn.getResponseCode(); m_responseMessage = conn.getResponseMessage(); - + switch (m_responseCode) { case HttpURLConnection.HTTP_OK: StringBuffer response = new StringBuffer(); @@ -193,31 +194,31 @@ public class ApiRequest extends AsyncTask, Integer, JsonE int contentLength = conn.getHeaderFieldInt("Api-Content-Length", -1); m_canUseProgress = (contentLength != -1); - + while ((read = in.read(buf)) >= 0) { response.append(buf, 0, read); total += read; publishProgress(Integer.valueOf(total), Integer.valueOf(contentLength)); } - + if (m_transportDebugging) Log.d(TAG, "<<< " + response); - + JsonParser parser = new JsonParser(); - + JsonElement result = parser.parse(response.toString()); JsonObject resultObj = result.getAsJsonObject(); - + m_apiStatusCode = resultObj.get("status").getAsInt(); - + conn.disconnect(); - + switch (m_apiStatusCode) { case API_STATUS_OK: return result.getAsJsonObject().get("content"); case API_STATUS_ERR: JsonObject contentObj = resultObj.get("content").getAsJsonObject(); String error = contentObj.get("error").getAsString(); - + if (error.equals("LOGIN_ERROR")) { m_lastError = ApiError.LOGIN_FAILED; } else if (error.equals("API_DISABLED")) { @@ -231,7 +232,7 @@ public class ApiRequest extends AsyncTask, Integer, JsonE } else { Log.d(TAG, "Unknown API error: " + error); m_lastError = ApiError.API_UNKNOWN; - } + } } return null; @@ -252,27 +253,31 @@ public class ApiRequest extends AsyncTask, Integer, JsonE m_lastError = ApiError.HTTP_OTHER_ERROR; break; } - + conn.disconnect(); return null; } catch (javax.net.ssl.SSLPeerUnverifiedException e) { m_lastError = ApiError.SSL_REJECTED; + m_lastErrorMessage = e.getMessage(); e.printStackTrace(); } catch (IOException e) { m_lastError = ApiError.IO_ERROR; + m_lastErrorMessage = e.getMessage(); if (e.getMessage() != null) { if (e.getMessage().matches("Hostname [^ ]+ was not verified")) { m_lastError = ApiError.SSL_HOSTNAME_REJECTED; } } - + e.printStackTrace(); } catch (com.google.gson.JsonSyntaxException e) { m_lastError = ApiError.PARSE_ERROR; + m_lastErrorMessage = e.getMessage(); e.printStackTrace(); } catch (Exception e) { m_lastError = ApiError.OTHER_ERROR; + m_lastErrorMessage = e.getMessage(); e.printStackTrace(); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java index 1ff6aa1d..02fd7985 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedCategoriesFragment.java @@ -381,7 +381,13 @@ public class FeedCategoriesFragment extends BaseFeedlistFragment implements OnIt if (m_lastError == ApiError.LOGIN_FAILED) { m_activity.login(true); } else { - m_activity.toast(getErrorMessage()); + + if (m_lastErrorMessage != null) { + m_activity.toast(getString(getErrorMessage()) + "\n" + m_lastErrorMessage); + } else { + m_activity.toast(getErrorMessage()); + } + //m_activity.setLoadingStatus(getErrorMessage(), false); } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java index 8bd241e6..41c0f69c 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/FeedsFragment.java @@ -570,7 +570,13 @@ public class FeedsFragment extends BaseFeedlistFragment implements OnItemClickLi if (m_lastError == ApiError.LOGIN_FAILED) { m_activity.login(true); } else { - m_activity.toast(getErrorMessage()); + + if (m_lastErrorMessage != null) { + m_activity.toast(getString(getErrorMessage()) + "\n" + m_lastErrorMessage); + } else { + m_activity.toast(getErrorMessage()); + } + //m_activity.setLoadingStatus(getErrorMessage(), false); } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java index fc8517e7..74eb66d3 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java @@ -565,7 +565,13 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (m_lastError == ApiError.LOGIN_FAILED) { m_activity.login(true); } else { - m_activity.toast(getErrorMessage()); + + if (m_lastErrorMessage != null) { + m_activity.toast(getString(getErrorMessage()) + "\n" + m_lastErrorMessage); + } else { + m_activity.toast(getErrorMessage()); + } + //m_activity.setLoadingStatus(getErrorMessage(), false); } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java index 45fb1e13..5185ddc1 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -1148,6 +1148,20 @@ public class OnlineActivity extends CommonActivity { } } + private void setLoadingStatus(String status, boolean showProgress) { + TextView tv = (TextView) findViewById(R.id.loading_message); + + if (tv != null) { + tv.setText(status); + } + + View loadingContainer = findViewById(R.id.loading_container); + + if (loadingContainer != null) { + loadingContainer.setVisibility(status.equals("") ? View.GONE : View.VISIBLE); + } + } + protected void logout() { setSessionId(null); @@ -1627,6 +1641,12 @@ public class OnlineActivity extends CommonActivity { // Unknown method means old tt-rss, in that case we assume API 0 and continue setLoadingStatus(getErrorMessage(), false); + + if (m_lastErrorMessage != null) { + setLoadingStatus(getString(getErrorMessage()) + "\n\n" + m_lastErrorMessage, false); + } else { + setLoadingStatus(getErrorMessage(), false); + } if (m_listener != null) { m_listener.OnLoginFailed(); @@ -1667,7 +1687,12 @@ public class OnlineActivity extends CommonActivity { } setSessionId(null); - setLoadingStatus(getErrorMessage(), false); + + if (m_lastErrorMessage != null) { + setLoadingStatus(getString(getErrorMessage()) + "\n\n" + m_lastErrorMessage, false); + } else { + setLoadingStatus(getErrorMessage(), false); + } loginFailure(); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java index 505fbd3e..b4e06452 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java @@ -118,7 +118,12 @@ public class HeadlinesRequest extends ApiRequest { if (m_lastError == ApiError.LOGIN_FAILED) { m_activity.login(); } else { - m_activity.toast(getErrorMessage()); + + if (m_lastErrorMessage != null) { + m_activity.toast(m_activity.getString(getErrorMessage()) + "\n" + m_lastErrorMessage); + } else { + m_activity.toast(getErrorMessage()); + } //m_activity.setLoadingStatus(getErrorMessage(), false); } } -- cgit v1.2.3