pull/32/head
kunfei 5 years ago
parent cff8b28a51
commit 7d516587b3
  1. 8
      app/src/main/java/io/legado/app/ui/readbook/ReadBookActivity.kt
  2. 18
      app/src/main/java/io/legado/app/ui/readbook/ReadBookViewModel.kt
  3. 4
      app/src/main/java/io/legado/app/ui/widget/page/DataSource.kt
  4. 10
      app/src/main/java/io/legado/app/ui/widget/page/PageView.kt
  5. 8
      app/src/main/java/io/legado/app/ui/widget/page/TextChapter.kt
  6. 29
      app/src/main/java/io/legado/app/ui/widget/page/TextPageFactory.kt

@ -256,6 +256,14 @@ class ReadBookActivity : VMBaseActivity<ReadBookViewModel>(R.layout.activity_rea
}
}
override fun moveToNextChapter() {
viewModel.moveToNextChapter()
}
override fun moveToPrevChapter() {
viewModel.moveToPrevChapter()
}
private fun onClickReadAloud() {
if (!ReadAloudService.isRun) {
readAloudStatus = Status.STOP

@ -197,6 +197,24 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
}
}
fun moveToNextChapter() {
durChapterIndex++
prevTextChapter = curTextChapter
curTextChapter = nextTextChapter
bookData.value?.let {
loadContent(it, durChapterIndex.plus(1))
}
}
fun moveToPrevChapter() {
durChapterIndex--
nextTextChapter = curTextChapter
curTextChapter = prevTextChapter
bookData.value?.let {
loadContent(it, durChapterIndex.minus(1))
}
}
override fun onCleared() {
super.onCleared()
ReadAloudService.stop(context)

@ -20,6 +20,10 @@ interface DataSource {
fun hasPrevChapter(): Boolean
fun moveToNextChapter()
fun moveToPrevChapter()
interface CallBack {
fun onLoadFinish(bookChapter: BookChapter, content: String)
}

@ -70,6 +70,14 @@ class PageView(context: Context, attrs: AttributeSet) : FrameLayout(context, att
}
return false
}
override fun moveToNextChapter() {
callback?.moveToNextChapter()
}
override fun moveToPrevChapter() {
callback?.moveToPrevChapter()
}
}))
}
@ -201,5 +209,7 @@ class PageView(context: Context, attrs: AttributeSet) : FrameLayout(context, att
fun durChapterPos(pageSize: Int): Int
fun textChapter(chapterOnDur: Int = 0): TextChapter?
fun loadChapter(index: Int)
fun moveToNextChapter()
fun moveToPrevChapter()
}
}

@ -20,6 +20,14 @@ data class TextChapter(
return null
}
fun lastIndex(): Int {
return pages.size - 1
}
fun isLastIndex(index: Int): Boolean {
return index == pages.size - 1
}
fun pageSize(): Int {
return pages.size
}

@ -39,7 +39,12 @@ class TextPageFactory private constructor(dataSource: DataSource) :
override fun moveToNext(): Boolean {
return if (hasNext()) {
index = index.plus(1)
index = if (dataSource.getCurrentChapter()?.isLastIndex(index) == true) {
dataSource.moveToNextChapter()
0
} else {
index.plus(1)
}
true
} else
false
@ -47,7 +52,12 @@ class TextPageFactory private constructor(dataSource: DataSource) :
override fun moveToPrevious(): Boolean {
return if (hasPrev()) {
index = index.minus(1)
index = if (index > 0) {
index.minus(1)
} else {
dataSource.moveToPrevChapter()
dataSource.getPreviousChapter()?.lastIndex() ?: 0
}
true
} else
false
@ -59,12 +69,23 @@ class TextPageFactory private constructor(dataSource: DataSource) :
}
override fun nextPage(): TextPage? {
return dataSource.getCurrentChapter()?.page(index + 1)
dataSource.getCurrentChapter()?.let {
if (index < it.pageSize() - 1) {
return dataSource.getCurrentChapter()?.page(index + 1)
?: TextPage(index + 1, "index:${index + 1}", "index:${index + 1}")
}
}
return dataSource.getNextChapter()?.page(0)
?: TextPage(index + 1, "index:${index + 1}", "index:${index + 1}")
}
override fun previousPage(): TextPage? {
return dataSource.getCurrentChapter()?.page(index - 1)
if (index > 0) {
return dataSource.getCurrentChapter()?.page(index - 1)
?: TextPage(index - 1, "index:${index - 1}", "index:${index - 1}")
}
return dataSource.getPreviousChapter()?.lastPage()
?: TextPage(index - 1, "index:${index - 1}", "index:${index - 1}")
}

Loading…
Cancel
Save