From 57e7f89814eaa14b11ea4bbe5365a6f52e1dcc15 Mon Sep 17 00:00:00 2001 From: tarsin Date: Wed, 4 Jan 2023 15:02:16 +0800 Subject: [PATCH] Execute request in fragment's lifecycle coroutine scope --- .../main/java/com/hippo/ehviewer/client/EhClient.kt | 8 ++------ .../com/hippo/ehviewer/ui/CommonOperations.java | 6 ++++-- .../ehviewer/ui/fragment/AdvancedFragment.java | 5 +++-- .../hippo/ehviewer/ui/scene/CookieSignInScene.java | 3 ++- .../com/hippo/ehviewer/ui/scene/FavoritesScene.java | 7 ++++--- .../ehviewer/ui/scene/GalleryCommentsScene.java | 9 +++++---- .../hippo/ehviewer/ui/scene/GalleryDetailScene.java | 13 +++++++------ .../hippo/ehviewer/ui/scene/GalleryListScene.java | 5 +++-- .../ehviewer/ui/scene/GalleryPreviewsScene.java | 3 ++- .../com/hippo/ehviewer/ui/scene/HistoryScene.kt | 1 + .../com/hippo/ehviewer/ui/scene/ProgressScene.java | 3 ++- .../com/hippo/ehviewer/ui/scene/SignInScene.java | 8 ++++---- 12 files changed, 39 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt b/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt index ffbe29f69..a85eacf13 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhClient.kt @@ -16,7 +16,6 @@ package com.hippo.ehviewer.client import com.hippo.ehviewer.EhApplication.Companion.okHttpClient -import eu.kanade.tachiyomi.util.lang.launchUI import eu.kanade.tachiyomi.util.lang.withUIContext import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope @@ -27,7 +26,7 @@ import kotlinx.coroutines.launch import java.io.File class EhClient { - fun execute(request: EhRequest) { + fun execute(request: EhRequest, scope: CoroutineScope) { if (!request.isCancelled) { val task = Task() val job = scope.launch(Dispatchers.IO, CoroutineStart.LAZY) { @@ -196,15 +195,12 @@ class EhClient { fun stop() { if (!mStop) { job?.cancel() - mCallback?.let { - scope.launchUI { it.onCancel() } - } + mCallback?.onCancel() } } } companion object { - val scope = CoroutineScope(Dispatchers.IO) const val METHOD_SIGN_IN = 0 const val METHOD_GET_GALLERY_LIST = 1 const val METHOD_GET_GALLERY_DETAIL = 3 diff --git a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java index 9a186e81c..0af1aef43 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/CommonOperations.java @@ -21,6 +21,8 @@ import android.content.Intent; import android.os.Build; import androidx.core.content.ContextCompat; +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.LifecycleKt; import com.hippo.app.ListCheckBoxDialogBuilder; import com.hippo.ehviewer.EhApplication; @@ -58,7 +60,7 @@ public final class CommonOperations { request.setMethod(EhClient.METHOD_ADD_FAVORITES); request.setArgs(galleryInfo.gid, galleryInfo.token, slot, ""); request.setCallback(listener); - client.execute(request); + client.execute(request, LifecycleKt.getCoroutineScope(((FragmentActivity)activity).getLifecycle())); } else { listener.onFailure(new Exception()); // TODO Add text } @@ -105,7 +107,7 @@ public final class CommonOperations { request.setMethod(EhClient.METHOD_ADD_FAVORITES); request.setArgs(galleryInfo.gid, galleryInfo.token, -1, ""); request.setCallback(new DelegateFavoriteCallback(listener, galleryInfo, null, -2)); - client.execute(request); + client.execute(request, LifecycleKt.getCoroutineScope(((FragmentActivity)activity).getLifecycle())); } public static void startDownload(final MainActivity activity, final GalleryInfo galleryInfo, boolean forceDefault) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java index a8c4d3d0d..032ca2a27 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java @@ -30,6 +30,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDelegate; import androidx.core.os.LocaleListCompat; +import androidx.lifecycle.LifecycleKt; import androidx.preference.Preference; import com.hippo.app.BaseDialogBuilder; @@ -341,7 +342,7 @@ public class AdvancedFragment extends BasePreferenceFragment { favIndex++; favListUrlBuilder.setIndex(result.next, true); request.setArgs(favListUrlBuilder.build()); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } else { showTip(R.string.settings_advanced_backup_favorite_success, BaseScene.LENGTH_SHORT); } @@ -363,7 +364,7 @@ public class AdvancedFragment extends BasePreferenceFragment { }); request.setArgs(favListUrlBuilder.build()); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java index de8cc353d..69d494143 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/CookieSignInScene.java @@ -30,6 +30,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.LifecycleKt; import com.google.android.material.textfield.TextInputLayout; import com.hippo.app.BaseDialogBuilder; @@ -198,7 +199,7 @@ public class CookieSignInScene extends SolidScene implements EditText.OnEditorAc EhRequest request = new EhRequest() .setMethod(EhClient.METHOD_GET_PROFILE) .setCallback(new CookieSignInListener()); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } private void storeCookie(String id, String hash, String igneous) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java index 877c951c1..5804edc3b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.java @@ -36,6 +36,7 @@ import androidx.core.view.GravityCompat; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsAnimationCompat; import androidx.drawerlayout.widget.DrawerLayout; +import androidx.lifecycle.LifecycleKt; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -1044,7 +1045,7 @@ public class FavoritesScene extends SearchBarScene implements activity.getStageId(), getTag(), taskId, mUrlBuilder.getKeyword(), modifyGiListBackup)); request.setArgs(gidArray, tokenArray, mModifyFavCat); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } else { for (int i = 0, n = mModifyGiList.size(); i < n; i++) { gidArray[i] = mModifyGiList.get(i).gid; @@ -1066,7 +1067,7 @@ public class FavoritesScene extends SearchBarScene implements activity.getStageId(), getTag(), taskId, local, mUrlBuilder.getKeyword())); request.setArgs(url, gidArray, mModifyFavCat); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } } else if (mUrlBuilder.getFavCat() == FavListUrlBuilder.FAV_CAT_LOCAL) { final String keyword = mUrlBuilder.getKeyword(); @@ -1081,7 +1082,7 @@ public class FavoritesScene extends SearchBarScene implements activity.getStageId(), getTag(), taskId, false, mUrlBuilder.getKeyword())); request.setArgs(url); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java index a64f9562d..428abb64e 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.java @@ -50,6 +50,7 @@ import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsAnimationCompat; +import androidx.lifecycle.LifecycleKt; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -317,7 +318,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene .setArgs(mGalleryDetail.apiUid, mGalleryDetail.apiKey, mGalleryDetail.gid, mGalleryDetail.token, id, vote) .setCallback(new VoteCommentListener(context, activity.getStageId(), getTag())); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } @SuppressLint("InflateParams") @@ -453,7 +454,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene .setMethod(EhClient.METHOD_GET_GALLERY_DETAIL) .setArgs(url) .setCallback(new RefreshCommentListener(activity, activity.getStageId(), getTag())); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } } @@ -638,7 +639,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene .setArgs(url, comment, mCommentId != 0 ? Long.toString(mCommentId) : null) .setCallback(new CommentGalleryListener(context, activity.getStageId(), getTag(), mCommentId)); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); hideSoftInput(); hideEditPanel(true); } @@ -744,7 +745,7 @@ public final class GalleryCommentsScene extends BaseToolbarScene .setMethod(EhClient.METHOD_GET_GALLERY_DETAIL) .setArgs(url) .setCallback(new RefreshCommentListener(activity, activity.getStageId(), getTag())); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java index 35eb445d2..55d09bcbb 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.java @@ -58,6 +58,7 @@ import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.core.widget.NestedScrollView; +import androidx.lifecycle.LifecycleKt; import com.google.android.material.progressindicator.CircularProgressIndicator; import com.google.android.material.snackbar.Snackbar; @@ -728,7 +729,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O .setMethod(EhClient.METHOD_GET_GALLERY_DETAIL) .setArgs(url) .setCallback(callback); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); return true; } @@ -1357,7 +1358,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O .setArgs(mGalleryDetail.apiUid, mGalleryDetail.apiKey, mGalleryDetail.gid, mGalleryDetail.token, tag, vote) .setCallback(new VoteTagListener(context, activity.getStageId(), getTag())); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } @Override @@ -1793,7 +1794,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O mRequest = new EhRequest().setMethod(EhClient.METHOD_ARCHIVE_LIST) .setArgs(url, mGid, mToken) .setCallback(this); - EhApplication.getEhClient().execute(mRequest); + EhApplication.getEhClient().execute(mRequest, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } else { bind(mArchiveList); } @@ -1830,7 +1831,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O request.setMethod(EhClient.METHOD_DOWNLOAD_ARCHIVE); request.setArgs(mGalleryDetail.gid, mGalleryDetail.token, mArchiveFormParamOr, res, isHAtH); request.setCallback(new DownloadArchiveListener(context, activity.getStageId(), getTag(), mGalleryDetail)); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } if (mDialog != null) { @@ -1908,7 +1909,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O mRequest = new EhRequest().setMethod(EhClient.METHOD_GET_TORRENT_LIST) .setArgs(url, mGid, mToken) .setCallback(this); - EhApplication.getEhClient().execute(mRequest); + EhApplication.getEhClient().execute(mRequest, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } else { bind(mTorrentList); } @@ -2041,7 +2042,7 @@ public class GalleryDetailScene extends CollapsingToolbarScene implements View.O mGalleryDetail.gid, mGalleryDetail.token, mRatingBar.getRating()) .setCallback(new RateGalleryListener(context, activity.getStageId(), getTag(), mGalleryDetail.gid)); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java index a56413dfe..9f45ae570 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java @@ -52,6 +52,7 @@ import androidx.core.view.GravityCompat; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsAnimationCompat; import androidx.drawerlayout.widget.DrawerLayout; +import androidx.lifecycle.LifecycleKt; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -1593,7 +1594,7 @@ public final class GalleryListScene extends SearchBarScene request.setArgs(new File(StringUtils.avoidNull(mUrlBuilder.getImagePath())), mUrlBuilder.isUseSimilarityScan(), mUrlBuilder.isOnlySearchCovers(), mUrlBuilder.isShowExpunged()); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } else { String url = mUrlBuilder.build(); EhRequest request = new EhRequest(); @@ -1601,7 +1602,7 @@ public final class GalleryListScene extends SearchBarScene request.setCallback(new GetGalleryListListener(getContext(), activity.getStageId(), getTag(), taskId)); request.setArgs(url); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java index 928955e1d..68e38ba0d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryPreviewsScene.java @@ -32,6 +32,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.lifecycle.LifecycleKt; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.slider.Slider; @@ -351,7 +352,7 @@ public class GalleryPreviewsScene extends BaseToolbarScene { request.setCallback(new GetPreviewSetListener(getContext(), activity.getStageId(), getTag(), taskId)); request.setArgs(url); - mClient.execute(request); + mClient.execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } @Override diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt index 8768b7d08..c1168616d 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/HistoryScene.kt @@ -119,6 +119,7 @@ class HistoryScene : BaseToolbarScene() { @SuppressLint("NotifyDataSetChanged") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + viewLifecycleOwner.lifecycleScope mDownloadManager.addDownloadInfoListener(mDownloadInfoListener) mFavouriteStatusRouter.addListener(mFavouriteStatusRouterListener) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java index 35aec633f..59b8899b3 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/ProgressScene.java @@ -27,6 +27,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; +import androidx.lifecycle.LifecycleKt; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; @@ -99,7 +100,7 @@ public final class ProgressScene extends BaseScene implements View.OnClickListen .setArgs(mGid, mPToken, mPage) .setCallback(new GetGalleryTokenListener(context, activity.getStageId(), getTag())); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); return true; } return false; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java index d70afbbf9..d3691dab9 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SignInScene.java @@ -29,6 +29,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.lifecycle.LifecycleKt; import com.google.android.material.textfield.TextInputLayout; import com.hippo.app.BaseDialogBuilder; @@ -289,7 +290,7 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc .setMethod(EhClient.METHOD_SIGN_IN) .setArgs(username, password) .setCallback(callback); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); mSigningIn = true; } @@ -310,10 +311,9 @@ public final class SignInScene extends SolidScene implements EditText.OnEditorAc EhRequest request = new EhRequest() .setMethod(EhClient.METHOD_GET_PROFILE) .setCallback(callback); - EhApplication.getEhClient().execute(request); + EhApplication.getEhClient().execute(request, LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); - EhApplication.getEhClient().execute(new EhRequest() - .setMethod(EhClient.METHOD_GET_UCONFIG)); + EhApplication.getEhClient().execute(new EhRequest().setMethod(EhClient.METHOD_GET_UCONFIG), LifecycleKt.getCoroutineScope(getViewLifecycleOwner().getLifecycle())); } private void redirectTo() {