Эх сурвалжийг харах

Merge remote-tracking branch 'upstream/master'

Seidko 4 жил өмнө
parent
commit
ab3c2c935c

+ 2 - 2
app/build.gradle

@@ -164,7 +164,7 @@ dependencies {
     implementation('androidx.constraintlayout:constraintlayout:2.1.4')
     implementation('androidx.swiperefreshlayout:swiperefreshlayout:1.1.0')
     implementation('androidx.viewpager2:viewpager2:1.0.0')
-    implementation('androidx.webkit:webkit:1.4.0')
+    implementation('androidx.webkit:webkit:1.5.0')
 
     //google
     implementation('com.google.android.material:material:1.6.1')
@@ -207,7 +207,7 @@ dependencies {
     implementation('io.github.jeremyliao:live-event-bus-x:1.8.0')
 
     //规则相关
-    implementation('org.jsoup:jsoup:1.15.2')
+    implementation('org.jsoup:jsoup:1.15.3')
     implementation('com.jayway.jsonpath:json-path:2.7.0')
     implementation('cn.wanghaomiao:JsoupXpath:2.5.1')
     implementation(project(path: ':epublib'))

+ 1 - 1
app/src/main/assets/defaultData/directLinkUpload.json

@@ -1,5 +1,5 @@
 {
   "uploadUrl": "http://sy.mgz6.cc/shuyuan,{\"method\":\"POST\",\"body\": {\"file\": \"fileRequest\"},\"type\": \"multipart/form-data\"}",
-  "downloadUrlRule": "$.data@js:if (result == '') \n '' \n else \n 'http://shuyuan.mgz6.cc/shuyuan/' + result",
+  "downloadUrlRule": "$.data@js:if (result == '') \n '' \n else \n 'https://shuyuan.mgz6.cc/shuyuan/' + result",
   "summary": "有效期2天"
 }

+ 5 - 0
app/src/main/assets/updateLog.md

@@ -11,6 +11,11 @@
 * 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
 * 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
 
+**2022/08/23**
+
+* 验证码输入框显示来自哪个书源
+* 修复一键导入丢失url参数的问题
+
 **2022/08/19**
 
 * 更新cronet: 104.0.5112.97

+ 2 - 0
app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt

@@ -27,6 +27,7 @@ object SourceVerificationHelp {
                 appCtx.startActivity<VerificationCodeActivity> {
                     putExtra("imageUrl", url)
                     putExtra("sourceOrigin", source.getKey())
+                    putExtra("sourceName", source.getTag())
                 }
             } else {
                 startBrowser(source, url, title, true)
@@ -58,6 +59,7 @@ object SourceVerificationHelp {
             putExtra("title", title)
             putExtra("url", url)
             putExtra("sourceOrigin", source.getKey())
+            putExtra("sourceName", source.getTag())
             putExtra("sourceVerificationEnable", saveResult)
             IntentData.put(url, source.getHeaderMap(true))
         }

+ 1 - 1
app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt

@@ -46,7 +46,7 @@ class OnLineImportActivity :
             finallyDialog(getString(R.string.error), it)
         }
         intent.data?.let {
-            val url = it.getQueryParameter("src")
+            val url = it.query?.substringAfter("src=")
             if (url.isNullOrBlank()) {
                 finish()
                 return

+ 30 - 22
app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt

@@ -2,12 +2,12 @@ package io.legado.app.ui.association
 
 import android.annotation.SuppressLint
 import android.os.Bundle
+import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
-import android.view.MenuItem
 import androidx.appcompat.widget.Toolbar
-import com.bumptech.glide.request.RequestOptions
 import com.bumptech.glide.load.engine.DiskCacheStrategy
+import com.bumptech.glide.request.RequestOptions
 import io.legado.app.R
 import io.legado.app.base.BaseDialogFragment
 import io.legado.app.databinding.DialogVerificationCodeViewBinding
@@ -17,7 +17,9 @@ import io.legado.app.help.glide.ImageLoader
 import io.legado.app.help.glide.OkHttpModelLoader
 import io.legado.app.lib.theme.primaryColor
 import io.legado.app.ui.widget.dialog.PhotoDialog
-import io.legado.app.utils.*
+import io.legado.app.utils.applyTint
+import io.legado.app.utils.setLayout
+import io.legado.app.utils.showDialogFragment
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 
 /**
@@ -26,12 +28,18 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
  * val key = "${sourceOrigin ?: ""}_verificationResult"
  * CacheManager.get(key)
  */
-class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification_code_view), Toolbar.OnMenuItemClickListener {
+class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification_code_view),
+    Toolbar.OnMenuItemClickListener {
 
-    constructor(imageUrl: String, sourceOrigin: String? = null) : this() {
+    constructor(
+        imageUrl: String,
+        sourceOrigin: String? = null,
+        sourceName: String? = null
+    ) : this() {
         arguments = Bundle().apply {
-            putString("sourceOrigin", sourceOrigin)
             putString("imageUrl", imageUrl)
+            putString("sourceOrigin", sourceOrigin)
+            putString("sourceName", sourceName)
         }
     }
 
@@ -47,23 +55,23 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
         initMenu()
         binding.run {
             toolBar.setBackgroundColor(primaryColor)
-            val sourceOrigin = arguments?.getString("sourceOrigin")
-            arguments?.getString("imageUrl")?.let { imageUrl ->
-                ImageLoader.load(requireContext(), imageUrl).apply {
-                    sourceOrigin?.let {
-                        apply(
-                            RequestOptions().set(
-                                OkHttpModelLoader.sourceOriginOption,
-                                it
+            arguments?.let { arguments ->
+                toolBar.subtitle = arguments.getString("sourceName")
+                val sourceOrigin = arguments.getString("sourceOrigin")
+                arguments.getString("imageUrl")?.let { imageUrl ->
+                    ImageLoader.load(requireContext(), imageUrl).apply {
+                        sourceOrigin?.let {
+                            apply(
+                                RequestOptions().set(OkHttpModelLoader.sourceOriginOption, it)
                             )
-                        )
+                        }
+                    }.error(R.drawable.image_loading_error)
+                        .diskCacheStrategy(DiskCacheStrategy.NONE)
+                        .skipMemoryCache(true)
+                        .into(verificationCodeImageView)
+                    verificationCodeImageView.setOnClickListener {
+                        showDialogFragment(PhotoDialog(imageUrl, sourceOrigin))
                     }
-                }.error(R.drawable.image_loading_error)
-                    .diskCacheStrategy(DiskCacheStrategy.NONE)
-                    .skipMemoryCache(true)
-                    .into(verificationCodeImageView)
-                verificationCodeImageView.setOnClickListener {
-                    showDialogFragment(PhotoDialog(imageUrl, sourceOrigin))
                 }
             }
         }
@@ -86,7 +94,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
                     CacheManager.putMemory(key, it)
                     dismiss()
                 }
-           }
+            }
         }
         return false
     }

+ 85 - 71
app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt

@@ -43,10 +43,18 @@ class ReadMenu @JvmOverloads constructor(
     var cnaShowMenu: Boolean = false
     private val callBack: CallBack get() = activity as CallBack
     private val binding = ViewReadMenuBinding.inflate(LayoutInflater.from(context), this, true)
-    private lateinit var menuTopIn: Animation
-    private lateinit var menuTopOut: Animation
-    private lateinit var menuBottomIn: Animation
-    private lateinit var menuBottomOut: Animation
+    private val menuTopIn: Animation by lazy {
+        loadAnimation(context, R.anim.anim_readbook_top_in)
+    }
+    private val menuTopOut: Animation by lazy {
+        loadAnimation(context, R.anim.anim_readbook_top_out)
+    }
+    private val menuBottomIn: Animation by lazy {
+        loadAnimation(context, R.anim.anim_readbook_bottom_in)
+    }
+    private val menuBottomOut: Animation by lazy {
+        loadAnimation(context, R.anim.anim_readbook_bottom_out)
+    }
     private val bgColor: Int = context.bottomBackground
     private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
     private val bottomBackgroundList: ColorStateList = Selector.colorBuild()
@@ -71,6 +79,58 @@ class ReadMenu @JvmOverloads constructor(
             }
         }
     }
+    private val menuInListener = object : Animation.AnimationListener {
+        override fun onAnimationStart(animation: Animation) {
+            binding.tvSourceAction.isGone = ReadBook.isLocalBook
+            binding.tvLogin.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
+            binding.tvPay.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
+                    || ReadBook.curTextChapter?.isVip != true
+                    || ReadBook.curTextChapter?.isPay == true
+            callBack.upSystemUiVisibility()
+            binding.llBrightness.visible(showBrightnessView)
+        }
+
+        @SuppressLint("RtlHardcoded")
+        override fun onAnimationEnd(animation: Animation) {
+            val navigationBarHeight =
+                if (ReadBookConfig.hideNavigationBar) {
+                    activity?.navigationBarHeight ?: 0
+                } else {
+                    0
+                }
+            binding.run {
+                vwMenuBg.setOnClickListener { runMenuOut() }
+                root.padding = 0
+                when (activity?.navigationBarGravity) {
+                    Gravity.BOTTOM -> root.bottomPadding = navigationBarHeight
+                    Gravity.LEFT -> root.leftPadding = navigationBarHeight
+                    Gravity.RIGHT -> root.rightPadding = navigationBarHeight
+                }
+            }
+            callBack.upSystemUiVisibility()
+            if (!LocalConfig.readMenuHelpVersionIsLast) {
+                callBack.showReadMenuHelp()
+            }
+        }
+
+        override fun onAnimationRepeat(animation: Animation) = Unit
+    }
+    private val menuOutListener = object : Animation.AnimationListener {
+        override fun onAnimationStart(animation: Animation) {
+            binding.vwMenuBg.setOnClickListener(null)
+        }
+
+        override fun onAnimationEnd(animation: Animation) {
+            this@ReadMenu.invisible()
+            binding.titleBar.invisible()
+            binding.bottomMenu.invisible()
+            cnaShowMenu = false
+            onMenuOutEnd?.invoke()
+            callBack.upSystemUiVisibility()
+        }
+
+        override fun onAnimationRepeat(animation: Animation) = Unit
+    }
 
     init {
         initView()
@@ -141,19 +201,29 @@ class ReadMenu @JvmOverloads constructor(
         activity?.window?.attributes = params
     }
 
-    fun runMenuIn() {
+    fun runMenuIn(anim: Boolean = AppConfig.isEInkMode) {
         this.visible()
         binding.titleBar.visible()
         binding.bottomMenu.visible()
-        binding.titleBar.startAnimation(menuTopIn)
-        binding.bottomMenu.startAnimation(menuBottomIn)
+        if (anim) {
+            binding.titleBar.startAnimation(menuTopIn)
+            binding.bottomMenu.startAnimation(menuBottomIn)
+        } else {
+            menuInListener.onAnimationStart(menuBottomIn)
+            menuInListener.onAnimationEnd(menuBottomIn)
+        }
     }
 
-    fun runMenuOut(onMenuOutEnd: (() -> Unit)? = null) {
+    fun runMenuOut(anim: Boolean = AppConfig.isEInkMode, onMenuOutEnd: (() -> Unit)? = null) {
         this.onMenuOutEnd = onMenuOutEnd
         if (this.isVisible) {
-            binding.titleBar.startAnimation(menuTopOut)
-            binding.bottomMenu.startAnimation(menuBottomOut)
+            if (anim) {
+                binding.titleBar.startAnimation(menuTopOut)
+                binding.bottomMenu.startAnimation(menuBottomOut)
+            } else {
+                menuOutListener.onAnimationStart(menuBottomOut)
+                menuOutListener.onAnimationEnd(menuBottomOut)
+            }
         }
     }
 
@@ -288,7 +358,9 @@ class ReadMenu @JvmOverloads constructor(
             }
         }
         llReadAloud.onLongClick {
-            runMenuOut { callBack.showReadAloudDialog() }
+            runMenuOut {
+                callBack.showReadAloudDialog()
+            }
         }
         //界面
         llFont.setOnClickListener {
@@ -306,66 +378,8 @@ class ReadMenu @JvmOverloads constructor(
     }
 
     private fun initAnimation() {
-        //显示菜单
-        menuTopIn = AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_top_in)
-        menuBottomIn = AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_in)
-        menuTopIn.setAnimationListener(object : Animation.AnimationListener {
-            override fun onAnimationStart(animation: Animation) {
-                binding.tvSourceAction.isGone = ReadBook.isLocalBook
-                binding.tvLogin.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
-                binding.tvPay.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
-                        || ReadBook.curTextChapter?.isVip != true
-                        || ReadBook.curTextChapter?.isPay == true
-                callBack.upSystemUiVisibility()
-                binding.llBrightness.visible(showBrightnessView)
-            }
-
-            @SuppressLint("RtlHardcoded")
-            override fun onAnimationEnd(animation: Animation) {
-                val navigationBarHeight =
-                    if (ReadBookConfig.hideNavigationBar) {
-                        activity?.navigationBarHeight ?: 0
-                    } else {
-                        0
-                    }
-                binding.run {
-                    vwMenuBg.setOnClickListener { runMenuOut() }
-                    root.padding = 0
-                    when (activity?.navigationBarGravity) {
-                        Gravity.BOTTOM -> root.bottomPadding = navigationBarHeight
-                        Gravity.LEFT -> root.leftPadding = navigationBarHeight
-                        Gravity.RIGHT -> root.rightPadding = navigationBarHeight
-                    }
-                }
-                callBack.upSystemUiVisibility()
-                if (!LocalConfig.readMenuHelpVersionIsLast) {
-                    callBack.showReadMenuHelp()
-                }
-            }
-
-            override fun onAnimationRepeat(animation: Animation) = Unit
-        })
-
-        //隐藏菜单
-        menuTopOut = AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_top_out)
-        menuBottomOut =
-            AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_out)
-        menuTopOut.setAnimationListener(object : Animation.AnimationListener {
-            override fun onAnimationStart(animation: Animation) {
-                binding.vwMenuBg.setOnClickListener(null)
-            }
-
-            override fun onAnimationEnd(animation: Animation) {
-                this@ReadMenu.invisible()
-                binding.titleBar.invisible()
-                binding.bottomMenu.invisible()
-                cnaShowMenu = false
-                onMenuOutEnd?.invoke()
-                callBack.upSystemUiVisibility()
-            }
-
-            override fun onAnimationRepeat(animation: Animation) = Unit
-        })
+        menuTopIn.setAnimationListener(menuInListener)
+        menuTopOut.setAnimationListener(menuOutListener)
     }
 
     fun upBookView() {

+ 2 - 4
app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt

@@ -33,10 +33,8 @@ class SearchMenu @JvmOverloads constructor(
     private val callBack: CallBack get() = activity as CallBack
     private val binding = ViewSearchMenuBinding.inflate(LayoutInflater.from(context), this, true)
 
-    private val menuBottomIn: Animation =
-        AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_in)
-    private val menuBottomOut: Animation =
-        AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_out)
+    private val menuBottomIn: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_in)
+    private val menuBottomOut: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_out)
     private val bgColor: Int = context.bottomBackground
     private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
     private val bottomBackgroundList: ColorStateList =

