diff --git a/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt index 79d961f2c..d5a91711e 100644 --- a/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/rss/read/ReadRssActivity.kt @@ -22,6 +22,7 @@ import android.webkit.WebView import android.webkit.WebViewClient import androidx.activity.addCallback import androidx.activity.viewModels +import androidx.core.net.toUri import androidx.core.view.WindowInsetsCompat import androidx.core.view.size import androidx.lifecycle.lifecycleScope @@ -37,8 +38,6 @@ import io.legato.kazusa.help.config.AppConfig import io.legato.kazusa.help.http.CookieManager import io.legato.kazusa.lib.dialogs.SelectItem import io.legato.kazusa.lib.dialogs.selector -//import io.legado.app.lib.theme.accentColor -//import io.legado.app.lib.theme.primaryTextColor import io.legato.kazusa.model.Download import io.legato.kazusa.ui.association.OnLineImportActivity import io.legato.kazusa.ui.file.HandleFileContract @@ -82,6 +81,7 @@ class ReadRssActivity : VMBaseActivity private var starMenuItem: MenuItem? = null private var ttsMenuItem: MenuItem? = null + private var isFullScreen = false private var customWebViewCallback: WebChromeClient.CustomViewCallback? = null private val selectImageDir = registerForActivityResult(HandleFileContract()) { it.uri?.let { uri -> @@ -105,16 +105,20 @@ class ReadRssActivity : VMBaseActivity initLiveData() viewModel.initData(intent) onBackPressedDispatcher.addCallback(this) { - if (binding.customWebView.size > 0) { - customWebViewCallback?.onCustomViewHidden() - return@addCallback - } else if (binding.webView.canGoBack() - && binding.webView.copyBackForwardList().size > 1 - ) { - binding.webView.goBack() - return@addCallback + if (isFullScreen) { + toggleFullScreen() + } else { + if (binding.customWebView.size > 0) { + customWebViewCallback?.onCustomViewHidden() + return@addCallback + } else if (binding.webView.canGoBack() + && binding.webView.copyBackForwardList().size > 1 + ) { + binding.webView.goBack() + return@addCallback + } + finish() } - finish() } } @@ -154,6 +158,7 @@ class ReadRssActivity : VMBaseActivity override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { + R.id.menu_full_screen -> toggleFullScreen() R.id.menu_rss_refresh -> viewModel.refresh { binding.webView.reload() } @@ -207,6 +212,19 @@ class ReadRssActivity : VMBaseActivity return AppConfig.isNightTheme } + private fun toggleFullScreen() { + isFullScreen = !isFullScreen + + toggleSystemBar(!isFullScreen) + + if (isFullScreen) { + supportActionBar?.hide() + toastOnUi("可通过系统手势退出全屏。") + } else { + supportActionBar?.show() + } + } + private fun initView() { binding.root.setOnApplyWindowInsetsListenerCompat { view, windowInsets -> val typeMask = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.ime() @@ -267,7 +285,7 @@ class ReadRssActivity : VMBaseActivity if (path.isNullOrEmpty()) { selectSaveFolder(webPic) } else { - viewModel.saveImage(webPic, Uri.parse(path)) + viewModel.saveImage(webPic, path.toUri()) } } @@ -402,7 +420,7 @@ class ReadRssActivity : VMBaseActivity @Suppress("DEPRECATION", "OVERRIDE_DEPRECATION", "KotlinRedundantDiagnosticSuppress") override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { - return shouldOverrideUrlLoading(Uri.parse(url)) + return shouldOverrideUrlLoading(url.toUri()) } /** diff --git a/app/src/main/res/drawable/ic_fullscreen.xml b/app/src/main/res/drawable/ic_fullscreen.xml new file mode 100644 index 000000000..4cde88413 --- /dev/null +++ b/app/src/main/res/drawable/ic_fullscreen.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/rss_read.xml b/app/src/main/res/menu/rss_read.xml index 5fb847af4..438081da2 100644 --- a/app/src/main/res/menu/rss_read.xml +++ b/app/src/main/res/menu/rss_read.xml @@ -1,6 +1,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools"> + +