more fixes

* use bold style in status (mission_item_linear.xml)
* fix download attemps not begin updated
* dont stop the queue if a download fails
* implement partial wake-lock & wifi-lock
* show notifications for failed downloads
* ¿proper bitmap dispose? (DownloadManagerService.java)
* improve buffer filling (CircularFile.java)
* [Mp4Dash] increment reserved space from 2MiB to 15MiB. This is expensive but useful for devices with low ram
* [WebM] use 2MiB of reserved space
* fix debug warning if one thread is used
* fix wrong download speed when the activity is suspended
* Fix "Queue" menu item that appears in post-processing errors
* fix mission length dont being updated (missing commit)
This commit is contained in:
kapodamy 2018-11-20 19:10:50 -03:00
parent 93e95f9880
commit 3357fc0f17
19 changed files with 400 additions and 150 deletions

View file

@ -142,7 +142,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
str = R.string.missions_header_pending;
} else {
str = R.string.missions_header_finished;
mClear.setVisible(true);
setClearButtonVisibility(true);
}
((ViewHolderHeader) view).header.setText(str);
@ -233,8 +233,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
}
}
long length = mission.offsets[mission.current < mission.offsets.length ? mission.current : (mission.offsets.length - 1)];
length += mission.length;
long length = mission.getLength();
int state = 0;
if (!mission.isFinished()) {
@ -274,7 +273,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
return;
}
if (deltaTime > 1000 && deltaDone > 0) {
float speed = (float) deltaDone / deltaTime;
String speedStr = Utility.formatSpeed(speed * 1000);
@ -297,7 +296,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
Log.v(TAG, "Mime: " + mimeType + " package: " + BuildConfig.APPLICATION_ID + ".provider");
Uri uri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".provider", file);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(uri, mimeType);
@ -390,7 +389,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
str.append(mContext.getString(R.string.error_connect_host));
break;
case DownloadMission.ERROR_POSTPROCESSING_FAILED:
str.append(R.string.error_postprocessing_failed);
str.append(mContext.getString(R.string.error_postprocessing_failed));
case DownloadMission.ERROR_UNKNOWN_EXCEPTION:
break;
default:
@ -418,7 +417,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
public void clearFinishedDownloads() {
mDownloadManager.forgetFinishedDownloads();
applyChanges();
mClear.setVisible(false);
setClearButtonVisibility(false);
}
private boolean handlePopupItem(@NonNull ViewHolderItem h, @NonNull MenuItem option) {
@ -429,7 +428,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
switch (id) {
case R.id.start:
h.state = -1;
h.size.setText(Utility.formatBytes(mission.length));
h.size.setText(Utility.formatBytes(mission.getLength()));
mDownloadManager.resumeMission(mission);
return true;
case R.id.pause:
@ -466,11 +465,11 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
new ChecksumTask(mContext).execute(h.item.mission.getDownloadedFile().getAbsolutePath(), ALGORITHMS.get(id));
return true;
case R.id.source:
/*Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(h.item.mission.source));
mContext.startActivity(intent);*/
/*Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(h.item.mission.source));
mContext.startActivity(intent);*/
try {
Intent intent = NavigationHelper.getIntentByLink(mContext, h.item.mission.source);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
mContext.startActivity(intent);
} catch (Exception e) {
Log.w(TAG, "Selected item has a invalid source", e);
@ -490,7 +489,7 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
if (mIterator.getOldListSize() > 0) {
int lastItemType = mIterator.getSpecialAtItem(mIterator.getOldListSize() - 1);
mClear.setVisible(lastItemType == DownloadManager.SPECIAL_FINISHED);
setClearButtonVisibility(lastItemType == DownloadManager.SPECIAL_FINISHED);
}
}
@ -498,6 +497,10 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
mIterator.start();
mIterator.end();
for (ViewHolderItem item: mPendingDownloadsItems) {
item.lastTimeStamp = -1;
}
notifyDataSetChanged();
}
@ -505,6 +508,18 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
mLayout = isLinear ? R.layout.mission_item_linear : R.layout.mission_item;
}
public void setClearButton(MenuItem clearButton) {
if (mClear == null) {
int lastItemType = mIterator.getSpecialAtItem(mIterator.getOldListSize() - 1);
clearButton.setVisible(lastItemType == DownloadManager.SPECIAL_FINISHED);
}
mClear = clearButton;
}
private void setClearButtonVisibility(boolean flag) {
mClear.setVisible(flag);
}
private void checkEmptyMessageVisibility() {
int flag = mIterator.getOldListSize() > 0 ? View.GONE : View.VISIBLE;
if (mEmptyMessage.getVisibility() != flag) mEmptyMessage.setVisibility(flag);
@ -577,8 +592,8 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
checksum = menu.findItem(R.id.checksum);
itemView.setOnClickListener((v) -> {
if(((DownloadMission)item.mission).isFinished())
viewWithFileProvider(item.mission.getDownloadedFile());
if (((DownloadMission) item.mission).isFinished())
viewWithFileProvider(item.mission.getDownloadedFile());
});
//h.itemView.setOnClickListener(v -> showDetail(h));
@ -607,9 +622,9 @@ public class MissionAdapter extends RecyclerView.Adapter<ViewHolder> {
queue.setChecked(mission.enqueued);
start.setVisible(mission.errCode != DownloadMission.ERROR_POSTPROCESSING_FAILED);
delete.setVisible(true);
queue.setVisible(true);
start.setVisible(mission.errCode != DownloadMission.ERROR_POSTPROCESSING_FAILED);
queue.setVisible(mission.errCode != DownloadMission.ERROR_POSTPROCESSING_FAILED);
}
}
} else {

View file

@ -33,7 +33,7 @@ public class MissionsFragment extends Fragment {
private SharedPreferences mPrefs;
private boolean mLinear;
private MenuItem mSwitch;
private MenuItem mClear;
private MenuItem mClear = null;
private RecyclerView mList;
private View mEmpty;
@ -152,6 +152,7 @@ public class MissionsFragment extends Fragment {
public void onPrepareOptionsMenu(Menu menu) {
mSwitch = menu.findItem(R.id.switch_mode);
mClear = menu.findItem(R.id.clear_list);
if (mAdapter != null) mAdapter.setClearButton(mClear);
super.onPrepareOptionsMenu(menu);
}