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 12, 2020
1 parent b435cb9 commit 5e2c67d
Showing 1 changed file with 24 additions and 58 deletions.
82 changes: 24 additions & 58 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,14 @@
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.schedulers.Schedulers;
import us.shandian.giga.get.DownloadMission;
import us.shandian.giga.get.FinishedMission;
import us.shandian.giga.get.Mission;
Expand Down Expand Up @@ -676,7 +675,27 @@ 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;
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 @@ -961,60 +980,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 5e2c67d

Please sign in to comment.