package vandy.mooc.presenter.strategies;
import java.lang.ref.WeakReference;
import vandy.mooc.MVP;
import vandy.mooc.common.Utils;
import android.graphics.Bitmap;
/**
* Class that defines methods shared by all the ButtonStrategy
* implementations. It plays the role of the "Context" in the
* Strategy pattern.
*/
public class DownloadContext {
/**
* Debug Tag for logging debug output to LogCat
*/
private final String TAG =
DownloadContext.class.getSimpleName();
/**
* URL to download.
*/
private final String mUrl;
/**
* Reference to the Presenter layer.
*/
private final WeakReference<MVP.RequiredPresenterOps> mPresenter;
/**
* Reference to the Model layer.
*/
private final WeakReference<MVP.ProvidedModelOps> mModel;
/**
* The completion command called after the image has been
* displayed.
*/
private final Runnable mCompletionCommand;
/**
* Constructor sets the various data members used by concrete
* ButtonStrategies.
*/
public DownloadContext(String url,
MVP.RequiredPresenterOps presenter,
MVP.ProvidedModelOps model,
Runnable completionCommand) {
mUrl = url;
mPresenter = new WeakReference<MVP.RequiredPresenterOps>(presenter);
mModel = new WeakReference<MVP.ProvidedModelOps>(model);
mCompletionCommand = completionCommand; // new WeakReference<Runnable>(completionCommand);
}
/**
* @return the URL to download.
*/
public String getUrl() {
return mUrl;
}
/**
* Download a bitmap image from the URL provided by the user.
*
* @param url
* The url where a bitmap image is located
*
* @return the image bitmap or null if there was an error
*/
public Bitmap downloadBitmap(String url) {
return mModel.get().downloadBitmap(url);
}
/**
* Show a toast message.
*/
public void showToast(String message) {
Utils.showToast(mPresenter.get()
.getActivityContext(),
message);
}
/**
* Display a downloaded bitmap image if it's non-null; otherwise,
* it reports an error via a Toast that's displayed on the UI
* Thread. This method can be called from either the UI Thread or
* a background Thread.
*
* @param image
* The bitmap image
*/
public void displayBitmap(Bitmap image) {
mPresenter.get().displayBitmap(image,
mCompletionCommand);
}
/**
* Reset bitmap display on the user's screen to the default image.
*/
public void resetBitmap() {
mPresenter.get().resetBitmap();
}
}