package com.crossbow.wear.core; import android.os.Bundle; import com.android.volley.AuthFailureError; import com.android.volley.DefaultRetryPolicy; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.RetryPolicy; import com.android.volley.VolleyError; import com.android.volley.toolbox.HttpHeaderParser; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** */ public class WearDataRequest extends Request<NetworkResponse> { private Listener listener; private ErrorListener errorListener; private final String uuid; private final String transformerKey; private final Map<String, ResponseTransformer> transformerMap = new HashMap<>(0); private final String cacheKey; private final String tag; private final String bodyContentType; private final Map<String, String> headers; private final byte[] body; private final Priority priority; private final ParamsBundle transformerArgs; private final RetryPolicy retryPolicy; public WearDataRequest(int method, String url, String uuid, String transformerKey, int retryCount, int timeout, String cacheKey, String tag, String bodyContentType, Map<String, String> headers, byte[] body, Priority priority, ParamsBundle transformerArgs) { super(method, url, null); this.uuid = uuid; this.cacheKey = cacheKey; this.tag = tag; this.bodyContentType = bodyContentType; this.headers = headers; this.body = body; this.priority = priority; this.transformerArgs = transformerArgs; this.transformerMap.putAll(transformerMap); this.retryPolicy = new DefaultRetryPolicy(timeout, retryCount, 1f); this.transformerKey = transformerKey; setRetryPolicy(retryPolicy); } @Override protected Response<NetworkResponse> parseNetworkResponse(NetworkResponse response) { if(transformerMap.containsKey(transformerKey)) { try { byte[] data = transformerMap.get(transformerKey).transform(transformerArgs, response.data); return Response.success(new NetworkResponse(response.statusCode, data, response.headers, response.notModified), HttpHeaderParser.parseCacheHeaders(response)); } catch (ParseError parseError) { return Response.error(parseError); } } return Response.success(response, HttpHeaderParser.parseCacheHeaders(response)); } @Override protected void deliverResponse(NetworkResponse response) { listener.onResponse(uuid, response); } @Override public void deliverError(VolleyError error) { errorListener.onErrorResponse(uuid, error); } @Override public String getCacheKey() { return cacheKey; } @Override public Object getTag() { return tag; } @Override public byte[] getBody() throws AuthFailureError { return body; } @Override public String getBodyContentType() { return bodyContentType; } @Override public Priority getPriority() { return priority; } @Override public Map<String, String> getHeaders() { return headers != null ? headers : Collections.<String, String>emptyMap(); } public String getUuid() { return uuid; } public ParamsBundle getTransformerArgs() { return transformerArgs; } public String getTransformerKey() { return transformerKey; } public void setTransformerMap(Map<String, ResponseTransformer> transformerMap) { this.transformerMap.putAll(transformerMap); } public void setListener(Listener listener) { this.listener = listener; } public void setErrorListener(ErrorListener errorListener) { this.errorListener = errorListener; } public interface Listener { void onResponse(String uuid, NetworkResponse response); } public interface ErrorListener { void onErrorResponse(String uuid, VolleyError error); } }