package vandy.mooc.model.datamodel;
import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
/**
* Super class that defines common keys and methods used by the
* RequestMessage and ReplyMessage subclasses.
*/
public class RequestReplyMessageBase {
/**
* String constant used to extract the pathname to a downloaded
* image from a Bundle.
*/
public static final String IMAGE_PATHNAME = "IMAGE_PATHNAME";
/**
* String constant used to extract the request code.
*/
public static final String REQUEST_CODE = "REQUEST_CODE";
/**
* String constant used to extract the URL to an image from a
* Bundle.
*/
public static final String IMAGE_URL = "IMAGE_URL";
/**
* String constant used to extract the directory pathname to use
* to store a downloaded image.
*/
public static final String DIRECTORY_PATHNAME = "DIRECTORY_PATHNAME";
/**
* Message used to hold the information.
*/
protected Message mMessage;
/**
* Constructor initializes the mMessage field.
*/
protected RequestReplyMessageBase(Message message) {
mMessage = message;
}
/**
* Accessor method that returns the underlying Message.
*/
public Message getMessage() {
return mMessage;
}
/**
* Accessor method that returns the Bundle that's part of the
* underlying Message.
*/
public Bundle getData() {
return mMessage.getData();
}
/**
* Sets provided Bundle as the data of the underlying Message
* @param data - the Bundle to set
*/
public void setData(Bundle data) {
mMessage.setData(data);
}
/**
* Accessor method that returns the result code of the message, which
* can be used to check if the download succeeded.
*/
public int getResultCode() {
return mMessage.arg1;
}
/**
* Accessor method that sets the result code
* @param resultCode - the code too set
*/
public void setResultCode(int resultCode) {
mMessage.arg1 = resultCode;
}
/**
* Accessor method that returns Messenger of the Message.
*/
public Messenger getMessenger() {
return mMessage.replyTo;
}
/**
* Accessor method that sets Messenger of the Message
* @param messenger
*/
public void setMessenger(Messenger messenger) {
mMessage.replyTo = messenger;
}
/**
* Accessor method that returns the request code of the message.
*/
public int getRequestCode() {
// Extract the data from Message, which is in the form of a
// Bundle that can be passed across processes.
Bundle data = mMessage.getData();
// Extract the request code.
return data.getInt(REQUEST_CODE);
}
/**
* Accessor method that sets the request code of the message
* @param requestCode
*/
public void setRequestCode(int requestCode) {
mMessage.getData().putInt(REQUEST_CODE,
requestCode);
}
/**
* Helper method that returns the URL to the image file.
*/
public Uri getImageURL() {
// Extract the data from Message, which is in the form of a
// Bundle that can be passed across processes.
Bundle data = mMessage.getData();
// Extract the path to the image file from the Bundle, which
// should be stored using the IMAGE_URL key.
return data.getParcelable(IMAGE_URL);
}
/**
* Helper method that sets the URL to the image file
* @param url
*/
public void setImageURL(Uri url) {
mMessage.getData().putParcelable(IMAGE_URL,
url);
}
/**
* Helper method that returns the path to the image file if it is
* download successfully.
*/
public Uri getImagePathname() {
// Extract the data from Message, which is in the form of a
// Bundle that can be passed across processes.
Bundle data = mMessage.getData();
// Extract the path to the image file from the Bundle, which
// should be stored using the IMAGE_PATHNAME key.
return data.getParcelable(IMAGE_PATHNAME);
}
/**
* Helper method that sets the path to the image file
* @param imagePathname - the path to the image file
*/
public void setImagePathname(Uri imagePathname) {
mMessage.getData().putParcelable(IMAGE_PATHNAME,
imagePathname);
}
/**
* Helper method that returns the URI to the directory pathname.
*/
public Uri getDirectoryPathname() {
// Extract the data from Message, which is in the form of a
// Bundle that can be passed across processes.
Bundle data = mMessage.getData();
// Extract the directory pathname the Bundle, which should be
// stored using the DIRECTORY_PATHNAME key.
return data.getParcelable(DIRECTORY_PATHNAME);
}
/**
* Helper method that sets the URI to the directory pathname
* @param directoryPathname
*/
public void setDirectoryPathname(Uri directoryPathname) {
mMessage.getData().putParcelable(DIRECTORY_PATHNAME,
directoryPathname);
}
}