From e51c297a7d6e77fca6e1cb822e93d771501caf4d Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 12 Feb 2023 01:03:53 +0800 Subject: [PATCH] Call getImageLimits() in SettingsActivity's onCreate() --- .../preference/ImageLimitsPreference.kt | 68 ++++++------------- .../com/hippo/ehviewer/ui/SettingsActivity.kt | 32 +++++++++ app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/xml/eh_settings.xml | 1 - 5 files changed, 53 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/preference/ImageLimitsPreference.kt b/app/src/main/java/com/hippo/ehviewer/preference/ImageLimitsPreference.kt index ce2f39680..1c854f474 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/ImageLimitsPreference.kt +++ b/app/src/main/java/com/hippo/ehviewer/preference/ImageLimitsPreference.kt @@ -8,10 +8,7 @@ import android.widget.Button import androidx.appcompat.app.AlertDialog import androidx.lifecycle.lifecycleScope import com.hippo.ehviewer.R -import com.hippo.ehviewer.client.EhEngine -import com.hippo.ehviewer.client.parser.HomeParser import com.hippo.ehviewer.ui.SettingsActivity -import com.hippo.ehviewer.ui.scene.BaseScene import com.hippo.preference.DialogPreference import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.withUIContext @@ -20,18 +17,11 @@ class ImageLimitsPreference(context: Context, attrs: AttributeSet) : DialogPreference(context, attrs), View.OnClickListener { private val mActivity = context as SettingsActivity private val placeholder = context.getString(R.string.please_wait) - private val coroutineScope = mActivity.lifecycleScope private lateinit var resetButton: Button private lateinit var mDialog: AlertDialog - private lateinit var mLimits: HomeParser.Limits - private lateinit var mFunds: HomeParser.Funds init { - coroutineScope.launchIO { - getImageLimits { - summary = "${mLimits.current} / ${mLimits.maximum}" - } - } + updateSummary() } override fun onPrepareDialogBuilder(builder: AlertDialog.Builder) { @@ -45,46 +35,40 @@ class ImageLimitsPreference(context: Context, attrs: AttributeSet) : resetButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE) resetButton.setOnClickListener(this) resetButton.isEnabled = false - if (this::mLimits.isInitialized) { - bind() - } else { - coroutineScope.launchIO { - getImageLimits(true) { - bind() - } - } + launchIOCatching { + mActivity.getImageLimits() } } override fun onDialogClosed(positiveResult: Boolean) { super.onDialogClosed(positiveResult) - if (this::mLimits.isInitialized) { - summary = "${mLimits.current} / ${mLimits.maximum}" - } + updateSummary() } - private suspend fun getImageLimits(showError: Boolean = false, onSuccess: () -> Unit) { + private fun updateSummary() { + summary = mActivity.mLimits?.run { + mActivity.getString(R.string.image_limits_summary, current, maximum) + } ?: mActivity.getString(R.string.image_limits_summary, 0, 0) + } + + private fun launchIOCatching(block: suspend () -> Unit) = mActivity.lifecycleScope.launchIO { runCatching { - EhEngine.getImageLimits() + block() }.onFailure { it.printStackTrace() - if (showError) { - withUIContext { - mDialog.setMessage(it.message) - } + withUIContext { + mDialog.setMessage(it.message) } }.onSuccess { - mLimits = it.limits - mFunds = it.funds withUIContext { - onSuccess() + bind() } } } private fun bind() { - val (current, maximum, resetCost) = mLimits - val (fundsGP, fundsC) = mFunds + val (current, maximum, resetCost) = mActivity.mLimits!! + val (fundsGP, fundsC) = mActivity.mFunds!! val cost = if (fundsGP >= resetCost) "$resetCost GP" else "$resetCost Credits" val message = mActivity.getString(R.string.current_limits, "$current / $maximum", cost) + "\n" + mActivity.getString(R.string.current_funds, "$fundsGP+", fundsC) @@ -95,22 +79,8 @@ class ImageLimitsPreference(context: Context, attrs: AttributeSet) : override fun onClick(v: View) { resetButton.isEnabled = false mDialog.setMessage(placeholder) - coroutineScope.launchIO { - runCatching { - EhEngine.resetImageLimits() - }.onFailure { - it.printStackTrace() - withUIContext { - mDialog.setMessage(it.message) - } - }.onSuccess { - withUIContext { - mLimits = it ?: HomeParser.Limits(maximum = mLimits.maximum).also { - mActivity.showTip(R.string.reset_limits_succeed, BaseScene.LENGTH_SHORT) - } - bind() - } - } + launchIOCatching { + mActivity.resetImageLimits() } } } \ No newline at end of file diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt index f566f2b4a..21d68f4d6 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.kt @@ -20,20 +20,38 @@ import android.view.MenuItem import android.widget.TextView import androidx.annotation.StringRes import androidx.fragment.app.FragmentTransaction +import androidx.lifecycle.lifecycleScope import androidx.navigation.ActivityNavigator import com.google.android.material.appbar.AppBarLayout import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.snackbar.Snackbar import com.hippo.ehviewer.R +import com.hippo.ehviewer.client.EhCookieStore +import com.hippo.ehviewer.client.EhEngine +import com.hippo.ehviewer.client.parser.HomeParser import com.hippo.ehviewer.ui.fragment.SettingsFragment import com.hippo.ehviewer.ui.scene.BaseScene +import eu.kanade.tachiyomi.util.lang.launchIO +import eu.kanade.tachiyomi.util.lang.withUIContext class SettingsActivity : EhActivity() { private var mFab: FloatingActionButton? = null private var mContentText: TextView? = null private var mAppbarLayout: AppBarLayout? = null + var mLimits: HomeParser.Limits? = null + private set + var mFunds: HomeParser.Funds? = null + private set + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + if (EhCookieStore.hasSignedIn()) { + lifecycleScope.launchIO { + runCatching { + getImageLimits() + }.exceptionOrNull()?.printStackTrace() + } + } setContentView(R.layout.activity_preference) setSupportActionBar(findViewById(R.id.toolbar)) mContentText = findViewById(R.id.tip) @@ -49,6 +67,20 @@ class SettingsActivity : EhActivity() { } } + suspend fun getImageLimits() = EhEngine.getImageLimits().run { + mLimits = limits + mFunds = funds + } + + suspend fun resetImageLimits() { + mLimits = + EhEngine.resetImageLimits() ?: HomeParser.Limits(maximum = mLimits!!.maximum).also { + withUIContext { + showTip(R.string.reset_limits_succeed, BaseScene.LENGTH_SHORT) + } + } + } + fun showTip(@StringRes id: Int, length: Int) { showTip(getString(id), length) } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index affc32cc3..4bb7c7355 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -483,7 +483,7 @@ 资金:%1$s GP,%2$d Credits 余额不足 图片配额 - 当前图片配额和资金 + %1$d / %2$d(点击刷新) 当前:%1$s\n重置花费:%2$s 成功重置图片配额 重置 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a61812e55..8dbb727c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -554,7 +554,7 @@ Funds: %1$s GP, %2$d Credits Insufficient Funds Image Limits - Current Image Limits and Funds + %1$d / %2$d (Click to refresh) Current: %1$s\nReset Cost: %2$s Image limit was successfully reset Reset diff --git a/app/src/main/res/xml/eh_settings.xml b/app/src/main/res/xml/eh_settings.xml index 24800fd68..ab6d4bef2 100644 --- a/app/src/main/res/xml/eh_settings.xml +++ b/app/src/main/res/xml/eh_settings.xml @@ -25,7 +25,6 @@