/**
   * 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 -x- you fill in here.
    Uri uri = requestMessage.getImageURL();

    // Download the requested image.
    // TODO -x??- you fill in here.
    Uri path = requestMessage.getDirectoryPathname();

    // Extract the request code.
    // TODO -x- you fill in here.
    int requestCode = requestMessage.getRequestCode();

    // Extract the Messenger stored as an extra in the
    // intent under the key MESSENGER.
    // TODO -x- you fill in here.
    Messenger messenger = requestMessage.getMessenger();

    // Send the path to the image file back to the
    // MainActivity via the messenger.
    // TODO -x- you fill in here.
    sendPath(messenger, path, uri, requestCode);
  }
  /** 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 -x- 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.
    RequestMessage requestMessage =
        RequestMessage.makeRequestMessage(
            requestCode, url, directoryPathname, new Messenger(downloadHandler));

    Intent intent = new Intent(context, DownloadImagesStartedService.class);
    intent.putExtra(REQUEST_MESSAGE, requestMessage.getMessage());
    return intent;
  }
  /** 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 -x- you fill in here.
    RequestMessage requestMessage =
        RequestMessage.makeRequestMessage(requestCode, url, pathToImageFile, messenger);

    try {
      // Send the path to the image file back to the
      // ImageModelImpl's Handler via the Messenger.
      // TODO -x- you fill in here.
      requestMessage.getMessenger().send(requestMessage.getMessage());

    } catch (RemoteException e) {
      Log.e(getClass().getName(), "Exception while sending reply message back to Activity.", e);
    }
  }