Skip to content

Commit

Permalink
Use RxJava instead of AsyncTask in MissionAdapter.
Browse files Browse the repository at this point in the history
  • Loading branch information
Isira-Seneviratne committed Oct 28, 2020
1 parent df85980 commit b55a57e
Showing 1 changed file with 31 additions and 59 deletions.
90 changes: 31 additions & 59 deletions app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package us.shandian.giga.ui.adapter;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
Expand All @@ -26,7 +24,6 @@
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;
Expand All @@ -47,12 +44,15 @@
import org.schabi.newpipe.util.NavigationHelper;

import java.io.File;
import java.lang.ref.WeakReference;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import us.shandian.giga.get.DownloadMission;
import us.shandian.giga.get.FinishedMission;
import us.shandian.giga.get.Mission;
Expand Down Expand Up @@ -117,6 +117,8 @@ public class MissionAdapter extends Adapter<ViewHolder> implements Handler.Callb
private final Runnable rUpdater = this::updater;
private final Runnable rDelete = this::deleteFinishedDownloads;

private final CompositeDisposable compositeDisposable = new CompositeDisposable();

public MissionAdapter(Context context, @NonNull DownloadManager downloadManager, View emptyMessage, View root) {
mContext = context;
mDownloadManager = downloadManager;
Expand Down Expand Up @@ -676,7 +678,30 @@ private boolean handlePopupItem(@NonNull ViewHolderItem h, @NonNull MenuItem opt
return true;
case R.id.md5:
case R.id.sha1:
new ChecksumTask(mContext).execute(h.item.mission.storage, ALGORITHMS.get(id));
ProgressDialog progressDialog = null;
if (mContext != null) {
// Create dialog
progressDialog = new ProgressDialog(mContext);
progressDialog.setCancelable(false);
progressDialog.setMessage(mContext.getString(R.string.msg_wait));
progressDialog.show();
}
final ProgressDialog finalProgressDialog = progressDialog;
final StoredFileHelper storage = h.item.mission.storage;
compositeDisposable.add(
Observable.fromCallable(() -> Utility.checksum(storage, ALGORITHMS.get(id)))
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
if (finalProgressDialog != null) {
Utility.copyToClipboard(finalProgressDialog.getContext(),
result);
if (mContext != null) {
finalProgressDialog.dismiss();
}
}
})
);
return true;
case R.id.source:
/*Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(h.item.mission.source));
Expand Down Expand Up @@ -759,8 +784,8 @@ public void refreshMissionItems() {
}
}


public void onDestroy() {
compositeDisposable.dispose();
mDeleter.dispose();
}

Expand Down Expand Up @@ -961,60 +986,7 @@ class ViewHolderHeader extends RecyclerView.ViewHolder {
}
}


static class ChecksumTask extends AsyncTask<Object, Void, String> {
ProgressDialog progressDialog;
WeakReference<Activity> weakReference;

ChecksumTask(@NonNull Context context) {
weakReference = new WeakReference<>((Activity) context);
}

@Override
protected void onPreExecute() {
super.onPreExecute();

Activity activity = getActivity();
if (activity != null) {
// Create dialog
progressDialog = new ProgressDialog(activity);
progressDialog.setCancelable(false);
progressDialog.setMessage(activity.getString(R.string.msg_wait));
progressDialog.show();
}
}

@Override
protected String doInBackground(Object... params) {
return Utility.checksum((StoredFileHelper) params[0], (String) params[1]);
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);

if (progressDialog != null) {
Utility.copyToClipboard(progressDialog.getContext(), result);
if (getActivity() != null) {
progressDialog.dismiss();
}
}
}

@Nullable
private Activity getActivity() {
Activity activity = weakReference.get();

if (activity != null && activity.isFinishing()) {
return null;
} else {
return activity;
}
}
}

public interface RecoverHelper {
void tryRecover(DownloadMission mission);
}

}

0 comments on commit b55a57e

Please sign in to comment.