Bläddra i källkod

Merge branch 'master' into master

kunfei 4 år sedan
förälder
incheckning
bbbb8e9375

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

@@ -11,6 +11,12 @@
 * 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
 * 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
 
+**2022/01/26**
+
+* 修复web写源订阅源保存失败bug
+* http朗读下载错误连续5次后自动暂停
+* 其它一些优化
+
 **2022/01/20**
 
 * 添加payAction规则,返回购买链接

+ 1 - 1
app/src/main/assets/web/rssSource/index.js

@@ -84,7 +84,7 @@ function rule2json() {
 	RuleJSON.enabled = RuleJSON.enabled == '' || String(RuleJSON.enabled).toLocaleLowerCase().replace(/^\s*|\s*$/g, '') == 'true';
 	RuleJSON.enableJs = RuleJSON.enableJs == '' || String(RuleJSON.enableJs).toLocaleLowerCase().replace(/^\s*|\s*$/g, '') == 'true';
 	RuleJSON.loadWithBaseUrl = RuleJSON.loadWithBaseUrl == '' || String(RuleJSON.loadWithBaseUrl).toLocaleLowerCase().replace(/^\s*|\s*$/g, '') == 'true';
-	RuleJSON.singleUrl = RuleJSON.singleUrl == '' || String(RuleJSON.singleUrl).toLocaleLowerCase().replace(/^\s*|\s*$/g, '') == 'true';
+	RuleJSON.singleUrl = String(RuleJSON.singleUrl).toLocaleLowerCase().replace(/^\s*|\s*$/g, '') == 'true';
 	return RuleJSON;
 }
 // 将源对象填充到源表单

+ 8 - 1
app/src/main/java/io/legado/app/help/ReadBookConfig.kt

