diff --git a/.idea/gradle.xml b/.idea/gradle.xml index a1cceb93..a83007cb 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,8 +3,9 @@ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..f327ac5c --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..3b312839 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file 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/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 78078ae4..2f14585f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + + 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 4b550d5a..ee122586 100644 --- a/app/src/main/java/com/arialyy/simple/activity/MainActivity.java +++ b/app/src/main/java/com/arialyy/simple/activity/MainActivity.java @@ -1,9 +1,15 @@ package com.arialyy.simple.activity; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import com.arialyy.downloadutil.core.DownloadManager; +import com.arialyy.downloadutil.entity.DownloadEntity; +import com.arialyy.frame.util.show.L; import com.arialyy.simple.R; import com.arialyy.simple.adapter.DownloadAdapter; import com.arialyy.simple.base.BaseActivity; @@ -29,4 +35,56 @@ public class MainActivity extends BaseActivity { mList.setLayoutManager(new LinearLayoutManager(this)); mList.setAdapter(mAdapter); } + + + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + long len = 0; + + @Override public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + DownloadEntity entity = intent.getParcelableExtra(DownloadManager.ENTITY); + switch (action) { + case DownloadManager.ACTION_PRE: + len = entity.getFileSize(); + L.d(TAG, "download pre"); + break; + case DownloadManager.ACTION_START: + L.d(TAG, "download start"); + break; + case DownloadManager.ACTION_RESUME: + L.d(TAG, "download resume"); + long location = intent.getLongExtra(DownloadManager.CURRENT_LOCATION, 1); + mAdapter.updateState(entity); + break; + case DownloadManager.ACTION_RUNNING: + long current = intent.getLongExtra(DownloadManager.CURRENT_LOCATION, 0); + mAdapter.setProgress(entity.getDownloadUrl(), current); + break; + case DownloadManager.ACTION_STOP: + L.d(TAG, "download stop"); + mAdapter.updateState(entity); + break; + case DownloadManager.ACTION_COMPLETE: + L.d(TAG, "download complete"); + mAdapter.updateState(entity); + break; + case DownloadManager.ACTION_CANCEL: + L.d(TAG, "download cancel"); + break; + case DownloadManager.ACTION_FAIL: + L.d(TAG, "download fail"); + break; + } + } + }; + + @Override protected void onResume() { + super.onResume(); + registerReceiver(mReceiver, getModule(DownloadModule.class).getDownloadFilter()); + } + + @Override protected void onDestroy() { + super.onDestroy(); + unregisterReceiver(mReceiver); + } } 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 e7030226..5844b0c2 100644 --- a/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java +++ b/app/src/main/java/com/arialyy/simple/activity/SimpleTestActivity.java @@ -103,7 +103,7 @@ public class SimpleTestActivity extends BaseActivity { String action = intent.getAction(); switch (action) { case DownloadManager.ACTION_PRE: - DownloadEntity entity = intent.getParcelableExtra(DownloadManager.ACTION_PRE); + DownloadEntity entity = intent.getParcelableExtra(DownloadManager.ENTITY); len = entity.getFileSize(); L.d(TAG, "download pre"); mUpdateHandler.obtainMessage(DOWNLOAD_PRE, len).sendToTarget(); @@ -117,7 +117,7 @@ public class SimpleTestActivity extends BaseActivity { mUpdateHandler.obtainMessage(DOWNLOAD_RESUME, location).sendToTarget(); break; case DownloadManager.ACTION_RUNNING: - long current = intent.getLongExtra(DownloadManager.ACTION_RUNNING, 0); + long current = intent.getLongExtra(DownloadManager.CURRENT_LOCATION, 0); if (len == 0) { mPb.setProgress(0); } else { diff --git a/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java b/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java index 72e2b0e3..062e5538 100644 --- a/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java +++ b/app/src/main/java/com/arialyy/simple/adapter/DownloadAdapter.java @@ -1,16 +1,21 @@ package com.arialyy.simple.adapter; import android.content.Context; -import android.util.SparseArray; +import android.util.SparseIntArray; import android.view.View; import android.widget.Button; import com.arialyy.absadapter.common.AbsHolder; import com.arialyy.absadapter.recycler_view.AbsRVAdapter; +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.Util; import com.arialyy.simple.R; import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -22,18 +27,22 @@ import butterknife.Bind; * 下载列表适配器 */ public class DownloadAdapter extends AbsRVAdapter { - private static final String TAG = "DownloadAdapter"; - private Map mProgress = new HashMap<>(); - private SparseArray mPositions = new SparseArray<>(); + private static final String TAG = "DownloadAdapter"; + private DownloadManager mManager; + private CommandFactory mFactory; + private Map mProgress = new HashMap<>(); + private SparseIntArray mPositions = new SparseIntArray(); public DownloadAdapter(Context context, List data) { super(context, data); int i = 0; for (DownloadEntity entity : data) { mProgress.put(entity.getDownloadUrl(), entity.getCurrentProgress()); - mPositions.append(i, entity.getDownloadUrl()); + mPositions.append(i, Util.keyToHashCode(entity.getDownloadUrl())); i++; } + mFactory = CommandFactory.getInstance(); + mManager = DownloadManager.getInstance(); } @Override protected MyHolder getViewHolder(View convertView, int viewType) { @@ -44,13 +53,17 @@ public class DownloadAdapter extends AbsRVAdapter commands = new ArrayList<>(); + IDownloadCommand addCommand = mFactory.createCommand(getContext(), entity, + CommandFactory.TASK_CREATE); + IDownloadCommand startCommand = mFactory.createCommand(getContext(), entity, + CommandFactory.TASK_START); + commands.add(addCommand); + commands.add(startCommand); + mManager.setCommands(commands).exe(); + } + + private void stop(DownloadEntity entity) { + IDownloadCommand stopCommand = mFactory.createCommand(getContext(), entity, + CommandFactory.TASK_STOP); + mManager.setCommand(stopCommand).exe(); + } + + private void cancel(DownloadEntity entity) { + IDownloadCommand cancelCommand = mFactory.createCommand(getContext(), entity, + CommandFactory.TASK_CANCEL); + mManager.setCommand(cancelCommand).exe(); + } } class MyHolder extends AbsHolder { @Bind(R.id.progressBar) HorizontalProgressBarWithNumber progress; @Bind(R.id.bt) Button bt; - public MyHolder(View itemView) { + MyHolder(View itemView) { super(itemView); } } 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 a32b28ea..26c37711 100644 --- a/app/src/main/java/com/arialyy/simple/module/DownloadModule.java +++ b/app/src/main/java/com/arialyy/simple/module/DownloadModule.java @@ -6,11 +6,13 @@ import android.os.Environment; import com.arialyy.downloadutil.core.DownloadManager; import com.arialyy.downloadutil.entity.DownloadEntity; +import com.arialyy.downloadutil.util.Util; 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.io.File; import java.util.ArrayList; import java.util.List; @@ -24,14 +26,23 @@ public class DownloadModule extends BaseModule { /** * 设置下载数据 + * * @return */ public List getDownloadData() { + List list = DownloadEntity.findAllData(DownloadEntity.class); + if (list == null) { + list = createNewDownload(); + } + return list; + } + + private List createNewDownload() { 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"; + String fileName = Util.keyToHashCode(url) + ".apk"; DownloadEntity entity = new DownloadEntity(); entity.setDownloadUrl(url); entity.setDownloadPath(getDownloadPath(url)); @@ -43,9 +54,10 @@ public class DownloadModule extends BaseModule { /** * 下载广播过滤器 + * * @return */ - public IntentFilter getDownloadFilter(){ + public IntentFilter getDownloadFilter() { IntentFilter filter = new IntentFilter(); filter.addDataScheme(getContext().getPackageName()); filter.addAction(DownloadManager.ACTION_PRE); @@ -60,7 +72,13 @@ public class DownloadModule extends BaseModule { } private String getDownloadPath(String url) { - return Environment.getExternalStorageDirectory().getPath() + "/" + AndroidUtils.getAppName( - getContext()) + "downloads/" + StringUtil.keyToHashKey(url) + ".apk"; + String path = Environment.getExternalStorageDirectory() + .getPath() + "/" + AndroidUtils.getAppName(getContext()) + "downloads/" + StringUtil + .keyToHashKey(url) + ".apk"; + File file = new File(path); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + return path; } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ef2fa6e5..245771f5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,6 @@ - + true true @android:color/transparent + @color/colorPrimary + @color/colorPrimaryDark + @color/colorAccent diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 044694c4..b37e2bbc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,9 +4,9 @@ http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk - http://static.gaoshouyou.com/d/21/e8/61218d78d0e8b79df68dbc18dd484c97.apk - http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk - http://static.gaoshouyou.com/d/d4/4f/d6d48db3794fb9ecf47e83c346570881.apk + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 177cefc8..50e7ba5e 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -11,6 +11,9 @@