From 4851db852a336258035643413bf8877808d1560f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 30 Apr 2020 11:19:01 +0300 Subject: rework ApiRequest/ApiLoader to use okhttp3; remove duplicated code --- org.fox.ttrss/src/main/AndroidManifest.xml | 4 +- .../src/main/java/org/fox/ttrss/ApiCommon.java | 197 +++++++++++++----- .../src/main/java/org/fox/ttrss/ApiLoader.java | 220 +++----------------- .../src/main/java/org/fox/ttrss/ApiRequest.java | 226 ++------------------- .../main/java/org/fox/ttrss/OnlineActivity.java | 10 +- 5 files changed, 200 insertions(+), 457 deletions(-) (limited to 'org.fox.ttrss/src') diff --git a/org.fox.ttrss/src/main/AndroidManifest.xml b/org.fox.ttrss/src/main/AndroidManifest.xml index 273ed12b..8489811a 100755 --- a/org.fox.ttrss/src/main/AndroidManifest.xml +++ b/org.fox.ttrss/src/main/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="514" + android:versionName="1.280"> diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java index b7308000..c75f6650 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiCommon.java @@ -1,21 +1,42 @@ package org.fox.ttrss; -import android.os.Build; +import android.content.Context; +import android.content.SharedPreferences; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.preference.PreferenceManager; import android.util.Log; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; +import java.io.IOException; +import java.util.HashMap; + +import androidx.annotation.NonNull; +import okhttp3.Credentials; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; public class ApiCommon { public static final String TAG = "ApiCommon"; + private static final int API_STATUS_OK = 0; + private static final int API_STATUS_ERR = 1; + + private static final MediaType TYPE_JSON = MediaType.parse("application/json; charset=utf-8"); + + public interface ApiCaller { + void setStatusCode(int statusCode); + void setLastError(ApiError lastError); + void setLastErrorMessage(String message); + } + public enum ApiError { NO_ERROR, HTTP_UNAUTHORIZED, HTTP_FORBIDDEN, HTTP_NOT_FOUND, HTTP_SERVER_ERROR, HTTP_OTHER_ERROR, SSL_REJECTED, SSL_HOSTNAME_REJECTED, PARSE_ERROR, IO_ERROR, OTHER_ERROR, API_DISABLED, API_UNKNOWN, LOGIN_FAILED, INVALID_URL, API_INCORRECT_USAGE, NETWORK_UNAVAILABLE, API_UNKNOWN_METHOD } @@ -62,64 +83,146 @@ public class ApiCommon { Log.d(TAG, "getErrorMessage: unknown error code=" + error); return R.string.error_unknown; } + } + static boolean isNetworkAvailable(Context context) { + ConnectivityManager cm = (ConnectivityManager) + context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = cm.getActiveNetworkInfo(); + + // if no network is available networkInfo will be null + // otherwise check if we are connected + return networkInfo != null && networkInfo.isConnected(); } - public static void trustAllHosts(boolean trustAnyCert, boolean trustAnyHost) { + static JsonElement performRequest(Context context, @NonNull HashMap m_params, + @NonNull ApiCommon.ApiCaller caller) { try { - if (trustAnyCert) { - X509TrustManager easyTrustManager = new X509TrustManager() { + if (!ApiCommon.isNetworkAvailable(context)) { + caller.setLastError(ApiError.NETWORK_UNAVAILABLE); + return null; + } - public void checkClientTrusted( - X509Certificate[] chain, - String authType) throws CertificateException { - // Oh, I am easy! - } + SharedPreferences m_prefs = PreferenceManager.getDefaultSharedPreferences(context); - public void checkServerTrusted( - X509Certificate[] chain, - String authType) throws CertificateException { - // Oh, I am easy! - } + boolean m_transportDebugging = m_prefs.getBoolean("transport_debugging", false); - public X509Certificate[] getAcceptedIssuers() { - return null; - } + Gson gson = new Gson(); - }; + String payload = gson.toJson(new HashMap<>(m_params)); + String apiUrl = m_prefs.getString("ttrss_url", "").trim() + "/api/"; - // Create a trust manager that does not validate certificate chains - TrustManager[] trustAllCerts = new TrustManager[] {easyTrustManager}; + if (m_transportDebugging) Log.d(TAG, ">>> " + payload + " -> " + apiUrl); - // Install the all-trusting trust manager + Request.Builder requestBuilder = new Request.Builder() + .url(apiUrl) + .post(RequestBody.create(TYPE_JSON, payload)); - SSLContext sc = SSLContext.getInstance("TLS"); + String httpLogin = m_prefs.getString("http_login", "").trim(); + String httpPassword = m_prefs.getString("http_password", "").trim(); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); + if (httpLogin.length() > 0) { + if (m_transportDebugging) Log.d(TAG, "Using HTTP Basic authentication."); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + requestBuilder.addHeader("Authorization", Credentials.basic(httpLogin, httpPassword)); } - if (trustAnyHost) { - HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { - @Override - public boolean verify(String hostname, SSLSession session) { - return true; - } - }); + Request request = requestBuilder.build(); + + Response response = new OkHttpClient() + .newCall(request) + .execute(); + + if (response.isSuccessful()) { + String payloadReceived = response.body().string(); + + if (m_transportDebugging) Log.d(TAG, "<<< " + payloadReceived); + + JsonParser parser = new JsonParser(); + + JsonElement result = parser.parse(payloadReceived); + JsonObject resultObj = result.getAsJsonObject(); + + int statusCode = resultObj.get("status").getAsInt(); + + caller.setStatusCode(statusCode); + + switch (statusCode) { + 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(); + + switch (error) { + case "LOGIN_ERROR": + case "NOT_LOGGED_IN": + caller.setLastError(ApiError.LOGIN_FAILED); + break; + case "API_DISABLED": + caller.setLastError(ApiError.API_DISABLED); + break; + case "INCORRECT_USAGE": + caller.setLastError(ApiError.API_INCORRECT_USAGE); + break; + case "UNKNOWN_METHOD": + caller.setLastError(ApiError.API_UNKNOWN_METHOD); + break; + default: + Log.d(TAG, "Unknown API error: " + error); + caller.setLastError(ApiError.API_UNKNOWN); + break; + } + } + + } else { + switch (response.code()) { + case 401: + caller.setLastError(ApiError.HTTP_UNAUTHORIZED); + break; + case 403: + caller.setLastError(ApiError.HTTP_FORBIDDEN); + break; + case 404: + caller.setLastError(ApiError.HTTP_NOT_FOUND); + break; + case 500: + case 501: + caller.setLastError(ApiError.HTTP_SERVER_ERROR); + break; + default: + Log.d(TAG, "HTTP response code: " + response.code()); + caller.setLastError(ApiError.HTTP_OTHER_ERROR); + break; + } } + return null; + } catch (javax.net.ssl.SSLPeerUnverifiedException e) { + caller.setLastError(ApiError.SSL_REJECTED); + caller.setLastErrorMessage(e.getMessage()); + e.printStackTrace(); + } catch (IOException e) { + caller.setLastError(ApiError.IO_ERROR); + caller.setLastErrorMessage(e.getMessage()); + + if (e.getMessage() != null) { + if (e.getMessage().matches("Hostname [^ ]+ was not verified")) { + caller.setLastError(ApiError.SSL_HOSTNAME_REJECTED); + } + } + + e.printStackTrace(); + } catch (com.google.gson.JsonSyntaxException e) { + caller.setLastError(ApiError.PARSE_ERROR); + caller.setLastErrorMessage(e.getMessage()); + e.printStackTrace(); } catch (Exception e) { + caller.setLastError(ApiError.OTHER_ERROR); + caller.setLastErrorMessage(e.getMessage()); e.printStackTrace(); } - } - @SuppressWarnings("deprecation") - protected static void disableConnectionReuseIfNecessary() { - // HTTP connection reuse which was buggy pre-froyo - if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) { - System.setProperty("http.keepAlive", "false"); - } + return null; } - } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java index 222a383f..95f7fa87 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ApiLoader.java @@ -1,62 +1,34 @@ package org.fox.ttrss; import android.content.Context; -import android.content.SharedPreferences; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.preference.PreferenceManager; -import android.util.Base64; -import android.util.Log; - -import com.google.gson.Gson; + import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import org.fox.ttrss.ApiCommon.ApiError; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; import java.util.HashMap; import androidx.loader.content.AsyncTaskLoader; -public class ApiLoader extends AsyncTaskLoader { +public class ApiLoader extends AsyncTaskLoader implements ApiCommon.ApiCaller { private final String TAG = this.getClass().getSimpleName(); + private int m_responseCode = 0; + protected String m_responseMessage; + private int m_apiStatusCode = 0; - public static final int API_STATUS_OK = 0; - public static final int API_STATUS_ERR = 1; + private Context m_context; + private String m_lastErrorMessage; + private ApiError m_lastError; + private HashMap m_params; + private JsonElement m_data; - private String m_api; - private boolean m_transportDebugging = false; - protected int m_responseCode = 0; - protected String m_responseMessage; - protected int m_apiStatusCode = 0; - protected Context m_context; - private SharedPreferences m_prefs; - protected String m_lastErrorMessage; - protected ApiError m_lastError; - protected HashMap m_params; - protected JsonElement m_data; - - public ApiLoader(Context context, HashMap params) { + ApiLoader(Context context, HashMap params) { super(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; m_params = params; - } @Override @@ -79,171 +51,31 @@ public class ApiLoader extends AsyncTaskLoader { return ApiCommon.getErrorMessage(m_lastError); } - public ApiError getLastError() { + ApiError getLastError() { return m_lastError; } - public String getLastErrorMessage() { + String getLastErrorMessage() { return m_lastErrorMessage; } @Override public JsonElement loadInBackground() { + return ApiCommon.performRequest(m_context, m_params, this); + } - if (!isNetworkAvailable()) { - m_lastError = ApiError.NETWORK_UNAVAILABLE; - return null; - } - - Gson gson = new Gson(); - - String requestStr = gson.toJson(new HashMap<>(m_params)); - byte[] postData = null; - - postData = requestStr.getBytes(StandardCharsets.UTF_8); - - if (m_transportDebugging) Log.d(TAG, ">>> (" + requestStr + ") " + m_api); - - URL url; - - try { - // canonicalize url just in case - URL baseUrl = new URL(m_api); - File f = new File(baseUrl.getPath() + "/api"); - url = new URL(baseUrl, f.getCanonicalPath() + "/"); - } catch (Exception e) { - m_lastError = ApiError.INVALID_URL; - e.printStackTrace(); - return null; - } + @Override + public void setStatusCode(int statusCode) { + m_apiStatusCode = statusCode; + } - 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(StandardCharsets.UTF_8), Base64.NO_WRAP)); - } - - 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(); - InputStreamReader in = new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8); - char[] buf = new char[256]; - int read = 0; - - while ((read = in.read(buf)) >= 0) { - response.append(buf, 0, read); - } - - 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")) { - m_lastError = ApiError.API_DISABLED; - } else if (error.equals("NOT_LOGGED_IN")) { - m_lastError = ApiError.LOGIN_FAILED; - } else if (error.equals("INCORRECT_USAGE")) { - m_lastError = ApiError.API_INCORRECT_USAGE; - } else if (error.equals("UNKNOWN_METHOD")) { - m_lastError = ApiError.API_UNKNOWN_METHOD; - } else { - Log.d(TAG, "Unknown API error: " + error); - m_lastError = ApiError.API_UNKNOWN; - } - } - - return null; - case HttpURLConnection.HTTP_UNAUTHORIZED: - m_lastError = ApiError.HTTP_UNAUTHORIZED; - break; - case HttpURLConnection.HTTP_FORBIDDEN: - m_lastError = ApiError.HTTP_FORBIDDEN; - break; - case HttpURLConnection.HTTP_NOT_FOUND: - m_lastError = ApiError.HTTP_NOT_FOUND; - break; - case HttpURLConnection.HTTP_INTERNAL_ERROR: - m_lastError = ApiError.HTTP_SERVER_ERROR; - break; - default: - Log.d(TAG, "HTTP response code: " + m_responseCode + "(" + m_responseMessage + ")"); - 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(); - } - - return null; + @Override + public void setLastError(ApiError lastError) { + m_lastError = lastError; } - protected boolean isNetworkAvailable() { - ConnectivityManager cm = (ConnectivityManager) - m_context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo networkInfo = cm.getActiveNetworkInfo(); - - // if no network is available networkInfo will be null - // otherwise check if we are connected - return networkInfo != null && networkInfo.isConnected(); - } + @Override + public void setLastErrorMessage(String message) { + m_lastErrorMessage = message; + } } 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 d839d624..e993a866 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 @@ -2,67 +2,35 @@ package org.fox.ttrss; import android.annotation.SuppressLint; import android.content.Context; -import android.content.SharedPreferences; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; import android.os.AsyncTask; -import android.os.Build; -import android.preference.PreferenceManager; -import android.util.Base64; -import android.util.Log; -import com.google.gson.Gson; import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URL; import java.util.HashMap; import static org.fox.ttrss.ApiCommon.ApiError; -public class ApiRequest extends AsyncTask, Integer, JsonElement> { +public class ApiRequest extends AsyncTask, Integer, JsonElement> implements ApiCommon.ApiCaller { private final String TAG = this.getClass().getSimpleName(); - public static final int API_STATUS_OK = 0; - public static final int API_STATUS_ERR = 1; - - private String m_api; private boolean m_transportDebugging = false; - protected int m_responseCode = 0; - protected String m_responseMessage; - protected int m_apiStatusCode = 0; - protected boolean m_canUseProgress = false; - protected Context m_context; - private SharedPreferences m_prefs; + private int m_responseCode = 0; + private int m_apiStatusCode = 0; + + private Context m_context; 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) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) - super.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, map); - else - super.execute(map); + super.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, map); } public int getErrorMessage() { @@ -71,177 +39,21 @@ public class ApiRequest extends AsyncTask, Integer, JsonE @Override protected JsonElement doInBackground(HashMap... params) { + return ApiCommon.performRequest(m_context, params[0], this); + } - if (!isNetworkAvailable()) { - 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) { - m_lastError = ApiError.OTHER_ERROR; - e.printStackTrace(); - return null; - } - - if (m_transportDebugging) Log.d(TAG, ">>> (" + requestStr + ") " + m_api); - - URL url; - - try { - // canonicalize url just in case - URL baseUrl = new URL(m_api); - File f = new File(baseUrl.getPath() + "/api"); - url = new URL(baseUrl, f.getCanonicalPath() + "/"); - } catch (Exception e) { - m_lastError = ApiError.INVALID_URL; - e.printStackTrace(); - return null; - } - - 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.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(); - InputStreamReader in = new InputStreamReader(conn.getInputStream(), "UTF-8"); - char[] buf = new char[256]; - int read = 0; - int total = 0; - - 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")) { - m_lastError = ApiError.API_DISABLED; - } else if (error.equals("NOT_LOGGED_IN")) { - m_lastError = ApiError.LOGIN_FAILED; - } else if (error.equals("INCORRECT_USAGE")) { - m_lastError = ApiError.API_INCORRECT_USAGE; - } else if (error.equals("UNKNOWN_METHOD")) { - m_lastError = ApiError.API_UNKNOWN_METHOD; - } else { - Log.d(TAG, "Unknown API error: " + error); - m_lastError = ApiError.API_UNKNOWN; - } - } - - return null; - case HttpURLConnection.HTTP_UNAUTHORIZED: - m_lastError = ApiError.HTTP_UNAUTHORIZED; - break; - case HttpURLConnection.HTTP_FORBIDDEN: - m_lastError = ApiError.HTTP_FORBIDDEN; - break; - case HttpURLConnection.HTTP_NOT_FOUND: - m_lastError = ApiError.HTTP_NOT_FOUND; - break; - case HttpURLConnection.HTTP_INTERNAL_ERROR: - m_lastError = ApiError.HTTP_SERVER_ERROR; - break; - default: - Log.d(TAG, "HTTP response code: " + m_responseCode + "(" + m_responseMessage + ")"); - 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; - } - } + @Override + public void setStatusCode(int statusCode) { + m_apiStatusCode = statusCode; + } - 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(); - } - - return null; + @Override + public void setLastError(ApiError lastError) { + m_lastError = lastError; } - protected boolean isNetworkAvailable() { - ConnectivityManager cm = (ConnectivityManager) - m_context.getSystemService(Context.CONNECTIVITY_SERVICE); - NetworkInfo networkInfo = cm.getActiveNetworkInfo(); - - // if no network is available networkInfo will be null - // otherwise check if we are connected - if (networkInfo != null && networkInfo.isConnected()) { - return true; - } - return false; - } + @Override + public void setLastErrorMessage(String message) { + m_lastErrorMessage = message; + } } 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 185c528a..e644fc46 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 @@ -134,8 +134,7 @@ public class OnlineActivity extends CommonActivity { @Override public void onCreate(Bundle savedInstanceState) { - ApiCommon.disableConnectionReuseIfNecessary(); - + // we use that before parent onCreate so let's init locally m_prefs = PreferenceManager .getDefaultSharedPreferences(getApplicationContext()); @@ -1005,7 +1004,7 @@ public class OnlineActivity extends CommonActivity { } }; - ApiRequest req = new ApiRequest(m_context); + ApiRequest req = new ApiRequest(OnlineActivity.this); req.execute(map); } @@ -1089,9 +1088,6 @@ public class OnlineActivity extends CommonActivity { public void onResume() { super.onResume(); - ApiCommon.trustAllHosts(m_prefs.getBoolean("ssl_trust_any", false), - m_prefs.getBoolean("ssl_trust_any_host", false)); - IntentFilter filter = new IntentFilter(); //filter.addAction(OfflineDownloadService.INTENT_ACTION_SUCCESS); filter.addAction(OfflineUploadService.INTENT_ACTION_SUCCESS); @@ -1483,7 +1479,7 @@ public class OnlineActivity extends CommonActivity { } else { - ApiRequest req = new ApiRequest(m_context) { + ApiRequest req = new ApiRequest(OnlineActivity.this) { protected void onPostExecute(JsonElement result) { setApiLevel(0); -- cgit v1.2.3