Просмотр исходного кода

从文字选择处开始朗读,未完成

kunfei 4 лет назад
Родитель
Сommit
7cad2c1c85

+ 5 - 11
app/src/main/java/io/legado/app/service/BaseReadAloudService.kt

@@ -123,19 +123,13 @@ abstract class BaseReadAloudService : BaseService(),
             nowSpeak = 0
             readAloudNumber = textChapter.getReadLength(pageIndex) + startPos
             contentList.clear()
-            if (getPrefBoolean(PreferKey.readAloudByPage)) {
-                for (index in pageIndex..textChapter.lastIndex) {
-                    textChapter.getPage(index)?.text?.split("\n")?.let {
-                        contentList.addAll(it)
+            val readAloudByPage = getPrefBoolean(PreferKey.readAloudByPage)
+            textChapter.getNeedReadAloud(pageIndex, readAloudByPage, startPos)
+                .split("\n").forEach { text ->
+                    if (text.isNotEmpty()) {
+                        contentList.add(text)
                     }
                 }
-            } else {
-                textChapter.getUnRead(pageIndex).split("\n").forEach {
-                    if (it.isNotEmpty()) {
-                        contentList.add(it)
-                    }
-                }
-            }
             if (play) play()
         }
     }

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

@@ -562,11 +562,17 @@ class ReadView(context: Context, attrs: AttributeSet) :
      * 从选择位置开始朗读
      */
     fun aloudStartSelect() {
+        //todo 未完成
         val selectStartPos = curPage.selectStartPos
+        curPage.textPage.textLines.forEach {
+
+        }
         if (selectStartPos.relativePagePos > 0) {
-            ReadBook.moveToNextPage()
+            if (!ReadBook.moveToNextPage()) {
+                ReadBook.moveToNextChapter(false)
+            }
         }
-        //TODO 未完成
+        ReadAloud.play(context)
     }
 
     /**

+ 21 - 0
app/src/main/java/io/legado/app/ui/book/read/page/entities/TextChapter.kt

@@ -2,6 +2,7 @@ package io.legado.app.ui.book.read.page.entities
 
 import kotlin.math.min
 
+@Suppress("unused")
 data class TextChapter(
     val position: Int,
     val title: String,
@@ -85,6 +86,26 @@ data class TextChapter(
         return stringBuilder.toString()
     }
 
+    /**
+     * @return 需要朗读的文本列表
+     * @param pageIndex 起始页
+     * @param pageSplit 是否分页
+     * @param startPos 从当前页什么地方开始朗读
+     */
+    fun getNeedReadAloud(pageIndex: Int, pageSplit: Boolean, startPos: Int): String {
+        //todo 未完成
+        val stringBuilder = StringBuilder()
+        if (pages.isNotEmpty()) {
+            for (index in pageIndex..pages.lastIndex) {
+                stringBuilder.append(pages[index].text)
+                if (pageSplit && !stringBuilder.endsWith("\n")) {
+                    stringBuilder.append("\n")
+                }
+            }
+        }
+        return stringBuilder.toString()
+    }
+
     /**
      * @return 根据索引位置获取所在页
      */