aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/util/VolleyUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/util/VolleyUtils.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/util/VolleyUtils.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/util/VolleyUtils.java b/WordPress/src/main/java/org/wordpress/android/util/VolleyUtils.java
new file mode 100644
index 000000000..d67ae7a2d
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/util/VolleyUtils.java
@@ -0,0 +1,131 @@
+package org.wordpress.android.util;
+
+import android.content.Context;
+
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.HttpStack;
+import com.android.volley.toolbox.ImageRequest;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.wordpress.android.models.Blog;
+import org.wordpress.android.networking.WPDelayedHurlStack;
+
+import java.io.UnsupportedEncodingException;
+
+public class VolleyUtils {
+ /*
+ * Returns REST API 'error' string code from the response in the passed VolleyError
+ * for example, returns "already_subscribed" from this response:
+ * {
+ * "error": "already_subscribed",
+ * "message": "You are already subscribed to the specified topic."
+ * }
+ */
+ public static String errStringFromVolleyError(VolleyError volleyError) {
+ JSONObject json = volleyErrorToJSON(volleyError);
+ if (json==null)
+ return "";
+ return JSONUtils.getString(json, "error");
+ }
+
+ public static int statusCodeFromVolleyError(VolleyError volleyError) {
+ if (volleyError == null || volleyError.networkResponse == null) {
+ return 0;
+ }
+ return volleyError.networkResponse.statusCode;
+ }
+
+ /*
+ * Returns REST API 'message' string field from the response in the passed VolleyError
+ * for example, returns "You are already subscribed to the specified topic." from this response:
+ * {
+ * "error": "already_subscribed",
+ * "message": "You are already subscribed to the specified topic."
+ * }
+ */
+ public static String messageStringFromVolleyError(VolleyError volleyError) {
+ JSONObject json = volleyErrorToJSON(volleyError);
+ if (json==null)
+ return "";
+ return JSONUtils.getString(json, "message");
+ }
+
+ /*
+ * Attempts to return JSON from a volleyError - useful for WP REST API failures, which often
+ * contain JSON in the response
+ */
+ public static JSONObject volleyErrorToJSON(VolleyError volleyError) {
+ if (volleyError == null || volleyError.networkResponse == null || volleyError.networkResponse.data == null
+ || volleyError.networkResponse.headers == null) {
+ return null;
+ }
+
+ String contentType = volleyError.networkResponse.headers.get("Content-Type");
+ if (contentType == null || !contentType.equals("application/json")) {
+ return null;
+ }
+
+ try {
+ String response = new String(volleyError.networkResponse.data, "UTF-8");
+ JSONObject json = new JSONObject(response);
+ return json;
+ } catch (UnsupportedEncodingException e) {
+ return null;
+ } catch (JSONException e) {
+ return null;
+ }
+ }
+
+ /*
+ * Cancel all Volley requests that aren't for images
+ */
+ public static void cancelAllNonImageRequests(RequestQueue requestQueue) {
+ if (requestQueue==null)
+ return;
+ RequestQueue.RequestFilter filter = new RequestQueue.RequestFilter() {
+ @Override
+ public boolean apply(Request<?> request) {
+ if (request instanceof ImageRequest)
+ return false;
+ return true;
+ }
+ };
+ requestQueue.cancelAll(filter);
+ }
+
+ /*
+ * Cancel all Volley requests
+ */
+ public static void cancelAllRequests(RequestQueue requestQueue) {
+ if (requestQueue==null)
+ return;
+ RequestQueue.RequestFilter filter = new RequestQueue.RequestFilter() {
+ @Override
+ public boolean apply(Request<?> request) {
+ return true;
+ }
+ };
+ requestQueue.cancelAll(filter);
+ }
+
+ /*
+ * Return true if the blog is protected with HTTP Basic Auth
+ */
+ public static boolean isCustomHTTPClientStackNeeded(Blog currentBlog) {
+ if (currentBlog.hasValidHTTPAuthCredentials())
+ return true;
+
+ return false;
+ }
+
+ public static HttpStack getHTTPClientStack(final Context ctx) {
+ return getHTTPClientStack(ctx, null);
+ }
+
+ public static HttpStack getHTTPClientStack(final Context ctx, final Blog currentBlog) {
+ return new WPDelayedHurlStack(ctx, currentBlog);
+ }
+}