package zlc.season.rxdownloadproject.model; import android.widget.Button; import android.widget.TextView; import zlc.season.rxdownload2.entity.DownloadEvent; import zlc.season.rxdownload2.entity.DownloadFlag; /** * Author: Season(ssseasonnn@gmail.com) * Date: 2016/11/22 * Time: 15:18 * FIXME */ public class DownloadController { private TextView mStatus; private Button mAction; private DownloadState mState; public DownloadController(TextView status, Button action) { mStatus = status; mAction = action; setState(new Normal()); } public void setState(DownloadState state) { mState = state; mState.setText(mStatus, mAction); } public void setEvent(DownloadEvent event) { int flag = event.getFlag(); switch (flag) { case DownloadFlag.NORMAL: setState(new DownloadController.Normal()); break; case DownloadFlag.WAITING: setState(new DownloadController.Waiting()); break; case DownloadFlag.STARTED: setState(new DownloadController.Started()); break; case DownloadFlag.PAUSED: setState(new DownloadController.Paused()); break; case DownloadFlag.COMPLETED: setState(new DownloadController.Completed()); break; case DownloadFlag.FAILED: setState(new DownloadController.Failed()); break; case DownloadFlag.DELETED: setState(new DownloadController.Deleted()); break; } } public void handleClick(Callback callback) { mState.handleClick(callback); } public interface Callback { void startDownload(); void pauseDownload(); void install(); } static abstract class DownloadState { abstract void setText(TextView status, Button button); abstract void handleClick(Callback callback); } public static class Normal extends DownloadState { @Override void setText(TextView status, Button button) { button.setText("下载"); status.setText(""); } @Override void handleClick(Callback callback) { callback.startDownload(); } } public static class Waiting extends DownloadState { @Override void setText(TextView status, Button button) { button.setText("等待中"); status.setText("等待中..."); } @Override void handleClick(Callback callback) { callback.pauseDownload(); } } public static class Started extends DownloadState { @Override void setText(TextView status, Button button) { button.setText("暂停"); status.setText("下载中..."); } @Override void handleClick(Callback callback) { callback.pauseDownload(); } } public static class Paused extends DownloadState { @Override void setText(TextView status, Button button) { button.setText("继续"); status.setText("已暂停"); } @Override void handleClick(Callback callback) { callback.startDownload(); } } public static class Failed extends DownloadState { @Override void setText(TextView status, Button button) { button.setText("继续"); status.setText("下载失败"); } @Override void handleClick(Callback callback) { callback.startDownload(); } } public static class Completed extends DownloadState { @Override void setText(TextView status, Button button) { button.setText("安装"); status.setText("下载已完成"); } @Override void handleClick(Callback callback) { callback.install(); } } public static class Deleted extends DownloadState { @Override void setText(TextView status, Button button) { button.setText("下载"); status.setText("下载已取消"); } @Override void handleClick(Callback callback) { callback.startDownload(); } } }