+ 1 - 1
app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt

@@ -341,7 +341,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
         historyFlowJob?.cancel()
         historyFlowJob = launch {
             when {
-                key.isNullOrBlank() -> appDb.searchKeywordDao.flowByUsage()
+                key.isNullOrBlank() -> appDb.searchKeywordDao.flowByTime()
                 else -> appDb.searchKeywordDao.flowSearch(key)
             }.conflate().collect {
                 historyKeyAdapter.setItems(it)

+ 1 - 0
app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt

@@ -45,6 +45,7 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
 
     override fun onActivityCreated(savedInstanceState: Bundle?) {
         binding.titleBar.title = intent.getStringExtra("title") ?: getString(R.string.loading)
+        binding.titleBar.subtitle = intent.getStringExtra("sourceName")
         viewModel.initData(intent) {
             val url = viewModel.baseUrl
             val headerMap = viewModel.headerMap

+ 15 - 0
app/src/main/java/io/legado/app/utils/AnimationExtensions.kt

@@ -0,0 +1,15 @@
+package io.legado.app.utils
+
+import android.content.Context
+import android.view.animation.Animation
+import android.view.animation.AnimationUtils
+import androidx.annotation.AnimRes
+import io.legado.app.help.config.AppConfig
+
+fun loadAnimation(context: Context, @AnimRes id: Int): Animation {
+    val animation = AnimationUtils.loadAnimation(context, id)
+    if (AppConfig.isEInkMode) {
+        animation.duration = 0
+    }
+    return animation
+}

+ 0 - 17
app/src/main/java/io/legado/app/utils/AnimationUtilsSupport.kt

@@ -1,17 +0,0 @@
-package io.legado.app.utils
-
-import android.content.Context
-import android.view.animation.Animation
-import android.view.animation.AnimationUtils
-import androidx.annotation.AnimRes
-import io.legado.app.help.config.AppConfig
-
-object AnimationUtilsSupport {
-    fun loadAnimation(context: Context, @AnimRes id: Int): Animation {
-        val animation = AnimationUtils.loadAnimation(context, id)
-        if (AppConfig.isEInkMode) {
-            animation.duration = 0
-        }
-        return animation
-    }
-}

+ 5 - 5
app/src/main/res/layout/dialog_verification_code_view.xml

@@ -10,26 +10,26 @@
         android:id="@+id/tool_bar"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:background="@color/background_menu"
         android:elevation="5dp"
         android:theme="?attr/actionBarStyle"
-        android:background="@color/background_menu"
-        app:title="@string/input_verification_code"
         app:popupTheme="@style/AppTheme.PopupOverlay"
+        app:title="@string/input_verification_code"
         app:titleTextAppearance="@style/ToolbarTitle" />
 
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/verification_code_image_view"
         android:layout_width="match_parent"
         android:layout_height="100dp"
-        android:scaleType="centerCrop"
         android:background="?android:attr/selectableItemBackgroundBorderless"
+        android:scaleType="centerCrop"
         tools:ignore="UnusedAttribute" />
 
     <io.legado.app.ui.widget.text.TextInputLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:padding="3dp"
-        android:layout_marginTop="8dp">
+        android:layout_marginTop="8dp"
+        android:padding="3dp">
 
         <io.legado.app.lib.theme.view.ThemeEditText
             android:id="@+id/verification_code"