From 96efa35c4e2034ae414bc9bed0b4ccd7400d9213 Mon Sep 17 00:00:00 2001 From: laoyuyu <511455842@qq.com> Date: Sun, 19 Jan 2020 21:53:55 +0800 Subject: [PATCH] =?UTF-8?q?demo=20=E4=BE=8B=E5=AD=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aria/core/download/CheckDEntityUtil.java | 2 +- .../aria/core/download/CheckDGEntityUtil.java | 2 +- .../core/download/CheckFtpDirEntityUtil.java | 2 +- .../aria/core/upload/CheckUEntityUtil.java | 2 +- .../http/download/HttpDThreadTaskAdapter.java | 4 - .../core/download/FtpDownloadActivity.java | 193 ++++++------- .../core/download/SFtpDownloadActivity.java | 178 ++++++------ .../core/download/SingleTaskActivity.java | 116 +++----- .../download/m3u8/M3U8LiveDLoadActivity.java | 111 ++++---- .../download/m3u8/M3U8VodDLoadActivity.java | 107 +++---- .../simple/core/upload/FtpUploadActivity.java | 210 ++++++-------- .../core/upload/HttpUploadActivity.java | 64 ++--- .../core/upload/SFtpUploadActivity.java | 226 ++++++--------- .../arialyy/simple/widget/ProgressLayout.java | 267 ++++++++++++++++++ app/src/main/res/drawable/ic_close.xml | 9 + .../main/res/layout/activity_ftp_download.xml | 86 ------ .../main/res/layout/activity_ftp_upload.xml | 83 ------ .../main/res/layout/activity_m3u8_live.xml | 112 +------- app/src/main/res/layout/activity_m3u8_vod.xml | 63 +---- .../res/layout/activity_sftp_download.xml | 86 ------ .../main/res/layout/activity_sftp_upload.xml | 83 ------ app/src/main/res/layout/activity_single.xml | 74 +---- app/src/main/res/layout/activity_upload.xml | 103 ------- .../res/layout/layout_progress_content.xml | 101 +++++++ app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/strings.xml | 4 + 26 files changed, 918 insertions(+), 1372 deletions(-) create mode 100644 app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java create mode 100644 app/src/main/res/drawable/ic_close.xml delete mode 100644 app/src/main/res/layout/activity_ftp_download.xml delete mode 100644 app/src/main/res/layout/activity_ftp_upload.xml delete mode 100644 app/src/main/res/layout/activity_sftp_download.xml delete mode 100644 app/src/main/res/layout/activity_sftp_upload.xml delete mode 100644 app/src/main/res/layout/activity_upload.xml create mode 100644 app/src/main/res/layout/layout_progress_content.xml diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/CheckDEntityUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/CheckDEntityUtil.java index a421deef..cdbe48c8 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/CheckDEntityUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/CheckDEntityUtil.java @@ -50,7 +50,7 @@ public class CheckDEntityUtil implements ICheckEntityUtil { @Override public boolean checkEntity() { if (mWrapper.getErrorEvent() != null) { - ALog.e(TAG, String.format("下载失败,%s", mWrapper.getErrorEvent().errorMsg)); + ALog.e(TAG, String.format("任务操作失败,%s", mWrapper.getErrorEvent().errorMsg)); return false; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/CheckDGEntityUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/CheckDGEntityUtil.java index 15f698c4..1be5ad86 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/CheckDGEntityUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/CheckDGEntityUtil.java @@ -116,7 +116,7 @@ public class CheckDGEntityUtil implements ICheckEntityUtil { @Override public boolean checkEntity() { if (mWrapper.getErrorEvent() != null) { - ALog.e(TAG, String.format("操作失败,%s", mWrapper.getErrorEvent().errorMsg)); + ALog.e(TAG, String.format("任务操作失败,%s", mWrapper.getErrorEvent().errorMsg)); return false; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/CheckFtpDirEntityUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/CheckFtpDirEntityUtil.java index 61884845..3373ccd4 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/CheckFtpDirEntityUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/CheckFtpDirEntityUtil.java @@ -78,7 +78,7 @@ public class CheckFtpDirEntityUtil implements ICheckEntityUtil { @Override public boolean checkEntity() { if (mWrapper.getErrorEvent() != null) { - ALog.e(TAG, String.format("下载失败,%s", mWrapper.getErrorEvent().errorMsg)); + ALog.e(TAG, String.format("任务操作失败,%s", mWrapper.getErrorEvent().errorMsg)); return false; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/CheckUEntityUtil.java b/Aria/src/main/java/com/arialyy/aria/core/upload/CheckUEntityUtil.java index fcc3744b..76f4a4cd 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/CheckUEntityUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/CheckUEntityUtil.java @@ -40,7 +40,7 @@ public class CheckUEntityUtil implements ICheckEntityUtil { @Override public boolean checkEntity() { if (mWrapper.getErrorEvent() != null) { - ALog.e(TAG, String.format("上传失败,%s", mWrapper.getErrorEvent().errorMsg)); + ALog.e(TAG, String.format("任务操作失败,%s", mWrapper.getErrorEvent().errorMsg)); return false; } diff --git a/HttpComponent/src/main/java/com/arialyy/aria/http/download/HttpDThreadTaskAdapter.java b/HttpComponent/src/main/java/com/arialyy/aria/http/download/HttpDThreadTaskAdapter.java index 90c1560b..3557af0f 100644 --- a/HttpComponent/src/main/java/com/arialyy/aria/http/download/HttpDThreadTaskAdapter.java +++ b/HttpComponent/src/main/java/com/arialyy/aria/http/download/HttpDThreadTaskAdapter.java @@ -60,10 +60,6 @@ final class HttpDThreadTaskAdapter extends BaseHttpThreadTaskAdapter { HttpURLConnection conn = null; BufferedInputStream is = null; BufferedRandomAccessFile file = null; - if (getThreadRecord().threadId == 1){ - fail(null, false); - return; - } try { URL url = ConnectionHelp.handleUrl(getThreadConfig().url, mTaskOption); conn = ConnectionHelp.handleConnection(url, mTaskOption); diff --git a/app/src/main/java/com/arialyy/simple/core/download/FtpDownloadActivity.java b/app/src/main/java/com/arialyy/simple/core/download/FtpDownloadActivity.java index c170446b..0eddb461 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/FtpDownloadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/FtpDownloadActivity.java @@ -18,34 +18,29 @@ package com.arialyy.simple.core.download; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.widget.Toast; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; -import com.arialyy.aria.core.common.FtpConnectionMode; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.FtpOption; import com.arialyy.aria.core.download.DownloadEntity; -import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.task.DownloadTask; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.CommonUtil; -import com.arialyy.frame.util.show.L; -import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; -import com.arialyy.simple.common.DirChooseDialog; -import com.arialyy.simple.common.ModifyUrlDialog; -import com.arialyy.simple.databinding.ActivityFtpDownloadBinding; -import com.arialyy.simple.util.AppUtil; +import com.arialyy.simple.databinding.ActivitySingleBinding; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; -import java.io.IOException; /** * Created by lyy on 2017/7/25. * Ftp下载 */ -public class FtpDownloadActivity extends BaseActivity { +public class FtpDownloadActivity extends BaseActivity { private String mUrl, mFilePath; private FtpDownloadModule mModule; private long mTaskId; @@ -64,62 +59,36 @@ public class FtpDownloadActivity extends BaseActivity " + task.getDownloadEntity().getFileName()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskPre() protected void onTaskPre(DownloadTask task) { - L.d(TAG, "ftp task pre, fileSize = " + task.getConvertFileSize()); - getBinding().setFileSize(task.getConvertFileSize()); + @Download.onPre + protected void onPre(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskStart() void taskStart(DownloadTask task) { - L.d(TAG, "ftp task create"); + @Download.onTaskStart + void taskStart(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + } } - @Download.onTaskRunning() protected void running(DownloadTask task) { - ALog.d(TAG, "running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); - getBinding().setProgress(task.getPercent()); - getBinding().setSpeed(task.getConvertSpeed()); + @Download.onTaskRunning + protected void running(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "isRunning" + "; state = " + task.getEntity().getState()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskResume() void taskResume(DownloadTask task) { - L.d(TAG, "ftp task resume"); + @Download.onTaskResume + void taskResume(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "resume"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskStop() void taskStop(DownloadTask task) { - L.d(TAG, "ftp task stop"); - getBinding().setSpeed(""); - getBinding().setStateStr(getString(R.string.resume)); + @Download.onTaskStop + void taskStop(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskCancel() void taskCancel(DownloadTask task) { - getBinding().setSpeed(""); - getBinding().setProgress(0); + @Download.onTaskCancel + void taskCancel(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + mTaskId = -1; + Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskFail() void taskFail(DownloadTask task) { - L.d(TAG, "ftp task fail"); - getBinding().setSpeed(""); - getBinding().setStateStr(getString(R.string.resume)); + @Download.onTaskFail + void taskFail(DownloadTask task, Exception e) { + ALog.d(TAG, "下载失败"); + Toast.makeText(this, getString(R.string.download_fail), Toast.LENGTH_SHORT) + .show(); + if (task != null && task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskComplete() void taskComplete(DownloadTask task) { - getBinding().setSpeed(""); - getBinding().setProgress(100); - getBinding().setStateStr(getString(R.string.re_start)); - Log.d(TAG, "md5 ==> " + CommonUtil.getFileMD5(new File(task.getFilePath()))); - T.showShort(this, "文件:" + task.getEntity().getFileName() + ",下载完成"); + @Download.onTaskComplete + void taskComplete(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(this, getString(R.string.download_success), + Toast.LENGTH_SHORT).show(); + ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); + } } @Override protected int setLayoutId() { - return R.layout.activity_ftp_download; - } - - @Override protected void dataCallback(int result, Object data) { - super.dataCallback(result, data); - if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { - mModule.uploadUrl(this, String.valueOf(data)); - } else if (result == DirChooseDialog.DIR_CHOOSE_DIALOG_RESULT) { - mModule.updateFilePath(this, String.valueOf(data)); - } + return R.layout.activity_single; } } diff --git a/app/src/main/java/com/arialyy/simple/core/download/SFtpDownloadActivity.java b/app/src/main/java/com/arialyy/simple/core/download/SFtpDownloadActivity.java index 77e105d9..ef00d1b9 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/SFtpDownloadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/SFtpDownloadActivity.java @@ -18,25 +18,25 @@ package com.arialyy.simple.core.download; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.widget.Toast; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.SFtpOption; import com.arialyy.aria.core.download.DownloadEntity; -import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.task.DownloadTask; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.FileUtil; -import com.arialyy.frame.util.show.L; -import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.common.DirChooseDialog; import com.arialyy.simple.common.ModifyUrlDialog; -import com.arialyy.simple.databinding.ActivitySftpDownloadBinding; +import com.arialyy.simple.databinding.ActivitySingleBinding; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; import java.io.IOException; @@ -44,7 +44,7 @@ import java.io.IOException; * Created by lyy on 2017/7/25. * Ftp下载 */ -public class SFtpDownloadActivity extends BaseActivity { +public class SFtpDownloadActivity extends BaseActivity { private String mUrl, mFilePath; private FtpDownloadModule mModule; private long mTaskId; @@ -67,29 +67,36 @@ public class SFtpDownloadActivity extends BaseActivity " + task.getDownloadEntity().getFileName()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskPre() protected void onTaskPre(DownloadTask task) { - L.d(TAG, "ftp task pre, fileSize = " + task.getConvertFileSize()); - getBinding().setFileSize(task.getConvertFileSize()); + @Download.onPre + protected void onPre(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskStart() void taskStart(DownloadTask task) { - L.d(TAG, "ftp task create"); + @Download.onTaskStart + void taskStart(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + } } - @Download.onTaskRunning() protected void running(DownloadTask task) { - ALog.d(TAG, "running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); - getBinding().setProgress(task.getPercent()); - getBinding().setSpeed(task.getConvertSpeed()); + @Download.onTaskRunning + protected void running(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "isRunning" + "; state = " + task.getEntity().getState()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskResume() void taskResume(DownloadTask task) { - L.d(TAG, "ftp task resume"); + @Download.onTaskResume + void taskResume(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "resume"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskStop() void taskStop(DownloadTask task) { - L.d(TAG, "ftp task stop"); - getBinding().setSpeed(""); - getBinding().setStateStr(getString(R.string.resume)); + @Download.onTaskStop + void taskStop(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskCancel() void taskCancel(DownloadTask task) { - getBinding().setSpeed(""); - getBinding().setProgress(0); + @Download.onTaskCancel + void taskCancel(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + mTaskId = -1; + Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskFail() void taskFail(DownloadTask task) { - L.d(TAG, "ftp task fail"); - getBinding().setSpeed(""); - getBinding().setStateStr(getString(R.string.resume)); + @Download.onTaskFail + void taskFail(DownloadTask task, Exception e) { + ALog.d(TAG, "下载失败"); + Toast.makeText(this, getString(R.string.download_fail), Toast.LENGTH_SHORT) + .show(); + if (task != null && task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } } - @Download.onTaskComplete() void taskComplete(DownloadTask task) { - getBinding().setSpeed(""); - getBinding().setProgress(100); - getBinding().setStateStr(getString(R.string.re_start)); - Log.d(TAG, "md5 ==> " + CommonUtil.getFileMD5(new File(task.getFilePath()))); - T.showShort(this, "文件:" + task.getEntity().getFileName() + ",下载完成"); + @Download.onTaskComplete + void taskComplete(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(this, getString(R.string.download_success), + Toast.LENGTH_SHORT).show(); + ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); + } } @Override protected int setLayoutId() { - return R.layout.activity_sftp_download; + return R.layout.activity_single; } @Override protected void dataCallback(int result, Object data) { diff --git a/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java b/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java index a3988528..b2860ec1 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java @@ -20,7 +20,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.os.StatFs; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -32,6 +31,7 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.HttpOption; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.inf.IEntity; @@ -43,9 +43,8 @@ import com.arialyy.aria.util.CommonUtil; import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; -import com.arialyy.simple.common.ModifyPathDialog; -import com.arialyy.simple.common.ModifyUrlDialog; import com.arialyy.simple.databinding.ActivitySingleBinding; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; import java.util.List; import java.util.Map; @@ -96,36 +95,32 @@ public class SingleTaskActivity extends BaseActivity { return; } mTaskId = entity.getId(); - if (entity.getState() == IEntity.STATE_STOP) { - getBinding().setStateStr(getString(R.string.resume)); - } else if (entity.getState() == IEntity.STATE_RUNNING) { - getBinding().setStateStr(getString(R.string.stop)); - } - - if (entity.getFileSize() != 0) { - getBinding().setFileSize(CommonUtil.formatFileSize(entity.getFileSize())); - getBinding().setProgress(entity.isComplete() ? 100 - : (int) (entity.getCurrentProgress() * 100 / entity.getFileSize())); - } - getBinding().setUrl(entity.getUrl()); - getBinding().setFilePath(entity.getFilePath()); mUrl = entity.getUrl(); mFilePath = entity.getFilePath(); + getBinding().pl.setInfo(entity); } }); - getBinding().setViewModel(this); - } + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override public void create(View v, AbsEntity entity) { + startD(); + } - public void chooseUrl() { - ModifyUrlDialog dialog = - new ModifyUrlDialog(this, getString(R.string.modify_url_dialog_title), mUrl); - dialog.show(getSupportFragmentManager(), "ModifyUrlDialog"); - } + @Override public void stop(View v, AbsEntity entity) { + Aria.download(this) + .load(mTaskId) + .stop(); + } + + @Override public void resume(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId) + //.updateUrl(mUrl) + .resume(); + } - public void chooseFilePath() { - ModifyPathDialog dialog = - new ModifyPathDialog(this, getString(R.string.modify_file_path), mFilePath); - dialog.show(getSupportFragmentManager(), "ModifyPathDialog"); + @Override public void cancel(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).cancel(); + } + }); } @Override @@ -174,20 +169,21 @@ public class SingleTaskActivity extends BaseActivity { void onWait(DownloadTask task) { if (task.getKey().equals(mUrl)) { Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onPre protected void onPre(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.stop)); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskStart void taskStart(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setFileSize(task.getConvertFileSize()); + getBinding().pl.setInfo(task.getEntity()); ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); } } @@ -195,32 +191,24 @@ public class SingleTaskActivity extends BaseActivity { @Download.onTaskRunning protected void running(DownloadTask task) { if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "isRunning"); - //Log.d(TAG, task.getKey()); - long len = task.getFileSize(); - if (len == 0) { - getBinding().setProgress(0); - } else { - getBinding().setProgress(task.getPercent()); - } - getBinding().setSpeed(task.getConvertSpeed()); - getBinding().setTimeLeft(task.getConvertTimeLeft()); + ALog.d(TAG, "isRunning" + "; state = " + task.getEntity().getState()); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskResume void taskResume(DownloadTask task) { - ALog.d(TAG, "resume"); if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.stop)); + ALog.d(TAG, "resume"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskStop void taskStop(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.resume)); - getBinding().setSpeed(""); + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); } } @@ -228,10 +216,8 @@ public class SingleTaskActivity extends BaseActivity { void taskCancel(DownloadTask task) { if (task.getKey().equals(mUrl)) { mTaskId = -1; - getBinding().setProgress(0); - getBinding().setStateStr(getString(R.string.start)); - getBinding().setSpeed(""); Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); } } @@ -241,19 +227,17 @@ public class SingleTaskActivity extends BaseActivity { Toast.makeText(SingleTaskActivity.this, getString(R.string.download_fail), Toast.LENGTH_SHORT) .show(); if (task != null && task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.start)); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskComplete void taskComplete(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setProgress(100); Toast.makeText(SingleTaskActivity.this, getString(R.string.download_success), Toast.LENGTH_SHORT).show(); - getBinding().setStateStr(getString(R.string.re_start)); - getBinding().setSpeed(""); ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); } } @@ -262,29 +246,6 @@ public class SingleTaskActivity extends BaseActivity { return R.layout.activity_single; } - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (mTaskId == -1) { - startD(); - break; - } - if (Aria.download(this).load(mTaskId).isRunning()) { - Aria.download(this) - .load(mTaskId) - .stop(); - } else { - Aria.download(this).load(mTaskId) - //.updateUrl(mUrl) - .resume(); - } - break; - case R.id.cancel: - Aria.download(this).load(mTaskId).cancel(); - break; - } - } - private void startD() { HttpOption option = new HttpOption(); option.addHeader("1", "@") @@ -309,15 +270,6 @@ public class SingleTaskActivity extends BaseActivity { return super.dispatchTouchEvent(ev); } - @Override protected void dataCallback(int result, Object data) { - super.dataCallback(result, data); - if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { - mModule.uploadUrl(this, String.valueOf(data)); - } else if (result == ModifyPathDialog.MODIFY_PATH_RESULT) { - mModule.updateFilePath(this, String.valueOf(data)); - } - } - static class FileLenAdapter implements IHttpFileLenAdapter { @Override public long handleFileLen(Map> headers) { diff --git a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java index 171b6207..1773d07a 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java @@ -26,7 +26,9 @@ import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.arialyy.annotations.Download; +import com.arialyy.annotations.M3U8; import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.m3u8.M3U8LiveOption; import com.arialyy.aria.core.processor.IBandWidthUrlConverter; @@ -40,7 +42,7 @@ import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.common.ModifyPathDialog; import com.arialyy.simple.common.ModifyUrlDialog; import com.arialyy.simple.databinding.ActivityM3u8LiveBinding; -import com.arialyy.simple.util.AppUtil; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; public class M3U8LiveDLoadActivity extends BaseActivity { @@ -48,7 +50,6 @@ public class M3U8LiveDLoadActivity extends BaseActivity private String mUrl; private String mFilePath; private M3U8LiveModule mModule; - private DownloadEntity mEntity; private long mTaskId; @Override @@ -63,28 +64,30 @@ public class M3U8LiveDLoadActivity extends BaseActivity if (entity == null) { return; } - mEntity = entity; - mTaskId = mEntity.getId(); - getBinding().setStateStr(getString(R.string.start)); - getBinding().setUrl(entity.getUrl()); - getBinding().setFilePath(entity.getFilePath()); + mTaskId = entity.getId(); mUrl = entity.getUrl(); mFilePath = entity.getFilePath(); + getBinding().pl.setInfo(entity); } }); - getBinding().setViewModel(this); - } + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override public void create(View v, AbsEntity entity) { + startD(); + } - public void chooseUrl() { - ModifyUrlDialog dialog = - new ModifyUrlDialog(this, getString(R.string.modify_url_dialog_title), mUrl); - dialog.show(getSupportFragmentManager(), "ModifyUrlDialog"); - } + @Override public void stop(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).stop(); + } + + @Override public void resume(View v, AbsEntity entity) { + ALog.d(TAG, "m3u8 live 不支持恢复"); + } - public void chooseFilePath() { - ModifyPathDialog dialog = - new ModifyPathDialog(this, getString(R.string.modify_file_path), mFilePath); - dialog.show(getSupportFragmentManager(), "ModifyPathDialog"); + @Override public void cancel(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).cancel(true); + mTaskId = -1; + } + }); } @Override @@ -129,6 +132,22 @@ public class M3U8LiveDLoadActivity extends BaseActivity return true; } + @M3U8.onPeerStart + void onPeerStart(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer create, path: " + peerPath + ", index: " + peerIndex); + } + + @M3U8.onPeerComplete + void onPeerComplete(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer complete, path: " + peerPath + ", index: " + peerIndex); + //mVideoFragment.addPlayer(peerIndex, peerPath); + } + + @M3U8.onPeerFail + void onPeerFail(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer fail, path: " + peerPath + ", index: " + peerIndex); + } + @Download.onWait void onWait(DownloadTask task) { if (task.getKey().equals(mUrl)) { @@ -139,71 +158,70 @@ public class M3U8LiveDLoadActivity extends BaseActivity @Download.onPre protected void onPre(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.stop)); + ALog.d(TAG, "pre"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskStart void taskStart(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setFileSize(task.getConvertFileSize()); ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskRunning protected void running(DownloadTask task) { if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "isRunning"); - getBinding().setProgress(task.getPercent()); - getBinding().setSpeed(task.getConvertSpeed()); + ALog.d(TAG, + "m3u8 void running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskResume void taskResume(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.stop)); + ALog.d(TAG, "m3u8 vod resume"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskStop void taskStop(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.resume)); - getBinding().setSpeed(""); + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskCancel void taskCancel(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setProgress(0); - getBinding().setStateStr(getString(R.string.start)); - getBinding().setSpeed(""); Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskFail void taskFail(DownloadTask task, Exception e) { - if (task != null && task.getKey().equals(mUrl)) { - Toast.makeText(M3U8LiveDLoadActivity.this, getString(R.string.download_fail), + if (task.getKey().equals(mUrl)) { + Toast.makeText(this, getString(R.string.download_fail), Toast.LENGTH_SHORT) .show(); - getBinding().setStateStr(getString(R.string.start)); + Log.d(TAG, "fail"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskComplete void taskComplete(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setProgress(100); - Toast.makeText(M3U8LiveDLoadActivity.this, getString(R.string.download_success), + Toast.makeText(this, getString(R.string.download_success), Toast.LENGTH_SHORT).show(); - getBinding().setStateStr(getString(R.string.re_start)); - getBinding().setSpeed(""); ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); } } @@ -212,28 +230,11 @@ public class M3U8LiveDLoadActivity extends BaseActivity return R.layout.activity_m3u8_live; } - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (Aria.download(this).load(mTaskId).isRunning()) { - Aria.download(this).load(mTaskId).stop(); - } else { - startD(); - } - break; - case R.id.cancel: - if (mTaskId != -1){ - Aria.download(this).load(mTaskId).cancel(true); - mTaskId = -1; - } - break; - } - } - private void startD() { mTaskId = Aria.download(M3U8LiveDLoadActivity.this) .load(mUrl) - .setFilePath(mFilePath, true) + .setFilePath(mFilePath) + .ignoreFilePathOccupy() .m3u8LiveOption(getLiveoption()) .create(); } diff --git a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java index 2255b5b0..a8f6e80e 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java @@ -25,17 +25,15 @@ import android.view.View; import android.widget.SeekBar; import android.widget.Toast; import androidx.annotation.Nullable; -import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.arialyy.annotations.Download; import com.arialyy.annotations.M3U8; import com.arialyy.aria.core.Aria; -import com.arialyy.aria.core.common.controller.BuilderController; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.M3U8Entity; import com.arialyy.aria.core.download.m3u8.M3U8VodOption; -import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.processor.IBandWidthUrlConverter; import com.arialyy.aria.core.processor.IKeyUrlConverter; import com.arialyy.aria.core.processor.ITsMergeHandler; @@ -50,6 +48,7 @@ import com.arialyy.simple.common.ModifyPathDialog; import com.arialyy.simple.common.ModifyUrlDialog; import com.arialyy.simple.databinding.ActivityM3u8VodBinding; import com.arialyy.simple.to.PeerIndex; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -77,32 +76,20 @@ public class M3U8VodDLoadActivity extends BaseActivity { if (entity == null) { return; } - if (entity.getM3U8Entity() != null){ - getBinding().pb.setMax(entity.getM3U8Entity().getPeerNum()); + if (entity.getM3U8Entity() != null) { + getBinding().seekBar.setMax(entity.getM3U8Entity().getPeerNum()); } mTaskId = entity.getId(); - if (entity.getState() == IEntity.STATE_STOP) { - getBinding().setStateStr(getString(R.string.resume)); - } else if (entity.getState() == IEntity.STATE_RUNNING) { - getBinding().setStateStr(getString(R.string.stop)); - } - - if (entity.getFileSize() != 0) { - getBinding().setFileSize(CommonUtil.formatFileSize(entity.getFileSize())); - } - getBinding().setProgress(entity.getPercent()); - getBinding().setUrl(entity.getUrl()); - getBinding().setFilePath(entity.getFilePath()); mUrl = entity.getUrl(); mFilePath = entity.getFilePath(); + getBinding().pl.setInfo(entity); //mVideoFragment = new VideoPlayerFragment(0, entity); //FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); //ft.add(R.id.video_content, mVideoFragment); //ft.commit(); } }); - getBinding().setViewModel(this); - getBinding().pb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + getBinding().seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @@ -115,6 +102,27 @@ public class M3U8VodDLoadActivity extends BaseActivity { Aria.download(this).load(mTaskId).m3u8VodOption().jumPeerIndex(seekBar.getProgress()); } }); + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override public void create(View v, AbsEntity entity) { + startD(); + } + + @Override public void stop(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).stop(); + } + + @Override public void resume(View v, AbsEntity entity) { + Aria.download(this) + .load(mTaskId) + .m3u8VodOption(getM3U8Option()) + .resume(); + } + + @Override public void cancel(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).cancel(); + mTaskId = -1; + } + }); } public void chooseUrl() { @@ -212,50 +220,50 @@ public class M3U8VodDLoadActivity extends BaseActivity { @Download.onPre protected void onPre(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.stop)); + ALog.d(TAG, "pre"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskStart void taskStart(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().pb.setMax(task.getEntity().getM3U8Entity().getPeerNum()); ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + getBinding().seekBar.setMax(task.getEntity().getM3U8Entity().getPeerNum()); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskRunning protected void running(DownloadTask task) { if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "m3u8 void running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); - getBinding().setProgress(task.getPercent()); - getBinding().setSpeed(task.getConvertSpeed()); + ALog.d(TAG, + "m3u8 void running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskResume void taskResume(DownloadTask task) { - ALog.d(TAG, "m3u8 vod resume"); if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.stop)); + ALog.d(TAG, "m3u8 vod resume"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskStop void taskStop(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setStateStr(getString(R.string.resume)); - getBinding().setSpeed(""); + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskCancel void taskCancel(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setProgress(0); - getBinding().setStateStr(getString(R.string.start)); - getBinding().setSpeed(""); Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); } } @@ -265,21 +273,18 @@ public class M3U8VodDLoadActivity extends BaseActivity { Toast.makeText(M3U8VodDLoadActivity.this, getString(R.string.download_fail), Toast.LENGTH_SHORT) .show(); - getBinding().setStateStr(getString(R.string.start)); - getBinding().setSpeed(""); Log.d(TAG, "fail"); + getBinding().pl.setInfo(task.getEntity()); } } @Download.onTaskComplete void taskComplete(DownloadTask task) { if (task.getKey().equals(mUrl)) { - getBinding().setProgress(100); Toast.makeText(M3U8VodDLoadActivity.this, getString(R.string.download_success), Toast.LENGTH_SHORT).show(); - getBinding().setStateStr(getString(R.string.re_start)); - getBinding().setSpeed(""); ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); } } @@ -288,33 +293,11 @@ public class M3U8VodDLoadActivity extends BaseActivity { return R.layout.activity_m3u8_vod; } - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (mTaskId == -1) { - startD(); - break; - } - if (Aria.download(this).load(mTaskId).isRunning()) { - Aria.download(this).load(mTaskId).stop(); - } else { - Aria.download(this) - .load(mTaskId) - .m3u8VodOption(getM3U8Option()) - .resume(); - } - break; - case R.id.cancel: - Aria.download(this).load(mTaskId).cancel(); - mTaskId = -1; - break; - } - } - private void startD() { mTaskId = Aria.download(M3U8VodDLoadActivity.this) .load(mUrl) - .setFilePath(mFilePath, true) + .setFilePath(mFilePath) + .ignoreFilePathOccupy() .m3u8VodOption(getM3U8Option()) .create(); } @@ -326,7 +309,7 @@ public class M3U8VodDLoadActivity extends BaseActivity { //.generateIndexFile() //.merge(true) .setVodTsUrlConvert(new VodTsUrlConverter()); - //.setMergeHandler(new TsMergeHandler()); + //.setMergeHandler(new TsMergeHandler()); option.setKeyUrlConverter(new KeyUrlConverter()); //option.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl)); return option; @@ -379,7 +362,7 @@ public class M3U8VodDLoadActivity extends BaseActivity { } } - static class KeyUrlConverter implements IKeyUrlConverter{ + static class KeyUrlConverter implements IKeyUrlConverter { @Override public String convert(String m3u8Url, String keyUrl) { ALog.d("TAG", "convertUrl...."); diff --git a/app/src/main/java/com/arialyy/simple/core/upload/FtpUploadActivity.java b/app/src/main/java/com/arialyy/simple/core/upload/FtpUploadActivity.java index e9ccaa54..b3f1ad73 100644 --- a/app/src/main/java/com/arialyy/simple/core/upload/FtpUploadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/upload/FtpUploadActivity.java @@ -15,41 +15,36 @@ */ package com.arialyy.simple.core.upload; -import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; +import android.widget.Toast; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.arialyy.annotations.Upload; import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.FtpOption; -import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.processor.FtpInterceptHandler; import com.arialyy.aria.core.processor.IFtpUploadInterceptor; import com.arialyy.aria.core.task.UploadTask; import com.arialyy.aria.core.upload.UploadEntity; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.CommonUtil; -import com.arialyy.frame.util.FileUtil; -import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; -import com.arialyy.simple.common.ModifyUrlDialog; -import com.arialyy.simple.databinding.ActivityFtpUploadBinding; -import com.arialyy.simple.util.AppUtil; +import com.arialyy.simple.databinding.ActivitySingleBinding; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; -import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by lyy on 2017/7/28. Ftp 文件上传demo */ -public class FtpUploadActivity extends BaseActivity { +public class FtpUploadActivity extends BaseActivity { private final int OPEN_FILE_MANAGER_CODE = 0xB1; private String mFilePath; private String mUrl; @@ -62,7 +57,6 @@ public class FtpUploadActivity extends BaseActivity { super.init(savedInstanceState); Aria.upload(this).register(); - getBinding().setViewModel(this); setUI(); } @@ -71,79 +65,43 @@ public class FtpUploadActivity extends BaseActivity { mModule.getFtpInfo(this).observe(this, new Observer() { @Override public void onChanged(@Nullable UploadEntity entity) { if (entity != null) { - mTaskId = entity.getId(); - if (entity.getFileSize() != 0) { - getBinding().setFileSize(CommonUtil.formatFileSize(entity.getFileSize())); - getBinding().setProgress(entity.isComplete() ? 100 - : (int) (entity.getCurrentProgress() * 100 / entity.getFileSize())); - } - getBinding().setUrl(entity.getUrl()); - getBinding().setFilePath(entity.getFilePath()); - mUrl = entity.getUrl(); mFilePath = entity.getFilePath(); - getBinding().setStateStr(getString( - entity.getState() == IEntity.STATE_RUNNING ? R.string.stop : R.string.start)); - } else { - getBinding().setStateStr(getString(R.string.resume)); + mUrl = entity.getUrl(); + mTaskId = entity.getId(); + getBinding().pl.setInfo(entity); } } }); - setHelpCode(); - } - - private void setHelpCode() { - //try { - // getBinding().codeView.setSource(AppUtil.getHelpCode(this, "FtpUpload.java")); - //} catch (IOException e) { - // e.printStackTrace(); - //} - } - - @Override protected int setLayoutId() { - return R.layout.activity_ftp_upload; - } + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override public void create(View v, AbsEntity entity) { + mTaskId = Aria.upload(this) + .loadFtp(mFilePath) + .setUploadUrl(mUrl) + .option(getOption()) + .ignoreFilePathOccupy() + .create(); + } - public void chooseUrl() { - ModifyUrlDialog dialog = - new ModifyUrlDialog(this, getString(R.string.modify_url_dialog_title), mUrl); - dialog.show(getSupportFragmentManager(), "ModifyUrlDialog"); - } + @Override public void stop(View v, AbsEntity entity) { + Aria.upload(this).loadFtp(mTaskId).stop(); + } - public void chooseFilePath() { - AppUtil.chooseFile(this, new File(mFilePath), null, OPEN_FILE_MANAGER_CODE); - } + @Override public void resume(View v, AbsEntity entity) { + Aria.upload(this) + .loadFtp(mTaskId) + .option(getOption()) + .resume(); + } - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (mTaskId == -1) { - mTaskId = Aria.upload(this) - .loadFtp(mFilePath) - .setUploadUrl(mUrl) - .option(getOption()) - .forceUpload() - .create(); - getBinding().setStateStr(getString(R.string.stop)); - break; - } - if (Aria.upload(this).loadFtp(mTaskId).isRunning()) { - Aria.upload(this).loadFtp(mTaskId).stop(); - getBinding().setStateStr(getString(R.string.resume)); - } else { - Aria.upload(this) - .loadFtp(mTaskId) - .option(getOption()) - .resume(); - getBinding().setStateStr(getString(R.string.stop)); - } - //upload(); - break; - case R.id.cancel: + @Override public void cancel(View v, AbsEntity entity) { Aria.upload(this).loadFtp(mTaskId).cancel(false); mTaskId = -1; - getBinding().setStateStr(getString(R.string.start)); - break; - } + } + }); + } + + @Override protected int setLayoutId() { + return R.layout.activity_single; } private void upload() { @@ -175,69 +133,79 @@ public class FtpUploadActivity extends BaseActivity { return option; } - @Upload.onWait void onWait(UploadTask task) { - Log.d(TAG, task.getTaskName() + "_wait"); - } - - @Upload.onPre public void onPre(UploadTask task) { - getBinding().setFileSize(task.getConvertFileSize()); - } - - @Upload.onTaskStart public void taskStart(UploadTask task) { - Log.d(TAG, "开始上传,md5:" + FileUtil.getFileMD5(new File(task.getEntity().getFilePath()))); + @Upload.onWait + void onWait(UploadTask task) { + if (task.getKey().equals(mUrl)) { + Log.d(TAG, "wait ==> " + task.getEntity().getFileName()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskResume public void taskResume(UploadTask task) { - Log.d(TAG, "恢复上传"); + @Upload.onPre + protected void onPre(UploadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskStop public void taskStop(UploadTask task) { - getBinding().setSpeed(""); - Log.d(TAG, "停止上传"); + @Upload.onTaskStart + void taskStart(UploadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + } } - @Upload.onTaskCancel public void taskCancel(UploadTask task) { - getBinding().setSpeed(""); - getBinding().setFileSize(""); - getBinding().setProgress(0); - Log.d(TAG, "删除任务"); + @Upload.onTaskRunning + protected void running(UploadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "isRunning" + "; state = " + task.getEntity().getState()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskFail public void taskFail(UploadTask task) { - Log.d(TAG, "上传失败"); - getBinding().setStateStr(getString(R.string.resume)); + @Upload.onTaskResume + void taskResume(UploadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "resume"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskRunning public void taskRunning(UploadTask task) { - Log.d(TAG, "PP = " + task.getPercent()); - getBinding().setProgress(task.getPercent()); - getBinding().setSpeed(task.getConvertSpeed()); + @Upload.onTaskStop + void taskStop(UploadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskComplete public void taskComplete(UploadTask task) { - getBinding().setProgress(100); - getBinding().setSpeed(""); - T.showShort(this, "文件:" + task.getEntity().getFileName() + ",上传完成"); - getBinding().setStateStr(getString(R.string.re_start)); + @Upload.onTaskCancel + void taskCancel(UploadTask task) { + if (task.getKey().equals(mUrl)) { + mTaskId = -1; + Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Override protected void dataCallback(int result, Object data) { - super.dataCallback(result, data); - if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { - mModule.updateFtpUrl(this, String.valueOf(data)); + @Upload.onTaskFail + void taskFail(UploadTask task, Exception e) { + ALog.d(TAG, "fail"); + Toast.makeText(this, getString(R.string.download_fail), Toast.LENGTH_SHORT) + .show(); + if (task != null && task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); } } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == OPEN_FILE_MANAGER_CODE && resultCode == RESULT_OK) { - Uri uri = data.getData(); - if (uri != null) { - mModule.updateFtpFilePath(this, uri.getPath()); - ALog.d(TAG, String.format("选择的文件路径:%s", uri.getPath())); - } else { - ALog.d(TAG, "没有选择文件"); - } + @Upload.onTaskComplete + void taskComplete(UploadTask task) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(this, getString(R.string.download_success), + Toast.LENGTH_SHORT).show(); + ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getEntity().getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); } } diff --git a/app/src/main/java/com/arialyy/simple/core/upload/HttpUploadActivity.java b/app/src/main/java/com/arialyy/simple/core/upload/HttpUploadActivity.java index 99853e7b..76fee636 100644 --- a/app/src/main/java/com/arialyy/simple/core/upload/HttpUploadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/upload/HttpUploadActivity.java @@ -17,29 +17,28 @@ package com.arialyy.simple.core.upload; import android.os.Bundle; -import android.os.Environment; import android.view.View; import com.arialyy.annotations.Upload; import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.HttpOption; import com.arialyy.aria.core.common.RequestEnum; import com.arialyy.aria.core.task.UploadTask; import com.arialyy.aria.core.upload.UploadEntity; +import com.arialyy.aria.util.ALog; import com.arialyy.frame.util.FileUtil; -import com.arialyy.frame.util.show.L; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; -import com.arialyy.simple.databinding.ActivityUploadBinding; +import com.arialyy.simple.databinding.ActivitySingleBinding; import com.arialyy.simple.util.AppUtil; -import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; /** * Created by lyy on 2017/2/9. */ -public class HttpUploadActivity extends BaseActivity { +public class HttpUploadActivity extends BaseActivity { private static final String TAG = "HttpUploadActivity"; - HorizontalProgressBarWithNumber mPb; private final String FILE_PATH = "/mnt/sdcard/QQMusic-import-1.2.1.zip"; //private final String FILE_PATH = @@ -47,7 +46,7 @@ public class HttpUploadActivity extends BaseActivity { private UploadEntity mEntity; @Override protected int setLayoutId() { - return R.layout.activity_upload; + return R.layout.activity_single; } @Override protected void init(Bundle savedInstanceState) { @@ -56,24 +55,26 @@ public class HttpUploadActivity extends BaseActivity { Aria.upload(this).getTaskList(); mEntity = Aria.upload(this).getFirstUploadEntity(FILE_PATH); - + getBinding().pl.setInfo(mEntity); Aria.upload(this).register(); - getBinding().upload.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { + + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override public void create(View v, AbsEntity entity) { upload(); } - }); - getBinding().stop.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - stop(); + + @Override public void stop(View v, AbsEntity entity) { + HttpUploadActivity.this.stop(); } - }); - getBinding().remove.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { + + @Override public void resume(View v, AbsEntity entity) { + upload(); + } + + @Override public void cancel(View v, AbsEntity entity) { remove(); } }); - mPb = getBinding().pb; } void upload() { @@ -107,32 +108,29 @@ public class HttpUploadActivity extends BaseActivity { } @Upload.onTaskStart public void taskStart(UploadTask task) { - L.d(TAG, "upload create,md5:" + FileUtil.getFileMD5(new File(task.getEntity().getFilePath()))); - getBinding().setFileSize(task.getConvertFileSize()); + ALog.d(TAG, + "upload create,md5:" + FileUtil.getFileMD5(new File(task.getEntity().getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); } @Upload.onTaskStop public void taskStop(UploadTask task) { - L.d(TAG, "upload stop"); - getBinding().setSpeed(""); - getBinding().setProgress(0); + ALog.d(TAG, "upload stop"); + getBinding().pl.setInfo(task.getEntity()); } @Upload.onTaskCancel public void taskCancel(UploadTask task) { - L.d(TAG, "upload cancel"); - getBinding().setSpeed(""); - getBinding().setProgress(0); + ALog.d(TAG, "upload cancel"); + getBinding().pl.setInfo(task.getEntity()); } @Upload.onTaskRunning public void taskRunning(UploadTask task) { - getBinding().setSpeed(task.getConvertSpeed()); - getBinding().setProgress(task.getPercent()); - L.d(TAG, "running, P = " + task.getPercent()); + ALog.d(TAG, "running, P = " + task.getPercent()); + getBinding().pl.setInfo(task.getEntity()); } @Upload.onTaskComplete public void taskComplete(UploadTask task) { - L.d(TAG, "上传完成"); - L.d(TAG, "上传成功服务端返回数据(如果有的话):" + task.getEntity().getResponseStr()); - getBinding().setSpeed(""); - getBinding().setProgress(100); + ALog.d(TAG, "上传完成"); + ALog.d(TAG, "上传成功服务端返回数据(如果有的话):" + task.getEntity().getResponseStr()); + getBinding().pl.setInfo(task.getEntity()); } } diff --git a/app/src/main/java/com/arialyy/simple/core/upload/SFtpUploadActivity.java b/app/src/main/java/com/arialyy/simple/core/upload/SFtpUploadActivity.java index 7d0a58f8..d208dc8b 100644 --- a/app/src/main/java/com/arialyy/simple/core/upload/SFtpUploadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/upload/SFtpUploadActivity.java @@ -15,38 +15,31 @@ */ package com.arialyy.simple.core.upload; -import android.content.Intent; -import android.net.Uri; import android.os.Bundle; -import android.os.Environment; import android.util.Log; import android.view.View; +import android.widget.Toast; import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.arialyy.annotations.Upload; import com.arialyy.aria.core.Aria; +import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.SFtpOption; -import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.task.UploadTask; import com.arialyy.aria.core.upload.UploadEntity; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.CommonUtil; -import com.arialyy.frame.util.FileUtil; -import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; -import com.arialyy.simple.common.ModifyUrlDialog; -import com.arialyy.simple.databinding.ActivitySftpUploadBinding; -import com.arialyy.simple.util.AppUtil; +import com.arialyy.simple.databinding.ActivitySingleBinding; +import com.arialyy.simple.widget.ProgressLayout; import java.io.File; -import java.util.ArrayList; -import java.util.List; /** * Created by lyy on 2017/7/28. Ftp 文件上传demo */ -public class SFtpUploadActivity extends BaseActivity { +public class SFtpUploadActivity extends BaseActivity { private final int OPEN_FILE_MANAGER_CODE = 0xB1; private String mFilePath; private String mUrl; @@ -59,7 +52,6 @@ public class SFtpUploadActivity extends BaseActivity super.init(savedInstanceState); Aria.upload(this).register(); - getBinding().setViewModel(this); setUI(); } @@ -69,100 +61,42 @@ public class SFtpUploadActivity extends BaseActivity @Override public void onChanged(@Nullable UploadEntity entity) { if (entity != null) { mTaskId = entity.getId(); - if (entity.getFileSize() != 0) { - getBinding().setFileSize(CommonUtil.formatFileSize(entity.getFileSize())); - getBinding().setProgress(entity.isComplete() ? 100 - : (int) (entity.getCurrentProgress() * 100 / entity.getFileSize())); - } - getBinding().setUrl(entity.getUrl()); - getBinding().setFilePath(entity.getFilePath()); mUrl = entity.getUrl(); mFilePath = entity.getFilePath(); - getBinding().setStateStr(getString( - entity.getState() == IEntity.STATE_RUNNING ? R.string.stop : R.string.start)); - } else { - getBinding().setStateStr(getString(R.string.resume)); + getBinding().pl.setInfo(entity); } } }); - setHelpCode(); - } - - private void setHelpCode() { - //try { - // getBinding().codeView.setSource(AppUtil.getHelpCode(this, "FtpUpload.java")); - //} catch (IOException e) { - // e.printStackTrace(); - //} - } - - @Override protected int setLayoutId() { - return R.layout.activity_sftp_upload; - } + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override public void create(View v, AbsEntity entity) { + mTaskId = Aria.upload(this) + .loadFtp(mFilePath) + .setUploadUrl(mUrl) + .sftpOption(getOption()) + .ignoreFilePathOccupy() + .create(); + } - public void chooseUrl() { - ModifyUrlDialog dialog = - new ModifyUrlDialog(this, getString(R.string.modify_url_dialog_title), mUrl); - dialog.show(getSupportFragmentManager(), "ModifyUrlDialog"); - } + @Override public void stop(View v, AbsEntity entity) { + Aria.upload(this).loadFtp(mTaskId).stop(); + } - public void chooseFilePath() { - AppUtil.chooseFile(this, new File(mFilePath), null, OPEN_FILE_MANAGER_CODE); - } + @Override public void resume(View v, AbsEntity entity) { + Aria.upload(this) + .loadFtp(mTaskId) + .sftpOption(getOption()) + .resume(); + } - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (mTaskId == -1) { - mTaskId = Aria.upload(this) - .loadFtp(mFilePath) - .setUploadUrl(mUrl) - .sftpOption(getOption()) - .ignoreFilePathOccupy() - .create(); - getBinding().setStateStr(getString(R.string.stop)); - break; - } - if (Aria.upload(this).loadFtp(mTaskId).isRunning()) { - Aria.upload(this).loadFtp(mTaskId).stop(); - getBinding().setStateStr(getString(R.string.resume)); - } else { - Aria.upload(this) - .loadFtp(mTaskId) - .sftpOption(getOption()) - .resume(); - getBinding().setStateStr(getString(R.string.stop)); - } - //upload(); - break; - case R.id.cancel: + @Override public void cancel(View v, AbsEntity entity) { Aria.upload(this).loadFtp(mTaskId).cancel(false); mTaskId = -1; - getBinding().setStateStr(getString(R.string.start)); - break; - } + } + }); } - private void upload() { - List paths = new ArrayList<>(); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/1.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/2.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/3.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/4.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/5.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/6.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/7.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/8.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/9.jpg"); - paths.add(Environment.getExternalStorageDirectory().getPath() + "/Download/img/img/10.jpg"); - for (String path : paths) { - Aria.upload(this) - .loadFtp(path) - .setUploadUrl(mUrl) - .sftpOption(getOption()) - .ignoreFilePathOccupy() - .create(); - } + @Override protected int setLayoutId() { + return R.layout.activity_single; } private SFtpOption getOption() { @@ -171,69 +105,79 @@ public class SFtpUploadActivity extends BaseActivity return option; } - @Upload.onWait void onWait(UploadTask task) { - Log.d(TAG, task.getTaskName() + "_wait"); - } - - @Upload.onPre public void onPre(UploadTask task) { - getBinding().setFileSize(task.getConvertFileSize()); - } - - @Upload.onTaskStart public void taskStart(UploadTask task) { - Log.d(TAG, "开始上传,md5:" + FileUtil.getFileMD5(new File(task.getEntity().getFilePath()))); + @Upload.onWait + void onWait(UploadTask task) { + if (task.getKey().equals(mUrl)) { + Log.d(TAG, "wait ==> " + task.getEntity().getFileName()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskResume public void taskResume(UploadTask task) { - Log.d(TAG, "恢复上传"); + @Upload.onPre + protected void onPre(UploadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskStop public void taskStop(UploadTask task) { - getBinding().setSpeed(""); - Log.d(TAG, "停止上传"); + @Upload.onTaskStart + void taskStart(UploadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + } } - @Upload.onTaskCancel public void taskCancel(UploadTask task) { - getBinding().setSpeed(""); - getBinding().setFileSize(""); - getBinding().setProgress(0); - Log.d(TAG, "删除任务"); + @Upload.onTaskRunning + protected void running(UploadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "isRunning" + "; state = " + task.getEntity().getState()); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskFail public void taskFail(UploadTask task) { - Log.d(TAG, "上传失败"); - getBinding().setStateStr(getString(R.string.resume)); + @Upload.onTaskResume + void taskResume(UploadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "resume"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskRunning public void taskRunning(UploadTask task) { - Log.d(TAG, "PP = " + task.getPercent()); - getBinding().setProgress(task.getPercent()); - getBinding().setSpeed(task.getConvertSpeed()); + @Upload.onTaskStop + void taskStop(UploadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Upload.onTaskComplete public void taskComplete(UploadTask task) { - getBinding().setProgress(100); - getBinding().setSpeed(""); - T.showShort(this, "文件:" + task.getEntity().getFileName() + ",上传完成"); - getBinding().setStateStr(getString(R.string.re_start)); + @Upload.onTaskCancel + void taskCancel(UploadTask task) { + if (task.getKey().equals(mUrl)) { + mTaskId = -1; + Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); + } } - @Override protected void dataCallback(int result, Object data) { - super.dataCallback(result, data); - if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { - mModule.updateFtpUrl(this, String.valueOf(data)); + @Upload.onTaskFail + void taskFail(UploadTask task, Exception e) { + ALog.d(TAG, "fail"); + Toast.makeText(this, getString(R.string.download_fail), Toast.LENGTH_SHORT) + .show(); + if (task != null && task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); } } - @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == OPEN_FILE_MANAGER_CODE && resultCode == RESULT_OK) { - Uri uri = data.getData(); - if (uri != null) { - mModule.updateFtpFilePath(this, uri.getPath()); - ALog.d(TAG, String.format("选择的文件路径:%s", uri.getPath())); - } else { - ALog.d(TAG, "没有选择文件"); - } + @Upload.onTaskComplete + void taskComplete(UploadTask task) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(this, getString(R.string.download_success), + Toast.LENGTH_SHORT).show(); + ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getEntity().getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); } } } diff --git a/app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java b/app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java new file mode 100644 index 00000000..1e255406 --- /dev/null +++ b/app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java @@ -0,0 +1,267 @@ +/* + * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.arialyy.simple.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; +import androidx.appcompat.widget.AppCompatImageButton; +import com.arialyy.aria.core.common.AbsEntity; +import com.arialyy.aria.core.common.AbsGroupEntity; +import com.arialyy.aria.core.common.AbsNormalEntity; +import com.arialyy.aria.core.inf.IEntity; +import com.arialyy.aria.util.ALog; +import com.arialyy.aria.util.CommonUtil; +import com.arialyy.simple.R; +import java.math.BigDecimal; + +/** + * 统一的进度布局 + */ +public class ProgressLayout extends RelativeLayout implements View.OnClickListener { + private final String TAG = "ProgressLayout"; + private TextView speedOrState, fileName, leftTime, fileSize; + private HorizontalProgressBarWithNumber pb; + private AppCompatImageButton delBt; + private Button handleBt; + private OnProgressLayoutBtListener listener; + private AbsEntity entity; + private int currentState; + + public interface OnProgressLayoutBtListener { + /** + * 处理创建操作 + */ + void create(View v, AbsEntity entity); + + /** + * 处理任务暂停的操作 + */ + void stop(View v, AbsEntity entity); + + /** + * 处理恢复任务的操作 + */ + void resume(View v, AbsEntity entity); + + /** + * 处理任务删除的操作 + */ + void cancel(View v, AbsEntity entity); + } + + public ProgressLayout(Context context) { + this(context, null); + } + + public ProgressLayout(Context context, AttributeSet attrs) { + this(context, attrs, -1); + } + + public ProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + LayoutInflater.from(context).inflate(R.layout.layout_progress_content, this, true); + speedOrState = findViewById(R.id.speed_or_state); + fileName = findViewById(R.id.file_name); + leftTime = findViewById(R.id.left_time); + fileSize = findViewById(R.id.file_size); + pb = findViewById(R.id.pb); + delBt = findViewById(R.id.del_bt); + handleBt = findViewById(R.id.handle_bt); + delBt.setOnClickListener(this); + handleBt.setOnClickListener(this); + } + + public void setBtListener(OnProgressLayoutBtListener listener) { + this.listener = listener; + } + + @Override public void onClick(View v) { + if (listener == null) { + ALog.d(TAG, "没有设置OnProgressLayoutBtListener"); + return; + } + if (entity == null) { + ALog.d(TAG, "entity 为空,请设置信息"); + return; + } + + switch (v.getId()) { + case R.id.del_bt: + listener.cancel(v, entity); + initState(); + break; + case R.id.handle_bt: + handleTask(v); + break; + } + } + + private void initState() { + fileName.setText("-"); + leftTime.setText(""); + speedOrState.setText(""); + fileSize.setText("-/-"); + pb.setProgress(0); + } + + private void handleTask(View v) { + switch (entity.getState()) { + case IEntity.STATE_OTHER: + case IEntity.STATE_FAIL: + case IEntity.STATE_STOP: + listener.resume(v, entity); + break; + case IEntity.STATE_COMPLETE: + case IEntity.STATE_WAIT: + if (entity.getId() != -1) { + listener.resume(v, entity); + } else { + listener.create(v, entity); + } + break; + case IEntity.STATE_PRE: + case IEntity.STATE_POST_PRE: + case IEntity.STATE_RUNNING: + listener.stop(v, entity); + break; + default: + listener.create(v, entity); + break; + } + } + + public void setInfo(AbsEntity entity) { + this.entity = entity; + this.currentState = entity.getState(); + if (entity instanceof AbsNormalEntity) { + AbsNormalEntity normalEntity = (AbsNormalEntity) entity; + ALog.d(TAG, "fileName = " + ((AbsNormalEntity) entity).getFileName()); + fileName.setText(normalEntity.getFileName()); + } else if (entity instanceof AbsGroupEntity) { + AbsGroupEntity groupEntity = (AbsGroupEntity) entity; + fileName.setText( + groupEntity.getAlias() == null ? groupEntity.getKey() : groupEntity.getAlias()); + } + + String str = + formatFileSize(entity.getCurrentProgress()) + "/" + formatFileSize(entity.getFileSize()); + fileSize.setText(str); + leftTime.setText(CommonUtil.formatTime(entity.getTimeLeft())); + String btStr = getResources().getString(R.string.start); + String stateStr = ""; + switch (entity.getState()) { + case IEntity.STATE_WAIT: + btStr = getResources().getString(R.string.start); + stateStr = getResources().getString(R.string.waiting); + break; + case IEntity.STATE_OTHER: + case IEntity.STATE_FAIL: + btStr = getResources().getString(R.string.start); + stateStr = getResources().getString(R.string.state_error); + break; + case IEntity.STATE_STOP: + btStr = getResources().getString(R.string.resume); + stateStr = getResources().getString(R.string.stopped); + break; + case IEntity.STATE_PRE: + case IEntity.STATE_POST_PRE: + case IEntity.STATE_RUNNING: + btStr = getResources().getString(R.string.stop); + stateStr = entity.getConvertSpeed(); + leftTime.setText(CommonUtil.formatTime(entity.getTimeLeft())); + break; + case IEntity.STATE_COMPLETE: + btStr = getResources().getString(R.string.re_start); + stateStr = getResources().getString(R.string.completed); + break; + case IEntity.STATE_CANCEL: + initState(); + break; + default: + btStr = getResources().getString(R.string.start); + stateStr = ""; + leftTime.setText(""); + } + this.handleBt.setText(btStr); + this.speedOrState.setText(stateStr); + if (entity.getState() != IEntity.STATE_CANCEL){ + this.pb.setProgress(entity.getPercent()); + } + } + + public void setFileName(Character fileName) { + this.fileName.setText(fileName); + } + + public void setLeftTime(Character leftTime) { + this.leftTime.setText(leftTime); + } + + public void setFileSize(Character fileSize) { + this.fileSize.setText(fileSize); + } + + public void setProgress(int progress) { + this.pb.setProgress(progress); + } + + public void setSpeed(Character speed) { + this.speedOrState.setText(speed); + } + + public void setState(Character state) { + this.speedOrState.setText(state); + } + + public String formatFileSize(double size) { + if (size < 0) { + return "0k"; + } + double kiloByte = size / 1024; + if (kiloByte < 1) { + return size + "b"; + } + + double megaByte = kiloByte / 1024; + if (megaByte < 1) { + BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); + return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "k"; + } + + double gigaByte = megaByte / 1024; + if (gigaByte < 1) { + BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); + return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "m"; + } + + double teraBytes = gigaByte / 1024; + if (teraBytes < 1) { + BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); + return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "g"; + } + BigDecimal result4 = new BigDecimal(teraBytes); + return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "t"; + } +} diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml new file mode 100644 index 00000000..b2fcd6e9 --- /dev/null +++ b/app/src/main/res/drawable/ic_close.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_ftp_download.xml b/app/src/main/res/layout/activity_ftp_download.xml deleted file mode 100644 index 64872a92..00000000 --- a/app/src/main/res/layout/activity_ftp_download.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_ftp_upload.xml b/app/src/main/res/layout/activity_ftp_upload.xml deleted file mode 100644 index e71cacb0..00000000 --- a/app/src/main/res/layout/activity_ftp_upload.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_m3u8_live.xml b/app/src/main/res/layout/activity_m3u8_live.xml index 17746533..2c3c0a51 100644 --- a/app/src/main/res/layout/activity_m3u8_live.xml +++ b/app/src/main/res/layout/activity_m3u8_live.xml @@ -1,46 +1,7 @@ - + - - - - - - - - - - - - - - - - + - - - - - - -