Realized moving DownloadInfo
This commit is contained in:
1 parent
91fd6c2de8
commit
052e5cdbb3
2 files changed
+106
-17
No files matched your search
@@ -19,6 +19,7 @@ package com.hippo.ehviewer.service;
|
||||
import android.os.SystemClock;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import com.hippo.ehviewer.Constants;
|
||||
import com.hippo.ehviewer.client.data.DownloadInfo;
|
||||
@@ -38,11 +39,14 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
// TODO use SortedList
|
||||
public class DownloadManager {
|
||||
|
||||
private static final String TAG = DownloadManager.class.getSimpleName();
|
||||
@@ -71,13 +75,9 @@ public class DownloadManager {
|
||||
@Override
|
||||
public int compare(DownloadInfo lhs, DownloadInfo rhs) {
|
||||
return lhs.time > rhs.time ? 1 : lhs.time < rhs.time ? -1 : 0;
|
||||
|
||||
|
||||
//return (int) (lhs.time - rhs.time);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private List<DownloadInfo> mDownloadInfos;
|
||||
private Map<String, List<DownloadInfo>> mDownloadInfoMap;
|
||||
private List<DownloadInfo> mDefaultDownloadInfos;
|
||||
@@ -462,6 +462,63 @@ public class DownloadManager {
|
||||
releaseCurrent();
|
||||
}
|
||||
|
||||
public static boolean isDefaultLabel(String label) {
|
||||
return TextUtils.isEmpty(label);
|
||||
}
|
||||
|
||||
public static boolean labelEquals(String label1, String label2) {
|
||||
if (TextUtils.isEmpty(label1)) {
|
||||
return TextUtils.isEmpty(label2);
|
||||
} else {
|
||||
return label1.equals(label2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change label
|
||||
*/
|
||||
public void moveDownloadInfo(List<DownloadInfo> list, String label) {
|
||||
// Get the download list to add to
|
||||
List<DownloadInfo> targetList;
|
||||
if (isDefaultLabel(label)) {
|
||||
targetList = mDefaultDownloadInfos;
|
||||
} else {
|
||||
targetList = getDownloadListInternal(label, true);
|
||||
}
|
||||
|
||||
String lastLabel = null;
|
||||
List<DownloadInfo> lastList = null;
|
||||
Set<List<DownloadInfo>> modifiedInfoList = new HashSet<>(1);
|
||||
|
||||
for (DownloadInfo info : list) {
|
||||
List<DownloadInfo> infoList = null;
|
||||
if (labelEquals(info.label, lastLabel)) {
|
||||
infoList = lastList;
|
||||
}
|
||||
if (infoList == null) {
|
||||
infoList = getDownloadListInternal(info.label, false);
|
||||
}
|
||||
if (infoList == null) {
|
||||
Log.e("TAG", "Can't get download info list, label is " + info.label);
|
||||
continue;
|
||||
}
|
||||
|
||||
info.label = label;
|
||||
DBUtils.updateDownloadInfo(info);
|
||||
infoList.remove(info);
|
||||
targetList.add(info);
|
||||
|
||||
lastLabel = info.label;
|
||||
lastList = infoList;
|
||||
modifiedInfoList.add(lastList);
|
||||
}
|
||||
|
||||
// Sort modified info list
|
||||
for (List<DownloadInfo> infoList : modifiedInfoList) {
|
||||
Collections.sort(infoList, TIME_ASC_COMPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasWaitingDownloadInfo() {
|
||||
return !mWaitList.isEmpty();
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Log;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -57,6 +56,7 @@ import com.hippo.yorozuya.AssertUtils;
|
||||
import com.hippo.yorozuya.FileUtils;
|
||||
import com.hippo.yorozuya.Messenger;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class DownloadScene extends AppbarScene implements DrawerProvider,
|
||||
@@ -499,14 +499,47 @@ public class DownloadScene extends AppbarScene implements DrawerProvider,
|
||||
}
|
||||
}
|
||||
|
||||
private class MoveDownloadInfoListener implements SimpleDialog.OnClickListener {
|
||||
|
||||
private List<String> mLabels;
|
||||
private boolean mHasDefaultLabel;
|
||||
|
||||
public MoveDownloadInfoListener(List<String> labels, boolean hasDefaultLabel) {
|
||||
mLabels = labels;
|
||||
mHasDefaultLabel = hasDefaultLabel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onClick(SimpleDialog dialog, int which) {
|
||||
// Target label
|
||||
String label;
|
||||
if (mHasDefaultLabel && which == 0) {
|
||||
label = null;
|
||||
} else {
|
||||
label = mLabels.get(which);
|
||||
}
|
||||
// Target download infos
|
||||
List<DownloadInfo> infos = new ArrayList<>();
|
||||
SparseBooleanArray checkedState = mRecyclerView.getCheckedItemPositions();
|
||||
for (int i = 0, n = checkedState.size(); i < n; i++) {
|
||||
if (checkedState.valueAt(i)) {
|
||||
DownloadInfo info = mDownloadInfos.get(checkedState.keyAt(i));
|
||||
if (!DownloadManager.labelEquals(info.label, label)) {
|
||||
infos.add(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Must out of choice mode here
|
||||
mRecyclerView.outOfCustomChoiceMode();
|
||||
|
||||
|
||||
|
||||
|
||||
if (!infos.isEmpty()) {
|
||||
DownloadManager.getInstance().moveDownloadInfo(infos, label);
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -524,6 +557,8 @@ public class DownloadScene extends AppbarScene implements DrawerProvider,
|
||||
getStageActivity().startService(intent);
|
||||
}
|
||||
}
|
||||
// Out of choice mode
|
||||
mRecyclerView.outOfCustomChoiceMode();
|
||||
} else if (mStop == v) {
|
||||
DownloadManager manager = DownloadManager.getInstance();
|
||||
SparseBooleanArray checkedState = mRecyclerView.getCheckedItemPositions();
|
||||
@@ -533,15 +568,19 @@ public class DownloadScene extends AppbarScene implements DrawerProvider,
|
||||
manager.stopDownload(mDownloadInfos.get(position).galleryBase.gid);
|
||||
}
|
||||
}
|
||||
// Out of choice mode
|
||||
mRecyclerView.outOfCustomChoiceMode();
|
||||
} else if (mDelete == v) {
|
||||
// TODO
|
||||
} else if (mMove == v) {
|
||||
// Get available target label
|
||||
boolean hasDefaultLabel = false;
|
||||
final List<String> labels = DBUtils.getAllDownloadLabel();
|
||||
if (mActivatedLabelPosition > INDEX_DEFAULT) {
|
||||
labels.remove(mActivatedLabelPosition - 2);
|
||||
}
|
||||
if (mActivatedLabelPosition != INDEX_DEFAULT) {
|
||||
hasDefaultLabel = true;
|
||||
labels.add(getResources().getString(R.string.download_tag_default));
|
||||
}
|
||||
|
||||
@@ -549,15 +588,8 @@ public class DownloadScene extends AppbarScene implements DrawerProvider,
|
||||
Toast.makeText(getContext(), "No available label", Toast.LENGTH_SHORT).show(); // TODO hardcode
|
||||
} else {
|
||||
new SimpleDialog.Builder(getContext()).setTitle("Move to") // TODO hardcode
|
||||
.setItems(labels.toArray(new String[labels.size()]), new SimpleDialog.OnClickListener() {
|
||||
@Override
|
||||
public boolean onClick(SimpleDialog dialog, int which) {
|
||||
String label = labels.get(which);
|
||||
Log.d("TAG", "label = " + label);
|
||||
// TODO
|
||||
return true;
|
||||
}
|
||||
}).show(this);
|
||||
.setItems(labels.toArray(new String[labels.size()]),
|
||||
new MoveDownloadInfoListener(labels, hasDefaultLabel)).show(this);
|
||||
}
|
||||
} else if (mCheckAll == v) {
|
||||
SparseBooleanArray checkedState = mRecyclerView.getCheckedItemPositions();
|
||||
|
||||
Reference in new issue
Block a user