@@ -163,6 +163,12 @@ object ReadBookConfig {
 
     val config get() = if (shareLayout) shareConfig else durConfig
 
+    var bgAlpha: Int
+        get() = config.bgAlpha
+        set(value) {
+            config.bgAlpha = value
+        }
+
     var pageAnim: Int
         get() = config.curPageAnim()
         set(value) {
@@ -419,7 +425,8 @@ object ReadBookConfig {
         var name: String = "",
         var bgStr: String = "#EEEEEE",//白天背景
         var bgStrNight: String = "#000000",//夜间背景
-        var bgStrEInk: String = "#FFFFFF",
+        var bgStrEInk: String = "#FFFFFF",//EInk背景
+        var bgAlpha: Int = 100,//背景透明度
         var bgType: Int = 0,//白天背景类型 0:颜色, 1:assets图片, 2其它图片
         var bgTypeNight: Int = 0,//夜间背景类型
         var bgTypeEInk: Int = 0,

+ 0 - 1
app/src/main/java/io/legado/app/lib/theme/ThemeUtils.kt

@@ -33,7 +33,6 @@ object ThemeUtils {
         }
     }
 
-    @JvmOverloads
     fun resolveDrawable(context: Context, @AttrRes attr: Int): Drawable? {
         val a = context.theme.obtainStyledAttributes(intArrayOf(attr))
         return try {

+ 8 - 4
app/src/main/java/io/legado/app/service/HttpReadAloudService.kt

@@ -180,22 +180,26 @@ class HttpReadAloudService : BaseReadAloudService(),
                             is SocketTimeoutException, is ConnectException -> {
                                 removeSpeakCache(fileName)
                                 downloadErrorNo++
-                                if (playErrorNo > 5) {
-                                    downloadErrorNo = 0
-                                    createSilentSound(fileName)
+                                if (downloadErrorNo > 5) {
                                     val msg = "tts超时或连接错误超过5次\n${it.localizedMessage}"
                                     AppLog.put(msg, it)
                                     toastOnUi(msg)
+                                    pauseReadAloud(true)
                                 } else {
                                     downloadAudio()
                                 }
                             }
                             else -> {
                                 removeSpeakCache(fileName)
-                                createSilentSound(fileName)
+                                downloadErrorNo++
                                 val msg = "tts下载错误\n${it.localizedMessage}"
                                 AppLog.put(msg, it)
                                 Timber.e(it)
+                                if (downloadErrorNo > 5) {
+                                    pauseReadAloud(true)
+                                } else {
+                                    createSilentSound(fileName)
+                                }
                             }
                         }
                     }

+ 1 - 0
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -1005,6 +1005,7 @@ class ReadBookActivity : BaseReadBookActivity(),
             upSystemUiVisibility()
             readView.upBg()
             readView.upStyle()
+            readView.upBgAlpha()
             if (it) {
                 ReadBook.loadContent(resetPageOffset = false)
             } else {

+ 13 - 0
app/src/main/java/io/legado/app/ui/book/read/config/BgTextConfigDialog.kt

@@ -9,6 +9,7 @@ import android.view.Gravity
 import android.view.View
 import android.view.ViewGroup
 import android.view.WindowManager
+import android.widget.SeekBar
 import androidx.documentfile.provider.DocumentFile
 import com.jaredrummler.android.colorpicker.ColorPickerDialog
 import io.legado.app.R
@@ -29,6 +30,7 @@ import io.legado.app.lib.theme.getPrimaryTextColor
 import io.legado.app.lib.theme.getSecondaryTextColor
 import io.legado.app.ui.book.read.ReadBookActivity
 import io.legado.app.ui.document.HandleFileContract
+import io.legado.app.ui.widget.seekbar.SeekBarChangeListener
 import io.legado.app.utils.*
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import timber.log.Timber
@@ -108,6 +110,7 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
         ivImport.setColorFilter(primaryTextColor)
         ivExport.setColorFilter(primaryTextColor)
         ivDelete.setColorFilter(primaryTextColor)
+        tvBgAlpha.setTextColor(primaryTextColor)
         tvBgImage.setTextColor(primaryTextColor)
         recyclerView.adapter = adapter
         adapter.addHeaderView {
@@ -130,6 +133,7 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
     private fun initData() = with(ReadBookConfig.durConfig) {
         binding.tvName.text = name.ifBlank { "文字" }
         binding.swDarkStatusIcon.isChecked = curStatusIconDark()
+        binding.sbBgAlpha.progress = bgAlpha
     }
 
     @SuppressLint("InflateParams")
@@ -205,6 +209,15 @@ class BgTextConfigDialog : BaseDialogFragment(R.layout.dialog_read_bg_text) {
                 toastOnUi("数量已是最少,不能删除.")
             }
         }
+        binding.sbBgAlpha.setOnSeekBarChangeListener(object : SeekBarChangeListener {
+            override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
+                ReadBookConfig.bgAlpha = progress
+            }
+
+            override fun onStopTrackingTouch(seekBar: SeekBar) {
+                postEvent(EventBus.UP_CONFIG, false)
+            }
+        })
     }
 
     @Suppress("BlockingMethodInNonBlockingContext")

+ 6 - 1
app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt

@@ -185,7 +185,12 @@ class PageView(context: Context) : FrameLayout(context) {
     }
 
     fun setBg(bg: Drawable?) {
-        binding.pagePanel.background = bg
+        binding.vwBg.background = bg
+        upBgAlpha()
+    }
+
+    fun upBgAlpha() {
+        binding.vwBg.alpha = ReadBookConfig.bgAlpha / 100f
     }
 
     fun upTime() {

+ 7 - 1
app/src/main/java/io/legado/app/ui/book/read/page/ReadView.kt

@@ -104,7 +104,7 @@ class ReadView(context: Context, attrs: AttributeSet) :
         }
     }
 
-    fun setRect9x() {
+    private fun setRect9x() {
         tlRect.set(0f, 0f, width * 0.33f, height * 0.33f)
         tcRect.set(width * 0.33f, 0f, width * 0.66f, height * 0.33f)
         trRect.set(width * 0.36f, 0f, width.toFloat(), height * 0.33f)
@@ -534,6 +534,12 @@ class ReadView(context: Context, attrs: AttributeSet) :
         nextPage.setBg(ReadBookConfig.bg)
     }
 
+    fun upBgAlpha() {
+        curPage.upBgAlpha()
+        prevPage.upBgAlpha()
+        nextPage.upBgAlpha()
+    }
+
     fun upTime() {
         curPage.upTime()
         prevPage.upTime()

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

@@ -30,7 +30,6 @@ import io.legado.app.utils.*
 import io.legado.app.utils.viewbindingdelegate.viewBinding
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.Job
-import kotlinx.coroutines.flow.collect
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 

+ 23 - 5
app/src/main/res/layout/dialog_read_bg_text.xml

@@ -12,8 +12,8 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:padding="6dp"
-        android:gravity="center_vertical">
+        android:gravity="center_vertical"
+        android:padding="6dp">
 
         <TextView
             android:id="@+id/tv_name_title"
@@ -36,9 +36,9 @@
             android:id="@+id/iv_edit"
             android:layout_width="20dp"
             android:layout_height="20dp"
+            android:contentDescription="@string/edit"
             android:src="@drawable/ic_edit"
-            app:tint="@color/secondaryText"
-            android:contentDescription="@string/edit" />
+            app:tint="@color/secondaryText" />
 
         <Space
             android:layout_width="0dp"
@@ -59,7 +59,8 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:padding="6dp"
-        android:text="@string/dark_status_icon" />
+        android:text="@string/dark_status_icon"
+        tools:ignore="TouchTargetSizeCheck" />
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -140,6 +141,23 @@
 
     </LinearLayout>
 
+    <TextView
+        android:id="@+id/tv_bg_alpha"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingLeft="6dp"
+        android:paddingRight="6dp"
+        android:text="@string/bg_alpha" />
+
+    <io.legado.app.lib.theme.view.ThemeSeekBar
+        android:id="@+id/sb_bg_alpha"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:min="10"
+        android:max="100"
+        android:padding="6dp"
+        tools:ignore="UnusedAttribute" />
+
     <TextView
         android:id="@+id/tv_bg_image"
         android:layout_width="match_parent"

+ 22 - 9
app/src/main/res/layout/view_book_page.xml

@@ -1,22 +1,30 @@
 <?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/page_panel"
+    android:background="@color/background"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
 
+    <View
+        android:id="@+id/vw_bg"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
     <FrameLayout
         android:id="@+id/vw_status_bar"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
+        android:layout_height="wrap_content"
+        app:layout_constraintTop_toTopOf="parent"/>
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/ll_header"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:gravity="center_vertical">
+        android:gravity="center_vertical"
+        app:layout_constraintTop_toBottomOf="@id/vw_status_bar">
 
         <io.legado.app.ui.widget.BatteryView
             android:id="@+id/tv_header_left"
@@ -75,26 +83,31 @@
         android:layout_width="match_parent"
         android:layout_height="0.5dp"
         android:background="@color/divider"
-        android:visibility="invisible" />
+        android:visibility="invisible"
+        app:layout_constraintTop_toBottomOf="@id/ll_header"/>
 
     <io.legado.app.ui.book.read.page.ContentTextView
         android:id="@+id/content_text_view"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:layout_weight="1" />
+        android:layout_weight="1"
+        app:layout_constraintTop_toBottomOf="@id/vw_top_divider"
+        app:layout_constraintBottom_toTopOf="@id/vw_bottom_divider"/>
 
     <View
         android:id="@+id/vw_bottom_divider"
         android:layout_width="match_parent"
         android:layout_height="0.5dp"
         android:background="@color/divider"
-        android:visibility="invisible" />
+        android:visibility="invisible"
+        app:layout_constraintBottom_toTopOf="@id/ll_footer"/>
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/ll_footer"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:gravity="center_vertical">
+        android:gravity="center_vertical"
+        app:layout_constraintBottom_toBottomOf="parent">
 
         <io.legado.app.ui.widget.BatteryView
             android:id="@+id/tv_footer_left"
@@ -148,4 +161,4 @@
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-</LinearLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 0
app/src/main/res/values-es-rES/strings.xml

@@ -913,5 +913,6 @@
     <string name="expand_text_menu">展开文本选择菜单</string>
     <string name="book_tree_uri_t">书籍保存位置</string>
     <string name="book_tree_uri_s">从其它应用打开的书籍保存位置</string>
+    <string name="bg_alpha">背景透明度</string>
 
 </resources>

+ 1 - 0
app/src/main/res/values-ja-rJP/strings.xml

@@ -916,5 +916,6 @@
     <string name="expand_text_menu">展开文本选择菜单</string>
     <string name="book_tree_uri_t">书籍保存位置</string>
     <string name="book_tree_uri_s">从其它应用打开的书籍保存位置</string>
+    <string name="bg_alpha">背景透明度</string>
 
 </resources>

+ 3 - 0
app/src/main/res/values-pt-rBR/strings.xml

@@ -418,6 +418,7 @@
     <string name="rule_chapter_list">目录列表规则(capítuloLista)</string>
     <string name="rule_chapter_name">章节名称规则(capítuloNome)</string>
     <string name="rule_chapter_url">章节URL规则(capítuloUrl)</string>
+    <string name="rule_is_volume">卷标识(isVolume)</string>
     <string name="rule_is_vip">VIP标识(éVip)</string>
     <string name="rule_update_time">更新时间(capítuloInfo)</string>
     <string name="rule_book_content">正文规则(conteúdo)</string>
@@ -426,6 +427,7 @@
     <string name="rule_source_regex">资源正则(fonteRegex)</string>
     <string name="rule_replace_regex">替换规则(substRegex)</string>
     <string name="rule_image_style">图片样式(imagemFormato)</string>
+    <string name="rule_pay_action">购买操作(payAction)</string>
 
     <string name="source_icon">图标(fonteÍcone)</string>
     <string name="r_articles">列表规则(regrasArtigos)</string>
@@ -914,5 +916,6 @@
     <string name="expand_text_menu">展开文本选择菜单</string>
     <string name="book_tree_uri_t">书籍保存位置</string>
     <string name="book_tree_uri_s">从其它应用打开的书籍保存位置</string>
+    <string name="bg_alpha">背景透明度</string>
 
 </resources>

+ 1 - 0
app/src/main/res/values-zh-rHK/strings.xml

@@ -913,5 +913,6 @@
     <string name="expand_text_menu">展开文本选择菜单</string>
     <string name="book_tree_uri_t">书籍保存位置</string>
     <string name="book_tree_uri_s">从其它应用打开的书籍保存位置</string>
+    <string name="bg_alpha">背景透明度</string>
 
 </resources>

+ 1 - 0
app/src/main/res/values-zh-rTW/strings.xml

@@ -915,5 +915,6 @@
     <string name="search_content_size">搜尋結果</string>
     <string name="book_tree_uri_t">書籍儲存位置</string>
     <string name="book_tree_uri_s">從其它應用程式打開的書籍儲存位置</string>
+    <string name="bg_alpha">背景透明度</string>
 
 </resources>

+ 1 - 0
app/src/main/res/values-zh/strings.xml

@@ -915,5 +915,6 @@
     <string name="expand_text_menu">展开文本选择菜单</string>
     <string name="book_tree_uri_t">书籍保存位置</string>
     <string name="book_tree_uri_s">从其它应用打开的书籍保存位置</string>
+    <string name="bg_alpha">背景透明度</string>
 
 </resources>

+ 2 - 1
app/src/main/res/values/strings.xml

@@ -418,7 +418,7 @@
     <string name="rule_chapter_list">目录列表规则(chapterList)</string>
     <string name="rule_chapter_name">章节名称规则(ChapterName)</string>
     <string name="rule_chapter_url">章节URL规则(chapterUrl)</string>
-    <string name="rule_is_volume">Volume标识(isVolume)</string>
+    <string name="rule_is_volume">卷标识(isVolume)</string>
     <string name="rule_is_vip">VIP标识(isVip)</string>
     <string name="rule_update_time">更新时间(ChapterInfo)</string>
     <string name="rule_book_content">正文规则(content)</string>
@@ -919,6 +919,7 @@
     <string name="book_tree_uri_s">从其它应用打开的书籍保存位置</string>
     <string name="select_book_folder">选择保存书籍的文件夹</string>
     <string name="user_agent">用户代理</string>
+    <string name="bg_alpha">背景透明度</string>
 
     <!-- check source config string -->
     <string name="check_source_config">校验设置</string>

+ 1 - 1
build.gradle

@@ -13,7 +13,7 @@ buildscript {
         //maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:7.0.4'
+        classpath 'com.android.tools.build:gradle:7.1.0'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
         classpath 'de.timfreiheit.resourceplaceholders:placeholders:0.4'
         classpath 'de.undercouch:gradle-download-task:4.1.2'

+ 1 - 1
gradle/wrapper/gradle-wrapper.properties

@@ -1,6 +1,6 @@
 #Fri May 07 15:24:46 CST 2021
 distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
 distributionPath=wrapper/dists
 zipStorePath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME