package vandy.mooc.presenter; import java.lang.ref.WeakReference; import java.util.Timer; import java.util.TimerTask; import vandy.mooc.common.PresenterOps; import vandy.mooc.utils.ParcelableCommandMusic; import vandy.mooc.view.MusicCommandProcessorActivity; import android.net.Uri; /** * This class executes a ParcelableCommandMusic to play a song. It * plays role of the "Presenter" in the Model-View-Presenter pattern * and can communicate with the MusicCommandProcessorActivity in the * "View" layer. */ public class MusicCommandProcessorPresenter implements PresenterOps<MusicCommandProcessorActivity> { /** * Debugging tag used by the Android logger. */ private String TAG = getClass().getSimpleName(); /** * Used to enable garbage collection. */ private WeakReference<MusicCommandProcessorActivity> mView; /** * Default constructor is needed by the GenericActivity framework. */ public MusicCommandProcessorPresenter() { } /** * Hook method called when a new instance of AcronymPresenter is * created. One time initialization code goes here, e.g., storing * a WeakReference to the View layer and initializing the Model * layer. * * @param view * A reference to the View layer. */ @Override public void onCreate(MusicCommandProcessorActivity view) { // Set the WeakReference. mView = new WeakReference<>(view); } /** * Hook method dispatched by the GenericActivity framework to * initialize the DownloadSongPresenter object after a runtime * configuration change. * * @param view The currently active View. */ @Override public void onConfigurationChange(MusicCommandProcessorActivity view) { // Reset the mImageView WeakReference. mView = new WeakReference<>(view); } /** * Hook method called to shutdown the Presenter layer. * * @param isChangeConfigurations * True if a runtime configuration triggered the onDestroy() call. */ @Override public void onDestroy(boolean isChangingConfigurations) { // Stop playing the song. } /** * Execute the @a parcelableCommandMusic to play the @a songUri. */ public void executeCommand (final ParcelableCommandMusic parcelableCommandMusic, Uri songUri, Runnable screenFlasher) { // Execute the command to starting playing the song. parcelableCommandMusic.execute (mView.get().getActivityContext(), parcelableCommandMusic.makeArgs(songUri)); // Start a Thread to flash the screen. final Thread thread = new Thread(screenFlasher); thread.start(); // Schedule a timer to shut everything down after 4 seconds. new Timer().schedule (new TimerTask() { public void run() { // Unexecute the command to stop playing the // song. parcelableCommandMusic.unexecute (mView.get().getActivityContext()); // Interrupt the screenFlasher Thread. thread.interrupt(); } }, 4000); } }