diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java index 272e27240..4f6a69dcc 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java @@ -1,5 +1,6 @@ package org.schabi.newpipe.about; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; @@ -39,7 +40,7 @@ public class LicenseFragment extends Fragment { * @param license the license to show */ public static void showLicense(Context context, License license) { - new LicenseFragmentHelper().execute(context, license); + new LicenseFragmentHelper((Activity) context).execute(license); } @Override diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java index 726e97ec2..e4436322a 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.java @@ -1,8 +1,11 @@ package org.schabi.newpipe.about; +import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.os.AsyncTask; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.app.AlertDialog; import android.webkit.WebView; import org.schabi.newpipe.R; @@ -10,26 +13,46 @@ import org.schabi.newpipe.util.ThemeHelper; import java.io.BufferedReader; import java.io.InputStreamReader; +import java.lang.ref.WeakReference; public class LicenseFragmentHelper extends AsyncTask { - private Context context; + WeakReference weakReference; private License license; + public LicenseFragmentHelper(@Nullable Activity activity) { + weakReference = new WeakReference<>(activity); + } + + @Nullable + private Activity getActivity() { + Activity activity = weakReference.get(); + + if (activity != null && activity.isFinishing()) { + return null; + } else { + return activity; + } + } + @Override protected Integer doInBackground(Object... objects) { - context = (Context) objects[0]; - license = (License) objects[1]; + license = (License) objects[0]; return 1; } @Override protected void onPostExecute(Integer result){ - String webViewData = getFormattedLicense(context, license); - AlertDialog.Builder alert = new AlertDialog.Builder(context); + Activity activity = getActivity(); + if (activity == null) { + return; + } + + String webViewData = getFormattedLicense(activity, license); + AlertDialog.Builder alert = new AlertDialog.Builder(activity); alert.setTitle(license.getName()); - WebView wv = new WebView(context); + WebView wv = new WebView(activity); wv.loadData(webViewData, "text/html; charset=UTF-8", null); alert.setView(wv); diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java index af25eaecb..12c81c127 100644 --- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java +++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java @@ -1,11 +1,14 @@ package us.shandian.giga.ui.adapter; +import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.content.FileProvider; import android.support.v4.view.ViewCompat; import android.support.v7.widget.RecyclerView; @@ -24,6 +27,7 @@ import android.widget.Toast; import org.schabi.newpipe.R; import java.io.File; +import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -46,13 +50,13 @@ public class MissionAdapter extends RecyclerView.Adapter { + private static class ChecksumTask extends AsyncTask { ProgressDialog prog; + WeakReference weakReference; + + ChecksumTask(@NonNull Activity activity) { + weakReference = new WeakReference<>(activity); + } @Override protected void onPreExecute() { super.onPreExecute(); - // Create dialog - prog = new ProgressDialog(mContext); - prog.setCancelable(false); - prog.setMessage(mContext.getString(R.string.msg_wait)); - prog.show(); + Activity activity = getActivity(); + if (activity != null) { + // Create dialog + prog = new ProgressDialog(activity); + prog.setCancelable(false); + prog.setMessage(activity.getString(R.string.msg_wait)); + prog.show(); + } } @Override @@ -374,8 +386,24 @@ public class MissionAdapter extends RecyclerView.Adapter