例子编写
This commit is contained in:
@ -1,10 +1,14 @@
|
||||
package com.arialyy.simple.activity;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
|
||||
import com.arialyy.simple.R;
|
||||
import com.arialyy.simple.adapter.DownloadAdapter;
|
||||
import com.arialyy.simple.base.BaseActivity;
|
||||
import com.arialyy.simple.databinding.ActivityMainBinding;
|
||||
import com.arialyy.simple.module.DownloadModule;
|
||||
|
||||
import butterknife.Bind;
|
||||
|
||||
@ -13,10 +17,16 @@ import butterknife.Bind;
|
||||
*/
|
||||
public class MainActivity extends BaseActivity<ActivityMainBinding> {
|
||||
@Bind(R.id.list) RecyclerView mList;
|
||||
DownloadAdapter mAdapter;
|
||||
|
||||
@Override protected int setLayoutId() {
|
||||
return R.layout.activity_main;
|
||||
}
|
||||
|
||||
|
||||
@Override protected void init(Bundle savedInstanceState) {
|
||||
super.init(savedInstanceState);
|
||||
mAdapter = new DownloadAdapter(this, getModule(DownloadModule.class).getDownloadData());
|
||||
mList.setLayoutManager(new LinearLayoutManager(this));
|
||||
mList.setAdapter(mAdapter);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package com.arialyy.simple.activity;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Handler;
|
||||
@ -11,13 +14,19 @@ import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.arialyy.downloadutil.core.DownloadManager;
|
||||
import com.arialyy.downloadutil.core.command.CommandFactory;
|
||||
import com.arialyy.downloadutil.core.command.IDownloadCommand;
|
||||
import com.arialyy.downloadutil.entity.DownloadEntity;
|
||||
import com.arialyy.downloadutil.util.DownLoadUtil;
|
||||
import com.arialyy.downloadutil.util.Util;
|
||||
import com.arialyy.simple.R;
|
||||
import com.arialyy.simple.base.BaseActivity;
|
||||
import com.arialyy.simple.databinding.ActivitySimpleBinding;
|
||||
import com.arialyy.simple.module.DownloadModule;
|
||||
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.Bind;
|
||||
|
||||
@ -58,7 +67,9 @@ public class SimpleTestActivity extends BaseActivity<ActivitySimpleBinding> {
|
||||
mStart.setText("开始");
|
||||
break;
|
||||
case DOWNLOAD_RESUME:
|
||||
Toast.makeText(SimpleTestActivity.this, "恢复下载,恢复位置 ==> " + Util.formatFileSize((Long) msg.obj), Toast.LENGTH_SHORT).show();
|
||||
Toast.makeText(SimpleTestActivity.this,
|
||||
"恢复下载,恢复位置 ==> " + Util.formatFileSize((Long) msg.obj),
|
||||
Toast.LENGTH_SHORT).show();
|
||||
mStart.setEnabled(false);
|
||||
break;
|
||||
case DOWNLOAD_COMPLETE:
|
||||
@ -71,12 +82,27 @@ public class SimpleTestActivity extends BaseActivity<ActivitySimpleBinding> {
|
||||
}
|
||||
};
|
||||
|
||||
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||
@Override public void onReceive(Context context, Intent intent) {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@Override protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
@Override protected void onResume() {
|
||||
super.onResume();
|
||||
registerReceiver(mReceiver, getModule(DownloadModule.class).getDownloadFilter());
|
||||
}
|
||||
|
||||
@Override protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
unregisterReceiver(mReceiver);
|
||||
}
|
||||
|
||||
@Override protected int setLayoutId() {
|
||||
return R.layout.activity_simple;
|
||||
}
|
||||
@ -111,58 +137,19 @@ public class SimpleTestActivity extends BaseActivity<ActivitySimpleBinding> {
|
||||
}
|
||||
|
||||
private void start() {
|
||||
mUtil.download(this, mDownloadUrl, Environment.getExternalStorageDirectory().getPath() + "/test.apk", new DownLoadUtil.DownloadListener() {
|
||||
long fileSize = 1;
|
||||
DownloadEntity entity = new DownloadEntity();
|
||||
entity.setFileName("test.apk");
|
||||
entity.setDownloadUrl(mDownloadUrl);
|
||||
entity.setDownloadPath(Environment.getExternalStorageDirectory().getPath() + "/test.apk");
|
||||
List<IDownloadCommand> commands = new ArrayList<>();
|
||||
IDownloadCommand addCommand = CommandFactory.getInstance()
|
||||
.createCommand(this, entity, CommandFactory.TASK_CREATE);
|
||||
IDownloadCommand startCommand = CommandFactory.getInstance()
|
||||
.createCommand(this, entity, CommandFactory.TASK_START);
|
||||
commands.add(addCommand);
|
||||
commands.add(startCommand);
|
||||
DownloadManager.getInstance(this).setCommands(commands).exe();
|
||||
|
||||
@Override public void onPreDownload(HttpURLConnection connection) {
|
||||
super.onPreDownload(connection);
|
||||
mPb.setMax(100);
|
||||
fileSize = connection.getContentLength();
|
||||
mUpdateHandler.obtainMessage(DOWNLOAD_PRE, fileSize).sendToTarget();
|
||||
}
|
||||
|
||||
@Override public void onStart(long startLocation) {
|
||||
super.onStart(startLocation);
|
||||
}
|
||||
|
||||
@Override public void onChildResume(long resumeLocation) {
|
||||
super.onChildResume(resumeLocation);
|
||||
}
|
||||
|
||||
@Override public void onChildComplete(long finishLocation) {
|
||||
super.onChildComplete(finishLocation);
|
||||
}
|
||||
|
||||
@Override public void onProgress(long currentLocation) {
|
||||
super.onProgress(currentLocation);
|
||||
mPb.setProgress((int) (currentLocation * 100 / fileSize));
|
||||
}
|
||||
|
||||
@Override public void onStop(long stopLocation) {
|
||||
super.onStop(stopLocation);
|
||||
mUpdateHandler.obtainMessage(DOWNLOAD_STOP).sendToTarget();
|
||||
}
|
||||
|
||||
@Override public void onCancel() {
|
||||
super.onCancel();
|
||||
mUpdateHandler.obtainMessage(DOWNLOAD_CANCEL).sendToTarget();
|
||||
}
|
||||
|
||||
@Override public void onResume(long resumeLocation) {
|
||||
super.onResume(resumeLocation);
|
||||
mUpdateHandler.obtainMessage(DOWNLOAD_RESUME, resumeLocation).sendToTarget();
|
||||
}
|
||||
|
||||
@Override public void onFail() {
|
||||
super.onFail();
|
||||
mUpdateHandler.obtainMessage(DOWNLOAD_FAILE).sendToTarget();
|
||||
}
|
||||
|
||||
@Override public void onComplete() {
|
||||
super.onComplete();
|
||||
mUpdateHandler.obtainMessage(DOWNLOAD_COMPLETE).sendToTarget();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void stop() {
|
||||
|
@ -1,21 +1,66 @@
|
||||
//package com.arialyy.simple.module;
|
||||
//
|
||||
//import android.content.Context;
|
||||
//import com.arialyy.downloadutil.entity.DownloadEntity;
|
||||
//import com.arialyy.simple.base.BaseModule;
|
||||
//import java.util.ArrayList;
|
||||
//import java.util.List;
|
||||
//
|
||||
///**
|
||||
// * Created by Lyy on 2016/9/27.
|
||||
// */
|
||||
//public class DownloadModule extends BaseModule{
|
||||
// public DownloadModule(Context context) {
|
||||
// super(context);
|
||||
// }
|
||||
//
|
||||
// public List<DownloadEntity> getDownloadData(){
|
||||
// List<DownloadEntity> list = new ArrayList<>();
|
||||
// DownloadEntity entity
|
||||
// }
|
||||
//}
|
||||
package com.arialyy.simple.module;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.Environment;
|
||||
|
||||
import com.arialyy.downloadutil.core.DownloadManager;
|
||||
import com.arialyy.downloadutil.entity.DownloadEntity;
|
||||
import com.arialyy.frame.util.AndroidUtils;
|
||||
import com.arialyy.frame.util.StringUtil;
|
||||
import com.arialyy.simple.R;
|
||||
import com.arialyy.simple.base.BaseModule;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Lyy on 2016/9/27.
|
||||
*/
|
||||
public class DownloadModule extends BaseModule {
|
||||
public DownloadModule(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置下载数据
|
||||
* @return
|
||||
*/
|
||||
public List<DownloadEntity> getDownloadData() {
|
||||
List<DownloadEntity> list = new ArrayList<>();
|
||||
String[] urls = getContext().getResources()
|
||||
.getStringArray(R.array.test_apk_download_url);
|
||||
for (String url : urls) {
|
||||
String fileName = StringUtil.keyToHashKey(url) + ".apk";
|
||||
DownloadEntity entity = new DownloadEntity();
|
||||
entity.setDownloadUrl(url);
|
||||
entity.setDownloadPath(getDownloadPath(url));
|
||||
entity.setFileName(fileName);
|
||||
list.add(entity);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载广播过滤器
|
||||
* @return
|
||||
*/
|
||||
public IntentFilter getDownloadFilter(){
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addCategory(getContext().getPackageName());
|
||||
filter.addAction(DownloadManager.ACTION_PRE);
|
||||
filter.addAction(DownloadManager.ACTION_RESUME);
|
||||
filter.addAction(DownloadManager.ACTION_START);
|
||||
filter.addAction(DownloadManager.ACTION_RUNNING);
|
||||
filter.addAction(DownloadManager.ACTION_STOP);
|
||||
filter.addAction(DownloadManager.ACTION_CANCEL);
|
||||
filter.addAction(DownloadManager.ACTION_COMPLETE);
|
||||
filter.addAction(DownloadManager.ACTION_FAIL);
|
||||
return filter;
|
||||
}
|
||||
|
||||
private String getDownloadPath(String url) {
|
||||
return Environment.getExternalStorageDirectory().getPath() + "/" + AndroidUtils.getAppName(
|
||||
getContext()) + "downloads/" + StringUtil.keyToHashKey(url) + ".apk";
|
||||
}
|
||||
}
|
||||
|
@ -32,11 +32,13 @@ public class HorizontalProgressBarWithNumber extends ProgressBar {
|
||||
/**
|
||||
* offset of draw progress
|
||||
*/
|
||||
protected int mTextOffset = dp2px(DEFAULT_SIZE_TEXT_OFFSET);
|
||||
protected int mTextOffset = dp2px(
|
||||
DEFAULT_SIZE_TEXT_OFFSET);
|
||||
/**
|
||||
* height of reached progress bar
|
||||
*/
|
||||
protected int mReachedProgressBarHeight = dp2px(DEFAULT_HEIGHT_REACHED_PROGRESS_BAR);
|
||||
protected int mReachedProgressBarHeight = dp2px(
|
||||
DEFAULT_HEIGHT_REACHED_PROGRESS_BAR);
|
||||
/**
|
||||
* color of reached bar
|
||||
*/
|
||||
@ -48,7 +50,8 @@ public class HorizontalProgressBarWithNumber extends ProgressBar {
|
||||
/**
|
||||
* height of unreached progress bar
|
||||
*/
|
||||
protected int mUnReachedProgressBarHeight = dp2px(DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR);
|
||||
protected int mUnReachedProgressBarHeight = dp2px(
|
||||
DEFAULT_HEIGHT_UNREACHED_PROGRESS_BAR);
|
||||
/**
|
||||
* view width except padding
|
||||
*/
|
||||
@ -82,7 +85,10 @@ public class HorizontalProgressBarWithNumber extends ProgressBar {
|
||||
result = specSize;
|
||||
} else {
|
||||
float textHeight = (mPaint.descent() - mPaint.ascent());
|
||||
result = (int) (getPaddingTop() + getPaddingBottom() + Math.max(Math.max(mReachedProgressBarHeight, mUnReachedProgressBarHeight), Math.abs(textHeight)));
|
||||
result = (int) (getPaddingTop() + getPaddingBottom() + Math.max(
|
||||
Math.max(mReachedProgressBarHeight, mUnReachedProgressBarHeight),
|
||||
Math.abs(textHeight))
|
||||
);
|
||||
if (specMode == MeasureSpec.AT_MOST) {
|
||||
result = Math.min(result, specSize);
|
||||
}
|
||||
@ -95,15 +101,28 @@ public class HorizontalProgressBarWithNumber extends ProgressBar {
|
||||
*/
|
||||
private void obtainStyledAttributes(AttributeSet attrs) {
|
||||
// init values from custom attributes
|
||||
final TypedArray attributes = getContext().obtainStyledAttributes(attrs, R.styleable.HorizontalProgressBarWithNumber);
|
||||
mTextColor = attributes.getColor(R.styleable.HorizontalProgressBarWithNumber_progress_text_color, DEFAULT_TEXT_COLOR);
|
||||
mTextSize = (int) attributes.getDimension(R.styleable.HorizontalProgressBarWithNumber_progress_text_size, mTextSize);
|
||||
mReachedBarColor = attributes.getColor(R.styleable.HorizontalProgressBarWithNumber_progress_reached_color, mTextColor);
|
||||
mUnReachedBarColor = attributes.getColor(R.styleable.HorizontalProgressBarWithNumber_progress_unreached_color, DEFAULT_COLOR_UNREACHED_COLOR);
|
||||
mReachedProgressBarHeight = (int) attributes.getDimension(R.styleable.HorizontalProgressBarWithNumber_progress_reached_bar_height, mReachedProgressBarHeight);
|
||||
mUnReachedProgressBarHeight = (int) attributes.getDimension(R.styleable.HorizontalProgressBarWithNumber_progress_unreached_bar_height, mUnReachedProgressBarHeight);
|
||||
mTextOffset = (int) attributes.getDimension(R.styleable.HorizontalProgressBarWithNumber_progress_text_offset, mTextOffset);
|
||||
int textVisible = attributes.getInt(R.styleable.HorizontalProgressBarWithNumber_progress_text_visibility, VISIBLE);
|
||||
final TypedArray attributes = getContext().obtainStyledAttributes(attrs,
|
||||
R.styleable.HorizontalProgressBarWithNumber);
|
||||
mTextColor = attributes.getColor(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_text_color,
|
||||
DEFAULT_TEXT_COLOR);
|
||||
mTextSize = (int) attributes.getDimension(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_text_size, mTextSize);
|
||||
mReachedBarColor = attributes.getColor(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_reached_color, mTextColor);
|
||||
mUnReachedBarColor = attributes.getColor(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_unreached_color,
|
||||
DEFAULT_COLOR_UNREACHED_COLOR);
|
||||
mReachedProgressBarHeight = (int) attributes.getDimension(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_reached_bar_height,
|
||||
mReachedProgressBarHeight);
|
||||
mUnReachedProgressBarHeight = (int) attributes.getDimension(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_unreached_bar_height,
|
||||
mUnReachedProgressBarHeight);
|
||||
mTextOffset = (int) attributes.getDimension(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_text_offset, mTextOffset);
|
||||
int textVisible = attributes.getInt(
|
||||
R.styleable.HorizontalProgressBarWithNumber_progress_text_visibility, VISIBLE);
|
||||
if (textVisible != VISIBLE) {
|
||||
mIfDrawText = false;
|
||||
}
|
||||
@ -151,13 +170,15 @@ public class HorizontalProgressBarWithNumber extends ProgressBar {
|
||||
* dp 2 px
|
||||
*/
|
||||
protected int dp2px(int dpVal) {
|
||||
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, getResources().getDisplayMetrics());
|
||||
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal,
|
||||
getResources().getDisplayMetrics());
|
||||
}
|
||||
|
||||
/**
|
||||
* sp 2 px
|
||||
*/
|
||||
protected int sp2px(int spVal) {
|
||||
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal, getResources().getDisplayMetrics());
|
||||
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal,
|
||||
getResources().getDisplayMetrics());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user