diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt index 479b06538..479ea71d0 100644 --- a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt @@ -7,6 +7,7 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.appcompat.widget.Toolbar +import androidx.fragment.app.viewModels import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.GlideException @@ -19,6 +20,7 @@ import io.legado.app.databinding.DialogVerificationCodeViewBinding import io.legado.app.help.glide.ImageLoader import io.legado.app.help.glide.OkHttpModelLoader import io.legado.app.help.source.SourceVerificationHelp +import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor import io.legado.app.model.ImageProvider import io.legado.app.ui.widget.dialog.PhotoDialog @@ -49,6 +51,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification } val binding by viewBinding(DialogVerificationCodeViewBinding::bind) + val viewModel by viewModels() override fun onStart() { super.onStart() @@ -60,6 +63,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification override fun onFragmentCreated(view: View, savedInstanceState: Bundle?): Unit = binding.run { initMenu() val arguments = arguments ?: return@run + viewModel.initData(arguments) toolBar.setBackgroundColor(primaryColor) toolBar.subtitle = arguments.getString("sourceName") sourceOrigin = arguments.getString("sourceOrigin") @@ -119,6 +123,24 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification SourceVerificationHelp.setResult(sourceOrigin!!, verificationCode) dismiss() } + + R.id.menu_disable_source -> { + viewModel.disableSource { + dismiss() + } + } + + R.id.menu_delete_source -> { + alert(R.string.draw) { + setMessage(getString(R.string.sure_del) + "\n" + viewModel.sourceName) + noButton() + yesButton { + viewModel.deleteSource { + dismiss() + } + } + } + } } return false } diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeViewModel.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeViewModel.kt new file mode 100644 index 000000000..3ea2434e8 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeViewModel.kt @@ -0,0 +1,34 @@ +package io.legado.app.ui.association + +import android.app.Application +import android.os.Bundle +import io.legado.app.base.BaseViewModel +import io.legado.app.data.appDb + +class VerificationCodeViewModel(app: Application): BaseViewModel(app) { + + var sourceOrigin = "" + var sourceName = "" + + fun initData(arguments: Bundle) { + sourceName = arguments.getString("sourceName") ?: "" + sourceOrigin = arguments.getString("sourceOrigin") ?: "" + } + + fun disableSource(block: () -> Unit) { + execute { + appDb.bookSourceDao.enable(sourceOrigin, false) + }.onSuccess { + block.invoke() + } + } + + fun deleteSource(block: () -> Unit) { + execute { + appDb.bookSourceDao.delete(sourceOrigin) + }.onSuccess { + block.invoke() + } + } + +} diff --git a/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt b/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt index 99191e185..37b4eec2b 100644 --- a/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt +++ b/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt @@ -30,6 +30,7 @@ import io.legado.app.help.config.AppConfig import io.legado.app.help.http.CookieStore import io.legado.app.help.source.SourceVerificationHelp import io.legado.app.lib.dialogs.SelectItem +import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.accentColor import io.legado.app.model.Download import io.legado.app.ui.association.OnLineImportActivity @@ -102,6 +103,14 @@ class WebViewActivity : VMBaseActivity() { return super.onCompatCreateOptionsMenu(menu) } + override fun onPrepareOptionsMenu(menu: Menu): Boolean { + if (viewModel.sourceOrigin.isNotEmpty()) { + menu.findItem(R.id.menu_disable_source)?.isVisible = true + menu.findItem(R.id.menu_delete_source)?.isVisible = true + } + return super.onPrepareOptionsMenu(menu) + } + override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_open_in_browser -> openUrl(viewModel.baseUrl) @@ -117,6 +126,23 @@ class WebViewActivity : VMBaseActivity() { } R.id.menu_full_screen -> toggleFullScreen() + R.id.menu_disable_source -> { + viewModel.disableSource { + finish() + } + } + + R.id.menu_delete_source -> { + alert(R.string.draw) { + setMessage(getString(R.string.sure_del) + "\n" + viewModel.sourceName) + noButton() + yesButton { + viewModel.deleteSource { + finish() + } + } + } + } } return super.onCompatOptionsItemSelected(item) } diff --git a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt index 292ced78b..e0e7caca8 100644 --- a/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/browser/WebViewModel.kt @@ -33,6 +33,7 @@ class WebViewModel(application: Application) : BaseViewModel(application) { val headerMap: HashMap = hashMapOf() var sourceVerificationEnable: Boolean = false var refetchAfterSuccess: Boolean = true + var sourceName: String = "" var sourceOrigin: String = "" fun initData( @@ -43,6 +44,7 @@ class WebViewModel(application: Application) : BaseViewModel(application) { this@WebViewModel.intent = intent val url = intent.getStringExtra("url") ?: throw NoStackTraceException("url不能为空") + sourceName = intent.getStringExtra("sourceName") ?: "" sourceOrigin = intent.getStringExtra("sourceOrigin") ?: "" sourceVerificationEnable = intent.getBooleanExtra("sourceVerificationEnable", false) refetchAfterSuccess = intent.getBooleanExtra("refetchAfterSuccess", true) @@ -123,4 +125,20 @@ class WebViewModel(application: Application) : BaseViewModel(application) { } } + fun disableSource(block: () -> Unit) { + execute { + appDb.bookSourceDao.enable(sourceOrigin, false) + }.onSuccess { + block.invoke() + } + } + + fun deleteSource(block: () -> Unit) { + execute { + appDb.bookSourceDao.delete(sourceOrigin) + }.onSuccess { + block.invoke() + } + } + } \ No newline at end of file diff --git a/app/src/main/res/menu/verification_code.xml b/app/src/main/res/menu/verification_code.xml index 5723c1b13..681f20aac 100644 --- a/app/src/main/res/menu/verification_code.xml +++ b/app/src/main/res/menu/verification_code.xml @@ -10,4 +10,14 @@ android:title="@string/ok" app:showAsAction="always" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/web_view.xml b/app/src/main/res/menu/web_view.xml index 3bcf2a4fe..7cb6cc717 100644 --- a/app/src/main/res/menu/web_view.xml +++ b/app/src/main/res/menu/web_view.xml @@ -23,4 +23,16 @@ android:title="@string/full_screen" app:showAsAction="never" /> + + + + \ No newline at end of file