From 7856022c4d9d30b07d32e2d780032fb453376fea Mon Sep 17 00:00:00 2001 From: NekoInverter <7741672-NekoInverter@users.noreply.gitlab.com> Date: Sat, 2 Jan 2021 20:34:36 +0800 Subject: [PATCH] Fix crashes --- .../preference/CleanRedundancyPreference.java | 13 +++------- .../preference/IdentityCookiePreference.java | 11 ++++++-- .../preference/RestoreDownloadPreference.java | 9 ++----- .../ehviewer/preference/TaskPreference.java | 25 ++++++++++++++++++- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.java b/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.java index 049c0afdc..a45facc19 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.java +++ b/app/src/main/java/com/hippo/ehviewer/preference/CleanRedundancyPreference.java @@ -16,18 +16,16 @@ package com.hippo.ehviewer.preference; -import android.annotation.SuppressLint; import android.content.Context; import android.util.AttributeSet; import androidx.annotation.NonNull; +import com.google.android.material.snackbar.Snackbar; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.download.DownloadManager; -import com.hippo.ehviewer.ui.SettingsActivity; -import com.hippo.ehviewer.ui.scene.BaseScene; import com.hippo.unifile.UniFile; import com.hippo.yorozuya.NumberUtils; @@ -53,13 +51,10 @@ public class CleanRedundancyPreference extends TaskPreference { private static class ClearTask extends Task { - @SuppressLint("StaticFieldLeak") - private final SettingsActivity mActivity; private final DownloadManager mManager; public ClearTask(@NonNull Context context) { super(context); - mActivity = (SettingsActivity) context; mManager = EhApplication.getDownloadManager(context.getApplicationContext()); } @@ -114,9 +109,9 @@ public class CleanRedundancyPreference extends TaskPreference { count = 0; } - mActivity.showTip(0 == count ? - mActivity.getString(R.string.settings_download_clean_redundancy_no_redundancy) : - mActivity.getString(R.string.settings_download_clean_redundancy_done, count), BaseScene.LENGTH_SHORT); + showTip(0 == count ? + mApplication.getString(R.string.settings_download_clean_redundancy_no_redundancy) : + mApplication.getString(R.string.settings_download_clean_redundancy_done, count), Snackbar.LENGTH_SHORT); super.onPostExecute(o); } } diff --git a/app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java b/app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java index 2a806598a..949c38f1a 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java +++ b/app/src/main/java/com/hippo/ehviewer/preference/IdentityCookiePreference.java @@ -16,9 +16,9 @@ package com.hippo.ehviewer.preference; +import android.annotation.SuppressLint; import android.content.Context; import android.util.AttributeSet; -import android.widget.Toast; import androidx.appcompat.app.AlertDialog; @@ -26,6 +26,8 @@ import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.client.EhCookieStore; import com.hippo.ehviewer.client.EhUrl; +import com.hippo.ehviewer.ui.SettingsActivity; +import com.hippo.ehviewer.ui.scene.BaseScene; import com.hippo.preference.MessagePreference; import com.hippo.text.Html; import com.hippo.util.ClipboardUtil; @@ -39,19 +41,24 @@ import okhttp3.HttpUrl; public class IdentityCookiePreference extends MessagePreference { private String message; + @SuppressLint("StaticFieldLeak") + private final SettingsActivity mActivity; public IdentityCookiePreference(Context context) { super(context); + mActivity = (SettingsActivity) context; init(); } public IdentityCookiePreference(Context context, AttributeSet attrs) { super(context, attrs); + mActivity = (SettingsActivity) context; init(); } public IdentityCookiePreference(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); + mActivity = (SettingsActivity) context; init(); } @@ -98,7 +105,7 @@ public class IdentityCookiePreference extends MessagePreference { if (message != null) { builder.setPositiveButton(R.string.settings_eh_identity_cookies_copy, (dialog, which) -> { ClipboardUtil.addTextToClipboard(message); - Toast.makeText(getContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show(); + mActivity.showTip(R.string.copied_to_clipboard, BaseScene.LENGTH_SHORT); IdentityCookiePreference.this.onClick(dialog, which); }); diff --git a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java index 30ef4cf4b..62215a243 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java +++ b/app/src/main/java/com/hippo/ehviewer/preference/RestoreDownloadPreference.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.preference; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.os.Parcel; @@ -35,7 +34,6 @@ import com.hippo.ehviewer.client.data.GalleryInfo; import com.hippo.ehviewer.download.DownloadManager; import com.hippo.ehviewer.spider.SpiderInfo; import com.hippo.ehviewer.spider.SpiderQueen; -import com.hippo.ehviewer.ui.SettingsActivity; import com.hippo.ehviewer.ui.scene.BaseScene; import com.hippo.unifile.UniFile; import com.hippo.util.ExceptionUtils; @@ -71,14 +69,11 @@ public class RestoreDownloadPreference extends TaskPreference { private static class RestoreTask extends Task { - @SuppressLint("StaticFieldLeak") - private final SettingsActivity mActivity; private final DownloadManager mManager; private final OkHttpClient mHttpClient; public RestoreTask(@NonNull Context context) { super(context); - mActivity = (SettingsActivity) context; mManager = EhApplication.getDownloadManager(context.getApplicationContext()); mHttpClient = EhApplication.getOkHttpClient(context.getApplicationContext()); } @@ -142,7 +137,7 @@ public class RestoreDownloadPreference extends TaskPreference { } try { - return EhEngine.fillGalleryListByApi(null, mHttpClient, new ArrayList(restoreItemList), EhUrl.getReferer()); + return EhEngine.fillGalleryListByApi(null, mHttpClient, new ArrayList<>(restoreItemList), EhUrl.getReferer()); } catch (Throwable e) { ExceptionUtils.throwIfFatal(e); e.printStackTrace(); @@ -172,7 +167,7 @@ public class RestoreDownloadPreference extends TaskPreference { count++; } } - mActivity.showTip( + showTip( mActivity.getString(R.string.settings_download_restore_successfully, count), BaseScene.LENGTH_SHORT); diff --git a/app/src/main/java/com/hippo/ehviewer/preference/TaskPreference.java b/app/src/main/java/com/hippo/ehviewer/preference/TaskPreference.java index 1d1cc3c12..d6e5a5483 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/TaskPreference.java +++ b/app/src/main/java/com/hippo/ehviewer/preference/TaskPreference.java @@ -16,21 +16,25 @@ package com.hippo.ehviewer.preference; +import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.os.AsyncTask; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; +import android.widget.Toast; import androidx.annotation.CallSuper; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.customview.view.AbsSavedState; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; +import com.hippo.ehviewer.ui.SettingsActivity; import com.hippo.preference.DialogPreference; import com.hippo.util.IoThreadPoolExecutor; import com.hippo.yorozuya.IntIdGenerator; @@ -152,11 +156,14 @@ public abstract class TaskPreference extends DialogPreference { public abstract static class Task extends AsyncTask { - private final EhApplication mApplication; + protected final EhApplication mApplication; + @SuppressLint("StaticFieldLeak") + protected final SettingsActivity mActivity; @Nullable private TaskPreference mPreference; public Task(@NonNull Context context) { + mActivity = (SettingsActivity) context; mApplication = (EhApplication) context.getApplicationContext(); } @@ -181,5 +188,21 @@ public abstract class TaskPreference extends DialogPreference { mPreference.onTaskEnd(); } } + + protected void showTip(@StringRes int id, int length) { + try { + mActivity.showTip(id, length); + } catch (Exception e) { + Toast.makeText(mApplication, id, length).show(); + } + } + + protected void showTip(CharSequence message, int length) { + try { + mActivity.showTip(message, length); + } catch (Exception e) { + Toast.makeText(mApplication, message, length).show(); + } + } } }