package com.darkrockstudios.apps.tminus.dataupdate; import android.content.Context; import android.content.Intent; import android.util.Log; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.darkrockstudios.apps.tminus.TMinusApplication; import org.json.JSONObject; /** * Created by Adam on 10/23/13. */ public abstract class UpdateTask implements Response.Listener<JSONObject>, Response.ErrorListener { private static final String TAG = UpdateTask.class.getSimpleName(); private Context m_context; private Request m_request; public UpdateTask( final Context context ) { m_context = context; } protected Context getContext() { return m_context; } public void run() { makeRequest(); } private void makeRequest() { if( m_request == null ) { JsonObjectRequest request = new JsonObjectRequest( getRequestUrl(), null, this, this ); request.setTag( this ); m_request = TMinusApplication.getRequestQueue().add( request ); } } @Override public void onResponse( final JSONObject response ) { Log.i( TAG, "Response successfully retrieved from sever." ); HandleResponseThread thread = new HandleResponseThread( response ); thread.start(); } @Override public void onErrorResponse( final VolleyError error ) { Log.i( TAG, "Failed to retrieve data from sever." ); if( error != null && error.getMessage() != null ) { Log.i( TAG, error.getMessage() ); } sendFailureBroadcast(); m_request = null; } private void sendSuccessBroadcast() { Log.i( TAG, "Data successfully updated, sending success broadcast." ); final Intent intent = new Intent( getSuccessIntentAction() ); getContext().sendBroadcast( intent ); } private void sendFailureBroadcast() { Log.i( TAG, "Data update failed, sending failure broadcast." ); final Intent intent = new Intent( getFailureIntentAction() ); getContext().sendBroadcast( intent ); } private class HandleResponseThread extends Thread { private JSONObject m_response; public HandleResponseThread( final JSONObject response ) { m_response = response; } @Override public void run() { if( handleData( m_response ) ) { sendSuccessBroadcast(); } else { sendFailureBroadcast(); } m_request = null; } } public abstract boolean handleData( JSONObject response ); public abstract String getRequestUrl(); public abstract String getSuccessIntentAction(); public abstract String getFailureIntentAction(); }