Browse Source

订阅源增加全屏显示
感谢 @niu-hb
Source: https://github.com/gedoor/legado/pull/5373/commits/76ce4b89a65c688e8a6232c4cb247bdbabbf33af

HapeLee 1 year ago
parent
commit
4296172cc3

+ 31 - 13
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<ActivityRssReadBinding, ReadRssViewModel>
 
     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<ActivityRssReadBinding, ReadRssViewModel>
         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<ActivityRssReadBinding, ReadRssViewModel>
 
     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<ActivityRssReadBinding, ReadRssViewModel>
         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<ActivityRssReadBinding, ReadRssViewModel>
         if (path.isNullOrEmpty()) {
             selectSaveFolder(webPic)
         } else {
-            viewModel.saveImage(webPic, Uri.parse(path))
+            viewModel.saveImage(webPic, path.toUri())
         }
     }
 
@@ -402,7 +420,7 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
 
         @Suppress("DEPRECATION", "OVERRIDE_DEPRECATION", "KotlinRedundantDiagnosticSuppress")
         override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
-            return shouldOverrideUrlLoading(Uri.parse(url))
+            return shouldOverrideUrlLoading(url.toUri())
         }
 
         /**

+ 11 - 0
app/src/main/res/drawable/ic_fullscreen.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:tint="?attr/colorControlNormal"
+    android:viewportWidth="960"
+    android:viewportHeight="960">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M120,840L120,640L200,640L200,760L320,760L320,840L120,840ZM640,840L640,760L760,760L760,640L840,640L840,840L640,840ZM120,320L120,120L320,120L320,200L200,200L200,320L120,320ZM760,320L760,200L640,200L640,120L840,120L840,320L760,320Z" />
+</vector>

+ 9 - 1
app/src/main/res/menu/rss_read.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
     <item
         android:id="@+id/menu_rss_refresh"
         android:title="@string/refresh"
@@ -13,6 +14,13 @@
         android:icon="@drawable/ic_star"
         app:showAsAction="always" />
 
+    <item
+        android:id="@+id/menu_full_screen"
+        android:icon="@drawable/ic_fullscreen"
+        android:title="@string/full_screen"
+        app:showAsAction="always"
+        tools:ignore="AlwaysShowAction" />
+
     <item
         android:id="@+id/menu_share_it"
         android:title="@string/share"