Show download state in GalleryDetailScene

This commit is contained in:
seven332 committed 2016-03-06 14:33:47 +08:00
1 parent 09d481db53
commit 008c662209
6 files changed
+182 -55

No files matched your search

@@ -35,6 +35,7 @@ import com.hippo.yorozuya.SimpleHandler;
import com.hippo.yorozuya.sparse.SparseIJArray;
import com.hippo.yorozuya.sparse.SparseJLArray;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
@@ -68,8 +69,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
@Nullable
private DownloadListener mDownloadListener;
@Nullable
private DownloadInfoListener mDownloadInfoListener;
@NonNull
private final List<DownloadInfoListener> mDownloadInfoListeners;
@Nullable
private DownloadInfo mCurrentTask;
@@ -116,10 +117,9 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
list.add(info);
}
// Create wait list
mWaitList = new LinkedList<>();
mSpeedReminder = new SpeedReminder();
mDownloadInfoListeners = new ArrayList<>();
}
@Nullable
@@ -164,8 +164,21 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
return mMap.get(label);
}
public void setDownloadInfoListener(@Nullable DownloadInfoListener downloadInfoListener) {
mDownloadInfoListener = downloadInfoListener;
public int getDownloadState(long gid) {
DownloadInfo info = mAllInfoMap.get(gid);
if (null != info) {
return info.state;
} else {
return DownloadInfo.STATE_INVALID;
}
}
public void addDownloadInfoListener(@Nullable DownloadInfoListener downloadInfoListener) {
mDownloadInfoListeners.add(downloadInfoListener);
}
public void removeDownloadInfoListener(@Nullable DownloadInfoListener downloadInfoListener) {
mDownloadInfoListeners.remove(downloadInfoListener);
}
public void setDownloadListener(@Nullable DownloadListener listener) {
@@ -202,8 +215,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
}
// Notify state update
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
}
}
@@ -226,8 +241,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
EhDB.putDownloadInfo(info);
// Notify state update
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
// Make sure download is running
ensureDownload();
@@ -257,8 +274,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
EhDB.putDownloadInfo(info);
// Notify
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onAdd(info, list, list.size() - 1);
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onAdd(info, list, list.size() - 1);
}
// Make sure download is running
ensureDownload();
@@ -291,8 +308,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (update) {
// Notify Listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdateAll();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdateAll();
}
// Ensure download
ensureDownload();
@@ -320,8 +337,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (update) {
// Notify Listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdateAll();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdateAll();
}
// Ensure download
ensureDownload();
@@ -333,8 +350,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (info != null) {
// Update listener
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
// Ensure download
ensureDownload();
@@ -346,8 +365,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (info != null) {
// Update listener
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
// Ensure download
ensureDownload();
@@ -358,8 +379,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
stopRangeDownloadInternal(gidList);
// Update listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdateAll();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdateAll();
}
// Ensure download
@@ -379,8 +400,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
stopCurrentDownloadInternal();
// Notify mDownloadInfoListener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdateAll();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdateAll();
}
}
@@ -401,8 +422,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
if (index >= 0) {
list.remove(info);
// Update listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onRemove(info, list, index);
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onRemove(info, list, index);
}
}
}
@@ -437,8 +458,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
}
// Update listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onReload();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onReload();
}
}
@@ -566,8 +587,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
changed = true;
}
if (changed && mDownloadInfoListener != null) {
mDownloadInfoListener.onReload();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onReload();
}
}
@@ -579,8 +600,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
mLabelList.add(EhDB.addDownloadLabel(label));
mMap.put(label, new LinkedList<DownloadInfo>());
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdateLabels();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdateLabels();
}
}
@@ -589,8 +610,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
mLabelList.add(toPosition, item);
EhDB.moveDownloadLabel(fromPosition, toPosition);
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdateLabels();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdateLabels();
}
}
@@ -625,8 +646,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
mMap.put(to, list);
// Notify listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onRenameLabel(from, to);
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onRenameLabel(from, to);
}
}
@@ -663,8 +684,8 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
Collections.sort(mDefaultInfoList, sDateAscComparator);
// Notify listener
if (mDownloadInfoListener != null) {
mDownloadInfoListener.onChange();
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onChange();
}
}
@@ -814,8 +835,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
} else {
info.total = mPages;
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
}
break;
@@ -843,8 +866,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
mDownloadListener.onGetPage(info);
}
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
}
break;
@@ -859,8 +884,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
info.downloaded = mDownloaded;
info.total = mTotal;
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
}
break;
@@ -901,8 +928,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
mDownloadListener.onFinish(info);
}
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
// Start next download
ensureDownload();
@@ -995,8 +1024,10 @@ public class DownloadManager implements SpiderQueen.OnSpiderListener {
mDownloadListener.onDownload(info);
}
List<DownloadInfo> list = getInfoListForLabel(info.label);
if (list != null && mDownloadInfoListener != null) {
mDownloadInfoListener.onUpdate(info, list);
if (list != null) {
for (DownloadInfoListener l: mDownloadInfoListeners) {
l.onUpdate(info, list);
}
}
}
@@ -120,7 +120,7 @@ public class DownloadScene extends ToolbarScene
super.onCreate(savedInstanceState);
DownloadManager manager = EhApplication.getDownloadManager(getContext());
manager.setDownloadInfoListener(this);
manager.addDownloadInfoListener(this);
if (savedInstanceState == null) {
onInit();
@@ -134,7 +134,7 @@ public class DownloadScene extends ToolbarScene
super.onDestroy();
mList = null;
DownloadManager manager = EhApplication.getDownloadManager(getContext());
manager.setDownloadInfoListener(null);
manager.removeDownloadInfoListener(null);
}
private void updateForLabel() {
@@ -31,6 +31,7 @@ import android.os.Bundle;
import android.os.Environment;
import android.os.Parcelable;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
@@ -71,9 +72,11 @@ import com.hippo.ehviewer.client.data.GalleryTagGroup;
import com.hippo.ehviewer.client.data.LargePreviewSet;
import com.hippo.ehviewer.client.data.ListUrlBuilder;
import com.hippo.ehviewer.client.parser.RateGalleryParser;
import com.hippo.ehviewer.dao.DownloadInfo;
import com.hippo.ehviewer.ui.CommonOperations;
import com.hippo.ehviewer.ui.GalleryActivity;
import com.hippo.ehviewer.ui.annotation.ViewLifeCircle;
import com.hippo.ehviewer.ui.annotation.WholeLifeCircle;
import com.hippo.rippleold.RippleSalon;
import com.hippo.scene.Announcer;
import com.hippo.scene.SceneFragment;
@@ -97,9 +100,11 @@ import com.hippo.yorozuya.ViewUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
import java.util.Locale;
public class GalleryDetailScene extends BaseScene implements View.OnClickListener {
public class GalleryDetailScene extends BaseScene implements View.OnClickListener,
com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener {
@IntDef({STATE_INIT, STATE_NORMAL, STATE_REFRESH, STATE_REFRESH_HEADER, STATE_FAILED})
@Retention(RetentionPolicy.SOURCE)
@@ -124,6 +129,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
private static final String KEY_GALLERY_DETAIL = "gallery_detail";
private static final String KEY_REQUEST_ID = "request_id";
private static final String KEY_DOWNLOAD_STATE = "download_state";
@Nullable
@ViewLifeCircle
@@ -162,7 +168,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
private ViewGroup mActionGroup;
@Nullable
@ViewLifeCircle
private View mDownload;
private TextView mDownload;
@Nullable
@ViewLifeCircle
private View mRead;
@@ -250,6 +256,9 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
@ViewLifeCircle
private PopupMenu mPopupMenu;
@WholeLifeCircle
private int mDownloadState;
@Nullable
private String mAction;
@Nullable
@@ -361,6 +370,12 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
private void onInit() {
handleArgs(getArguments());
long gid = getGid();
if (gid != -1) {
mDownloadState = EhApplication.getDownloadManager(getContext()).getDownloadState(gid);
} else {
mDownloadState = DownloadInfo.STATE_INVALID;
}
}
private void onRestore(Bundle savedInstanceState) {
@@ -370,6 +385,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
mToken = savedInstanceState.getString(KEY_TOKEN);
mGalleryDetail = savedInstanceState.getParcelable(KEY_GALLERY_DETAIL);
mRequestId = savedInstanceState.getInt(KEY_REQUEST_ID);
mDownloadState = savedInstanceState.getInt(KEY_DOWNLOAD_STATE);
}
@Override
@@ -390,6 +406,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
outState.putParcelable(KEY_GALLERY_DETAIL, mGalleryDetail);
}
outState.putInt(KEY_REQUEST_ID, mRequestId);
outState.putInt(KEY_DOWNLOAD_STATE, mDownloadState);
}
@Nullable
@@ -414,7 +431,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
mCategory = (TextView) ViewUtils.$$(mHeader, R.id.category);
mOtherActions = (ImageView) ViewUtils.$$(mHeader, R.id.other_actions);
mActionGroup = (ViewGroup) ViewUtils.$$(mHeader, R.id.action_card);
mDownload = ViewUtils.$$(mActionGroup, R.id.download);
mDownload = (TextView) ViewUtils.$$(mActionGroup, R.id.download);
mRead = ViewUtils.$$(mActionGroup, R.id.read);
RippleSalon.addRipple(mOtherActions, false);
RippleSalon.addRipple(mDownload, false);
@@ -491,6 +508,8 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
adjustViewVisibility(STATE_FAILED, false);
}
EhApplication.getDownloadManager(getContext()).addDownloadInfoListener(this);
return view;
}
@@ -509,6 +528,8 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
public void onDestroyView() {
super.onDestroyView();
EhApplication.getDownloadManager(getContext()).removeDownloadInfoListener(this);
mFailedView = null;
mFailedText = null;
mViewTransition = null;
@@ -703,6 +724,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
mUploader.setText(gi.uploader);
mCategory.setText(EhUtils.getCategory(gi.category));
mCategory.setTextColor(EhUtils.getCategoryColor(gi.category));
updateDownloadText();
}
}
@@ -742,6 +764,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
mUploader.setText(gd.uploader);
mCategory.setText(EhUtils.getCategory(gd.category));
mCategory.setTextColor(EhUtils.getCategoryColor(gd.category));
updateDownloadText();
mLanguage.setText(gd.language);
mPages.setText(resources.getQuantityString(
@@ -1136,6 +1159,77 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
}
}
private void updateDownloadText() {
if (null == mDownload) {
return;
}
switch (mDownloadState) {
default:
case DownloadInfo.STATE_INVALID:
case DownloadInfo.STATE_NONE:
mDownload.setText(R.string.download);
break;
case DownloadInfo.STATE_WAIT:
case DownloadInfo.STATE_DOWNLOAD:
mDownload.setText(R.string.download_state_downloading);
break;
case DownloadInfo.STATE_FINISH:
case DownloadInfo.STATE_FAILED:
mDownload.setText(R.string.download_state_downloaded);
break;
}
}
private void updateDownloadState() {
long gid = getGid();
if (-1L == gid) {
return;
}
int downloadState = EhApplication.getDownloadManager(getContext()).getDownloadState(gid);
if (downloadState == mDownloadState) {
return;
}
mDownloadState = downloadState;
updateDownloadText();
}
@Override
public void onAdd(@NonNull DownloadInfo info, @NonNull List<DownloadInfo> list, int position) {
updateDownloadState();
}
@Override
public void onUpdate(@NonNull DownloadInfo info, @NonNull List<DownloadInfo> list) {
updateDownloadState();
}
@Override
public void onUpdateAll() {
updateDownloadState();
}
@Override
public void onReload() {
updateDownloadState();
}
@Override
public void onChange() {
updateDownloadState();
}
@Override
public void onRemove(@NonNull DownloadInfo info, @NonNull List<DownloadInfo> list, int position) {
updateDownloadState();
}
@Override
public void onRenameLabel(String from, String to) {}
@Override
public void onUpdateLabels() {}
private static class ExitTransaction implements TransitionHelper {
private final View mThumb;