From 2ad2f31594e3fca81b5b06a9a27d5be43b6434d6 Mon Sep 17 00:00:00 2001 From: lyy <511455842@qq.com> Date: Tue, 27 Sep 2016 22:41:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BE=8B=E5=AD=90=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../arial/downloaddemo/ApplicationTest.java | 6 +- app/src/main/AndroidManifest.xml | 40 +- .../arialyy/simple/activity/MainActivity.java | 12 +- .../simple/activity/SimpleTestActivity.java | 95 +- .../arialyy/simple/module/DownloadModule.java | 87 +- .../HorizontalProgressBarWithNumber.java | 51 +- app/src/main/res/layout/activity_main.xml | 20 +- app/src/main/res/layout/activity_simple.xml | 60 +- app/src/main/res/layout/content_simple.xml | 122 +-- app/src/main/res/layout/item_download.xml | 40 +- app/src/main/res/menu/menu_main.xml | 16 +- app/src/main/res/values-v21/styles.xml | 12 +- app/src/main/res/values-w820dp/dimens.xml | 8 +- app/src/main/res/values/attr.xml | 26 +- app/src/main/res/values/colors.xml | 6 +- app/src/main/res/values/dimens.xml | 8 +- app/src/main/res/values/strings.xml | 18 +- app/src/main/res/values/styles.xml | 26 +- .../arial/downloaddemo/ExampleUnitTest.java | 6 +- .../arialyy/downloadutil/ApplicationTest.java | 6 +- downloadutil/src/main/AndroidManifest.xml | 12 +- .../downloadutil/core/DownloadManager.java | 163 ++-- .../downloadutil/core/DownloadTarget.java | 155 ++-- .../downloadutil/core/IDownloadTarget.java | 341 +++---- .../com/arialyy/downloadutil/core/Task.java | 343 ++++---- .../arialyy/downloadutil/core/TaskEnum.java | 2 +- .../downloadutil/core/TaskFactory.java | 49 +- .../downloadutil/core/command/AddCommand.java | 13 +- .../core/command/CancelCommand.java | 13 +- .../core/command/CommandFactory.java | 187 ++-- .../core/command/IDownloadCommand.java | 59 +- .../core/command/StartCommand.java | 13 +- .../core/command/StateCommand.java | 21 +- .../core/command/StopCommand.java | 21 +- .../downloadutil/core/inf/IDownloader.java | 48 +- .../arialyy/downloadutil/core/inf/IPool.java | 74 +- .../arialyy/downloadutil/core/inf/ITask.java | 66 +- .../downloadutil/core/pool/CachePool.java | 165 ++-- .../downloadutil/core/pool/ExecutePool.java | 237 ++--- .../downloadutil/entity/DownloadEntity.java | 341 +++---- .../arialyy/downloadutil/help/CheckHelp.java | 66 +- .../arialyy/downloadutil/help/PathHelp.java | 63 ++ .../arialyy/downloadutil/orm/DbEntity.java | 331 +++---- .../com/arialyy/downloadutil/orm/DbUtil.java | 589 +++++++------ .../java/com/arialyy/downloadutil/orm/Id.java | 2 +- .../com/arialyy/downloadutil/orm/Ignore.java | 2 +- .../arialyy/downloadutil/orm/SqlHelper.java | 32 +- .../downloadutil/util/DownLoadUtil.java | 833 +++++++++--------- .../downloadutil/util/IDownloadListener.java | 80 +- .../com/arialyy/downloadutil/util/Util.java | 381 ++++---- downloadutil/src/main/res/values/strings.xml | 10 +- .../arialyy/downloadutil/ExampleUnitTest.java | 6 +- 53 files changed, 2793 insertions(+), 2592 deletions(-) create mode 100644 downloadutil/src/main/java/com/arialyy/downloadutil/help/PathHelp.java 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 @@ - - - - - - -