package vandy.mooc.model.services; import vandy.mooc.model.datamodel.ReplyMessage; import vandy.mooc.model.datamodel.RequestMessage; import vandy.mooc.utils.NetUtils; import android.app.IntentService; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Handler; import android.os.Message; import android.os.Messenger; import android.os.RemoteException; import android.util.Log; /** * An IntentService that downloads an image requested via data in an * intent, stores the image in a local file on the local device, and * returns the image file's URI back to the ImageModelImpl's Handler * via the Messenger passed with the intent. */ public class DownloadImagesStartedService extends IntentService { /** * Debugging tag used by the Android logger. */ private final String TAG = getClass().getSimpleName(); /** * Key used to identify the RequestMessage within an Intent * "extra". */ private static final String REQUEST_MESSAGE = "REQUEST_MESSAGE"; /** * Constructor initializes the IntentService super class. */ public DownloadImagesStartedService() { super("DownloadImagesStartedService"); } /** * Factory method that returns an explicit Intent for downloading * an image. */ public static Intent makeIntent(Context context, int requestCode, Uri url, Uri directoryPathname, Handler downloadHandler) { // Create an intent that will download the image from the web. // TODO -- you fill in here, replacing "null" with the proper // code, which involves (1) creating a RequestMessage // containing the various parameters passed into this method // and (2) storing this RequestMessage as a Message "extra" in // the Intent. return null; } /** * Hook method dispatched by the IntentService framework to * download the image requested via data in an intent, store the * image in a local file on the local device, and return the image * file's URI back to the ImageModelImpl's Handler via the * Messenger passed with the intent. */ @Override public void onHandleIntent(Intent intent) { // Extract the RequestMessage from the intent. final RequestMessage requestMessage = RequestMessage.makeRequestMessage ((Message) intent.getParcelableExtra(REQUEST_MESSAGE)); // Extract the URL for the image to download. // TODO -- you fill in here. // Download the requested image. // TODO -- you fill in here. // Extract the request code. // TODO -- you fill in here. // Extract the Messenger stored in the RequestMessage. // TODO -- you fill in here. // Send the path to the image file back to the // MainActivity via the messenger. // TODO -- you fill in here. } /** * Send the @a pathToImageFile back to the ImageModelImp's Handler * via the @a Messenger. */ private void sendPath(Messenger messenger, Uri pathToImageFile, Uri url, int requestCode) { // Call the makeReplyMessage() factory method to create // Message. // TODO -- you fill in here. try { // Send the path to the image file back to the // ImageModelImpl's Handler via the Messenger. // TODO -- you fill in here. } catch (RemoteException e) { Log.e(getClass().getName(), "Exception while sending reply message back to Activity.", e); } } }