diff --git a/.idea/misc.xml b/.idea/misc.xml index 5d199810..fbb68289 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/src/androidTest/java/com/example/arial/downloaddemo/ApplicationTest.java b/app/src/androidTest/java/com/example/arial/downloaddemo/ApplicationTest.java index b0b6aa45..d9b0087c 100644 --- a/app/src/androidTest/java/com/example/arial/downloaddemo/ApplicationTest.java +++ b/app/src/androidTest/java/com/example/arial/downloaddemo/ApplicationTest.java @@ -7,7 +7,7 @@ import android.test.ApplicationTestCase; * Testing Fundamentals */ public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } + public ApplicationTest() { + super(Application.class); + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bdcd4fb9..0b436785 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,28 +1,28 @@ + package="com.arialyy.simple"> - - - + + + - - - - + android:supportsRtl="true" + android:theme="@style/AppTheme"> + + + - - - - + + + + diff --git a/app/src/main/java/com/arialyy/simple/activity/MainActivity.java b/app/src/main/java/com/arialyy/simple/activity/MainActivity.java index f117a160..4b550d5a 100644 --- a/app/src/main/java/com/arialyy/simple/activity/MainActivity.java +++ b/app/src/main/java/com/arialyy/simple/activity/MainActivity.java @@ -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 { @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); + } } diff --git a/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java b/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java index a891db06..cb7d0b12 100644 --- a/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java +++ b/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java @@ -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 { 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 { } }; + 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 { } 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 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() { diff --git a/app/src/main/java/com/arialyy/simple/module/DownloadModule.java b/app/src/main/java/com/arialyy/simple/module/DownloadModule.java index d2384e58..b4192497 100644 --- a/app/src/main/java/com/arialyy/simple/module/DownloadModule.java +++ b/app/src/main/java/com/arialyy/simple/module/DownloadModule.java @@ -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 getDownloadData(){ -// List 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 getDownloadData() { + List 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"; + } +} diff --git a/app/src/main/java/com/arialyy/simple/widget/HorizontalProgressBarWithNumber.java b/app/src/main/java/com/arialyy/simple/widget/HorizontalProgressBarWithNumber.java index ae3bf9c8..a32111a7 100644 --- a/app/src/main/java/com/arialyy/simple/widget/HorizontalProgressBarWithNumber.java +++ b/app/src/main/java/com/arialyy/simple/widget/HorizontalProgressBarWithNumber.java @@ -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()); } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9945a899..ef2fa6e5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,17 +1,17 @@ - - - + android:orientation="vertical" + > - + + + diff --git a/app/src/main/res/layout/activity_simple.xml b/app/src/main/res/layout/activity_simple.xml index 87289c58..7efa0217 100644 --- a/app/src/main/res/layout/activity_simple.xml +++ b/app/src/main/res/layout/activity_simple.xml @@ -1,42 +1,42 @@ - - - - + - + - + - + - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_simple.xml b/app/src/main/res/layout/content_simple.xml index 017c1f04..0ce08cbc 100644 --- a/app/src/main/res/layout/content_simple.xml +++ b/app/src/main/res/layout/content_simple.xml @@ -1,72 +1,72 @@ - - - - - - -