diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java index 525ac4bed..4eb66f8e2 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.java @@ -79,14 +79,16 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { mLabelList = labels; // Create list for each label - mMap = new HashMap<>(); + HashMap> map = new HashMap<>(); + mMap = map; for (String label : labels) { - mMap.put(label, new LinkedList()); + map.put(label, new LinkedList()); } // Create default for non tag mDefaultInfoList = new LinkedList<>(); // Create all download info map - mAllInfoMap = new SparseArray<>(); + SparseArray allInfoMap = new SparseArray<>(); + mAllInfoMap = allInfoMap; // Fill download info list LazyList lazyList = EhDB.getDownloadInfoLazyList(); @@ -97,15 +99,15 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } // Add to all info map - mAllInfoMap.put(info.galleryInfo.gid, info); + allInfoMap.put(info.galleryInfo.gid, info); // Add to list LinkedList list = getInfoListForLabel(info.label); if (list == null) { list = new LinkedList<>(); - mMap.put(info.label, list); - if (!mLabelList.contains(info.label)) { - mLabelList.add(info.label); + map.put(info.label, list); + if (!labels.contains(info.label)) { + labels.add(info.label); } } list.add(info); @@ -267,6 +269,34 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener { } } + void startAllDownload() { + boolean update = false; + // Start all STATE_NONE and STATE_FAILED item + SparseArray allInfoMap = mAllInfoMap; + List waitList = mWaitList; + for (int i = 0, n = allInfoMap.size(); i < n; i++) { + DownloadInfo info = allInfoMap.valueAt(i); + if (info.state == DownloadInfo.STATE_NONE || info.state == DownloadInfo.STATE_FAILED) { + update = true; + // Set state DownloadInfo.STATE_WAIT + info.state = DownloadInfo.STATE_WAIT; + // Add to wait list + waitList.add(info); + // Update in DB + EhDB.updateDownloadInfo(info); + } + } + + if (update) { + // Notify Listener + if (mDownloadInfoListener != null) { + mDownloadInfoListener.onUpdateAll(); + } + // Ensure download + ensureDownload(); + } + } + void stopDownload(int gid) { DownloadInfo info = stopDownloadInternal(gid); if (info != null) { diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java b/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java index d2d3e1126..431e74550 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadService.java @@ -132,11 +132,15 @@ public class DownloadService extends Service implements DownloadManager.Download } if (ACTION_START.equals(action)) { - GalleryInfo gi= intent.getParcelableExtra(KEY_GALLERY_INFO); + GalleryInfo gi = intent.getParcelableExtra(KEY_GALLERY_INFO); String label = intent.getStringExtra(KEY_LABEL); if (gi != null && mDownloadManager != null) { mDownloadManager.startDownload(gi, label); } + } else if (ACTION_START_ALL.equals(action)) { + if (mDownloadManager != null) { + mDownloadManager.startAllDownload(); + } } else if (ACTION_STOP.equals(action)) { int gid = intent.getIntExtra(KEY_GID, -1); if (gid != -1 && mDownloadManager != null) { @@ -182,7 +186,7 @@ public class DownloadService extends Service implements DownloadManager.Download .setAutoCancel(false) .setCategory(NotificationCompat.CATEGORY_PROGRESS) .setColor(getResources().getColor(R.color.colorPrimary)) - .addAction(R.drawable.ic_stop_x24, getString(R.string.stat_download_action_stop_all), piStopAll); + .addAction(R.drawable.ic_pause_x24, getString(R.string.stat_download_action_stop_all), piStopAll); } private void ensureDownloadedBuilder() { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java index 0ff7d1305..3d126f542 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadScene.java @@ -32,6 +32,7 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.transition.TransitionInflater; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; @@ -191,6 +192,31 @@ public class DownloadScene extends ToolbarScene finish(); } + @Override + public int getMenuResId() { + return R.menu.scene_download; + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + int id = item.getItemId(); + switch (id) { + case R.id.action_start_all: { + Intent intent = new Intent(getActivity(), DownloadService.class); + intent.setAction(DownloadService.ACTION_START_ALL); + getActivity().startService(intent); + return true; + } + case R.id.action_stop_all: { + Intent intent = new Intent(getActivity(), DownloadService.class); + intent.setAction(DownloadService.ACTION_STOP_ALL); + getActivity().startService(intent); + return true; + } + } + return false; + } + @Override public void onDestroyView() { super.onDestroyView(); diff --git a/app/src/main/res/drawable-hdpi/ic_pause_dark_x24.png b/app/src/main/res/drawable-hdpi/ic_pause_dark_x24.png new file mode 100644 index 000000000..2efde69c0 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_pause_dark_x24.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_play_dark_x24.png b/app/src/main/res/drawable-hdpi/ic_play_dark_x24.png new file mode 100644 index 000000000..c2bbeedf1 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_play_dark_x24.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_pause_dark_x24.png b/app/src/main/res/drawable-mdpi/ic_pause_dark_x24.png new file mode 100644 index 000000000..1648532cd Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_pause_dark_x24.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_play_dark_x24.png b/app/src/main/res/drawable-mdpi/ic_play_dark_x24.png new file mode 100644 index 000000000..c8c3f59df Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_play_dark_x24.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_pause_dark_x24.png b/app/src/main/res/drawable-xhdpi/ic_pause_dark_x24.png new file mode 100644 index 000000000..a47b69e33 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_pause_dark_x24.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_play_dark_x24.png b/app/src/main/res/drawable-xhdpi/ic_play_dark_x24.png new file mode 100644 index 000000000..583936779 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_play_dark_x24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_pause_dark_x24.png b/app/src/main/res/drawable-xxhdpi/ic_pause_dark_x24.png new file mode 100644 index 000000000..ca711d9b3 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_pause_dark_x24.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_play_dark_x24.png b/app/src/main/res/drawable-xxhdpi/ic_play_dark_x24.png new file mode 100644 index 000000000..f782a6ed4 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_play_dark_x24.png differ diff --git a/app/src/main/res/menu/scene_download.xml b/app/src/main/res/menu/scene_download.xml new file mode 100644 index 000000000..3578bff20 --- /dev/null +++ b/app/src/main/res/menu/scene_download.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1d340f628..33bf986f5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -178,7 +178,7 @@ 等待中 失败 %d 未完成 - 完成 + 已完成 509 警告 图片配额已用尽。请停止下载,休息一下。 下载结束 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index d54ea1ec6..5c136e252 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -178,7 +178,7 @@ 等待中 失敗 %d 未完成 - 完成 + 已完成 509 警告 圖片配額已用盡。請停止下載,休息一下。 下載結束 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0028338a0..b31e546b8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -178,7 +178,7 @@ 等待中 失敗 %d 未完成 - 完成 + 已完成 509 警告 圖片配額已用盡。請停止下載,休息一下。 下載結束