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

Merge remote-tracking branch 'origin/master'

kunfei 3 лет назад
Родитель
Сommit
77187bb15c
36 измененных файлов с 100 добавлено и 38 удалено
  1. 1 1
      .github/workflows/autoupdatefork.yml
  2. 1 1
      .github/workflows/cronet.yml
  3. 1 1
      .github/workflows/release.yml
  4. 4 4
      .github/workflows/test.yml
  5. 1 1
      .github/workflows/web.yml
  6. 1 1
      app/build.gradle
  7. BIN
      app/cronetlib/cronet_api.jar
  8. BIN
      app/cronetlib/cronet_impl_common_java.jar
  9. BIN
      app/cronetlib/cronet_impl_native_java.jar
  10. BIN
      app/cronetlib/cronet_impl_platform_java.jar
  11. 1 1
      app/src/main/assets/cronet.json
  12. 1 0
      app/src/main/assets/updateLog.md
  13. 1 0
      app/src/main/java/io/legado/app/constant/PreferKey.kt
  14. 6 0
      app/src/main/java/io/legado/app/help/config/AppConfig.kt
  15. 1 1
      app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt
  16. 0 1
      app/src/main/java/io/legado/app/help/http/OkHttpExceptionInterceptor.kt
  17. 18 8
      app/src/main/java/io/legado/app/model/ReadBook.kt
  18. 11 3
      app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt
  19. 3 1
      app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt
  20. 2 2
      app/src/main/java/io/legado/app/ui/book/read/page/ContentTextView.kt
  21. 2 2
      app/src/main/java/io/legado/app/ui/book/read/page/provider/TextPageFactory.kt
  22. 3 3
      app/src/main/java/io/legado/app/ui/main/MainViewModel.kt
  23. 5 0
      app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt
  24. 15 1
      app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksFragment.kt
  25. 11 2
      app/src/main/res/layout/dialog_bookshelf_config.xml
  26. 0 1
      app/src/main/res/layout/fragment_books.xml
  27. 1 0
      app/src/main/res/values-es-rES/strings.xml
  28. 1 0
      app/src/main/res/values-ja-rJP/strings.xml
  29. 1 0
      app/src/main/res/values-pt-rBR/strings.xml
  30. 1 0
      app/src/main/res/values-vi/strings.xml
  31. 1 0
      app/src/main/res/values-zh-rHK/strings.xml
  32. 1 0
      app/src/main/res/values-zh-rTW/strings.xml
  33. 1 0
      app/src/main/res/values-zh/strings.xml
  34. 1 0
      app/src/main/res/values/strings.xml
  35. 1 1
      build.gradle
  36. 2 2
      gradle.properties

+ 1 - 1
.github/workflows/autoupdatefork.yml

@@ -11,7 +11,7 @@ jobs:
     if: ${{ github.event.repository.owner.id == github.event.sender.id && github.actor != 'gedoor' }}
     steps:
     - name: Checkout
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Set env
       run: |
         git config --global user.email "github-actions@github.com"

+ 1 - 1
.github/workflows/cronet.yml

@@ -11,7 +11,7 @@ jobs:
     runs-on: ubuntu-latest
     if: ${{ github.repository == 'gedoor/legado' }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
 
       - name: Check Cronet Updates
         run: source .github/scripts/cronet.sh

+ 1 - 1
.github/workflows/release.yml

@@ -42,7 +42,7 @@ jobs:
       VERSION: ${{ needs.prepare.outputs.version }}
       play: ${{ needs.prepare.outputs.play }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
 
       - name: Set up JDK 17
         uses: actions/setup-java@v3

+ 4 - 4
.github/workflows/test.yml

@@ -53,7 +53,7 @@ jobs:
       VERSION: ${{ needs.prepare.outputs.version }}
       VERSIONL: ${{ needs.prepare.outputs.versionL }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           fetch-depth: 0
       - name: Set up JDK 17
@@ -113,7 +113,7 @@ jobs:
       # 蓝奏云里的文件夹ID(阅读3测试版:2670621)
       LANZOU_FOLDER_ID: '2670621'
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: actions/download-artifact@v3
         with:
           path: apk/
@@ -131,7 +131,7 @@ jobs:
     runs-on: ubuntu-latest
     if: ${{ github.event_name != 'pull_request' && github.actor == 'gedoor' }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: actions/download-artifact@v3
         with:
           path: apk/
@@ -157,7 +157,7 @@ jobs:
       CHANNEL_ID: ${{ secrets.CHANNEL_ID }}
       BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - uses: actions/download-artifact@v3
         with:
           path: apk/

+ 1 - 1
.github/workflows/web.yml

@@ -20,7 +20,7 @@ jobs:
 
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
 
       - name: Install Node.js
         uses: actions/setup-node@v3

+ 1 - 1
app/build.gradle

@@ -184,7 +184,7 @@ dependencies {
     implementation('com.google.code.gson:gson:2.10.1')
 
     //lifecycle
-    def lifecycle_version = '2.6.1'
+    def lifecycle_version = '2.6.2'
     implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")
     implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")
 

BIN
app/cronetlib/cronet_api.jar


BIN
app/cronetlib/cronet_impl_common_java.jar


BIN
app/cronetlib/cronet_impl_native_java.jar


BIN
app/cronetlib/cronet_impl_platform_java.jar


+ 1 - 1
app/src/main/assets/cronet.json

@@ -1 +1 @@
-{"arm64-v8a":"d1d80901d4237fa0af5abc83ac6a7419","armeabi-v7a":"21923acaea2ec3fa03943b2466ab6f4e","x86":"0f90e0244c417bd86d11d0eefdb39773","x86_64":"3cb944b2bf0a1abab4e2bd2f3c6e05d0","version":"115.0.5790.138"}
+{"armeabi-v7a":"af4e0909b1c9b4c1b22037ca6ca1d6ec","arm64-v8a":"7b57dc697f55653f3f7de33338dc9dcf","x86_64":"a91196950841eb45b8dda49da256b188","x86":"a639c96f5c352bab109e1ba48fec57bc","version":"117.0.5938.60"}

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

@@ -13,6 +13,7 @@
 * 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
 
 **2023/08/02**
+* 更新cronet: 117.0.5938.60
 
 * 书签导出md格式
 * 优化进度同步,减少webDav下载次数

+ 1 - 0
app/src/main/java/io/legado/app/constant/PreferKey.kt

@@ -137,6 +137,7 @@ object PreferKey {
     const val batchChangeSourceDelay = "batchChangeSourceDelay"
     const val openBookInfoByClickTitle = "openBookInfoByClickTitle"
     const val defaultHomePage = "defaultHomePage"
+    const val showBookshelfFastScroller = "showBookshelfFastScroller"
 
     const val cPrimary = "colorPrimary"
     const val cAccent = "colorAccent"

+ 6 - 0
app/src/main/java/io/legado/app/help/config/AppConfig.kt

@@ -403,6 +403,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
             appCtx.putPrefBoolean(PreferKey.openBookInfoByClickTitle, value)
         }
 
+    var showBookshelfFastScroller: Boolean
+        get() = appCtx.getPrefBoolean(PreferKey.showBookshelfFastScroller, false)
+        set(value) {
+            appCtx.putPrefBoolean(PreferKey.showBookshelfFastScroller, value)
+        }
+
     var contentSelectSpeakMod: Int
         get() = appCtx.getPrefInt(PreferKey.contentSelectSpeakMod)
         set(value) {

+ 1 - 1
app/src/main/java/io/legado/app/help/coroutine/Coroutine.kt

@@ -138,7 +138,7 @@ class Coroutine<T>(
             job.cancel(cause)
         }
         cancel?.let {
-            MainScope().launch {
+            MainScope().launch(executeContext) {
                 if (null == it.context) {
                     it.block.invoke(scope)
                 } else {

+ 0 - 1
app/src/main/java/io/legado/app/help/http/OkHttpExceptionInterceptor.kt

@@ -1,6 +1,5 @@
 package io.legado.app.help.http
 
-import io.legado.app.utils.asIOException
 import okhttp3.Interceptor
 import okhttp3.Response
 import java.io.IOException

+ 18 - 8
app/src/main/java/io/legado/app/model/ReadBook.kt

@@ -20,6 +20,7 @@ import io.legado.app.utils.toastOnUi
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.MainScope
+import kotlinx.coroutines.SupervisorJob
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import splitties.init.appCtx
@@ -55,6 +56,7 @@ object ReadBook : CoroutineScope by MainScope() {
     var preDownloadTask: Coroutine<*>? = null
     val downloadedChapters = hashSetOf<Int>()
     var contentProcessor: ContentProcessor? = null
+    val downloadScope = CoroutineScope(SupervisorJob() + IO)
 
     //暂时保存跳转前进度
     fun saveCurrentBookProcess() {
@@ -355,7 +357,7 @@ object ReadBook : CoroutineScope by MainScope() {
                             success?.invoke()
                         }
                     } ?: download(
-                        this,
+                        downloadScope,
                         chapter,
                         resetPageOffset = resetPageOffset,
                         pageChanged = pageChanged
@@ -386,7 +388,12 @@ object ReadBook : CoroutineScope by MainScope() {
                         downloadedChapters.add(chapter.index)
                     } else {
                         delay(1000)
-                        download(this, chapter, resetPageOffset = false, pageChanged = false)
+                        download(
+                            downloadScope,
+                            chapter,
+                            resetPageOffset = false,
+                            pageChanged = false
+                        )
                     }
                 } ?: removeLoading(index)
             } catch (e: Exception) {
@@ -503,7 +510,7 @@ object ReadBook : CoroutineScope by MainScope() {
             ) {
                 appDb.bookChapterDao.insert(*cList.toTypedArray())
                 chapterSize = cList.size
-                nextTextChapter ?: loadContent(1)
+                nextTextChapter ?: loadContent(durChapterIndex + 1)
             }
         }
     }
@@ -521,16 +528,19 @@ object ReadBook : CoroutineScope by MainScope() {
     }
 
     fun saveRead() {
-        Coroutine.async {
+        Coroutine.async(executeContext = IO) {
             val book = book ?: return@async
             book.lastCheckCount = 0
             book.durChapterTime = System.currentTimeMillis()
+            val chapterChanged = book.durChapterIndex != durChapterIndex
             book.durChapterIndex = durChapterIndex
             book.durChapterPos = durChapterPos
-            appDb.bookChapterDao.getChapter(book.bookUrl, durChapterIndex)?.let {
-                book.durChapterTitle = it.getDisplayTitle(
-                    ContentProcessor.get(book.name, book.origin).getTitleReplaceRules()
-                )
+            if (chapterChanged) {
+                appDb.bookChapterDao.getChapter(book.bookUrl, durChapterIndex)?.let {
+                    book.durChapterTitle = it.getDisplayTitle(
+                        ContentProcessor.get(book.name, book.origin).getTitleReplaceRules()
+                    )
+                }
             }
             appDb.bookDao.update(book)
         }

+ 11 - 3
app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt

@@ -215,12 +215,16 @@ class ReadBookActivity : BaseReadBookActivity(),
 
     override fun onPostCreate(savedInstanceState: Bundle?) {
         super.onPostCreate(savedInstanceState)
-        viewModel.initData(intent)
+        viewModel.initData(intent) {
+            upMenu()
+        }
     }
 
     override fun onNewIntent(intent: Intent?) {
         super.onNewIntent(intent)
-        viewModel.initData(intent ?: return)
+        viewModel.initData(intent ?: return) {
+            upMenu()
+        }
     }
 
     override fun onWindowFocusChanged(hasFocus: Boolean) {
@@ -244,7 +248,9 @@ class ReadBookActivity : BaseReadBookActivity(),
         if (bookChanged) {
             bookChanged = false
             ReadBook.callBack = this
-            viewModel.initData(intent)
+            viewModel.initData(intent) {
+                upMenu()
+            }
         } else {
             //web端阅读时,app处于阅读界面,本地记录会覆盖web保存的进度,在此处恢复
             ReadBook.webBookProgress?.let {
@@ -1368,6 +1374,8 @@ class ReadBookActivity : BaseReadBookActivity(),
             ReadBook.callBack = null
         }
         ReadBook.preDownloadTask?.cancel()
+        ReadBook.downloadScope.coroutineContext.cancelChildren()
+        ReadBook.coroutineContext.cancelChildren()
         ReadBook.downloadedChapters.clear()
         if (!BuildConfig.DEBUG) {
             Backup.autoBack(this)

+ 3 - 1
app/src/main/java/io/legado/app/ui/book/read/ReadBookViewModel.kt

@@ -56,7 +56,7 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
     /**
      * 初始化
      */
-    fun initData(intent: Intent) {
+    fun initData(intent: Intent, success: (() -> Unit)? = null) {
         execute {
             ReadBook.inBookshelf = intent.getBooleanExtra("inBookshelf", true)
             ReadBook.tocChanged = intent.getBooleanExtra("tocChanged", false)
@@ -70,6 +70,8 @@ class ReadBookViewModel(application: Application) : BaseViewModel(application) {
                 book != null -> initBook(book)
                 else -> ReadBook.upMsg(context.getString(R.string.no_book))
             }
+        }.onSuccess {
+            success?.invoke()
         }.onError {
             val msg = "初始化数据失败\n${it.localizedMessage}"
             ReadBook.upMsg(msg)

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

@@ -285,14 +285,14 @@ class ContentTextView(context: Context, attrs: AttributeSet?) : View(context, at
             val offset = (ChapterProvider.visibleHeight - textPage.height).toInt()
             pageOffset = min(0, offset)
         } else if (pageOffset > 0) {
-            pageFactory.moveToPrev(false)
+            pageFactory.moveToPrev(true)
             textPage = pageFactory.curPage
             pageOffset -= textPage.height.toInt()
             upView?.invoke(textPage)
             contentDescription = textPage.text
         } else if (pageOffset < -textPage.height) {
             pageOffset += textPage.height.toInt()
-            pageFactory.moveToNext(false)
+            pageFactory.moveToNext(true)
             textPage = pageFactory.curPage
             upView?.invoke(textPage)
             contentDescription = textPage.text

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

@@ -39,8 +39,8 @@ class TextPageFactory(dataSource: DataSource) : PageFactory<TextPage>(dataSource
                 ReadBook.moveToNextChapter(upContent)
             } else {
                 ReadBook.setPageIndex(pageIndex.plus(1))
+                if (upContent) upContent(resetPageOffset = false)
             }
-            if (upContent) upContent(resetPageOffset = false)
             true
         } else
             false
@@ -52,8 +52,8 @@ class TextPageFactory(dataSource: DataSource) : PageFactory<TextPage>(dataSource
                 ReadBook.moveToPrevChapter(upContent)
             } else {
                 ReadBook.setPageIndex(pageIndex.minus(1))
+                if (upContent) upContent(resetPageOffset = false)
             }
-            if (upContent) upContent(resetPageOffset = false)
             true
         } else
             false

+ 3 - 3
app/src/main/java/io/legado/app/ui/main/MainViewModel.kt

@@ -138,7 +138,7 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
         }
         waitUpTocBooks.remove(bookUrl)
         upTocAdd(bookUrl)
-        execute(context = upTocPool, executeContext = IO) {
+        execute(context = upTocPool, executeContext = upTocPool) {
             kotlin.runCatching {
                 val oldBook = book.copy()
                 WebBook.runPreUpdateJs(source, book)
@@ -170,10 +170,10 @@ class MainViewModel(application: Application) : BaseViewModel(application) {
                     appDb.bookDao.update(book)
                 }
             }
-        }.onCancel(upTocPool) {
+        }.onCancel {
             upTocCancel(bookUrl)
             upTocCancel(book.bookUrl)
-        }.onFinally(upTocPool) {
+        }.onFinally {
             upTocFinally(bookUrl)
             upTocFinally(book.bookUrl)
             postUpBooksLiveData()

+ 5 - 0
app/src/main/java/io/legado/app/ui/main/bookshelf/BaseBookshelfFragment.kt

@@ -146,6 +146,7 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment<BookshelfVi
                         swShowUnread.isChecked = AppConfig.showUnread
                         swShowLastUpdateTime.isChecked = AppConfig.showLastUpdateTime
                         swShowWaitUpBooks.isChecked = AppConfig.showWaitUpCount
+                        swShowBookshelfFastScroller.isChecked = AppConfig.showBookshelfFastScroller
                         rgLayout.checkByIndex(bookshelfLayout)
                         rgSort.checkByIndex(bookshelfSort)
                     }
@@ -168,6 +169,10 @@ abstract class BaseBookshelfFragment(layoutId: Int) : VMBaseFragment<BookshelfVi
                         AppConfig.showWaitUpCount = swShowWaitUpBooks.isChecked
                         activityViewModel.postUpBooksLiveData(true)
                     }
+                    if (AppConfig.showBookshelfFastScroller != swShowBookshelfFastScroller.isChecked) {
+                        AppConfig.showBookshelfFastScroller = swShowBookshelfFastScroller.isChecked
+                        postEvent(EventBus.BOOKSHELF_REFRESH, "")
+                    }
                     if (bookshelfSort != rgSort.getCheckedIndex()) {
                         AppConfig.bookshelfSort = rgSort.getCheckedIndex()
                         upSort()

+ 15 - 1
app/src/main/java/io/legado/app/ui/main/bookshelf/style1/books/BooksFragment.kt

@@ -71,6 +71,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
     var bookSort = 0
         private set
     private var upLastUpdateTimeJob: Job? = null
+    private var defaultScrollBarSize = 0
 
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
         this.savedInstanceState = savedInstanceState
@@ -86,6 +87,8 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
 
     private fun initRecyclerView() {
         binding.rvBookshelf.setEdgeEffectColor(primaryColor)
+        defaultScrollBarSize = binding.rvBookshelf.scrollBarSize
+        upFastScrollerBar()
         binding.refreshLayout.setColorSchemeColors(accentColor)
         binding.refreshLayout.setOnRefreshListener {
             binding.refreshLayout.isRefreshing = false
@@ -117,6 +120,16 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
         startLastUpdateTimeJob()
     }
 
+    private fun upFastScrollerBar() {
+        val showBookshelfFastScroller = AppConfig.showBookshelfFastScroller
+        binding.rvBookshelf.setFastScrollEnabled(showBookshelfFastScroller)
+        if (showBookshelfFastScroller) {
+            binding.rvBookshelf.scrollBarSize = 0
+        } else {
+            binding.rvBookshelf.scrollBarSize = defaultScrollBarSize
+        }
+    }
+
     fun upBookSort(sort: Int) {
         binding.root.post {
             arguments?.putInt("bookSort", sort)
@@ -275,6 +288,7 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
         observeEvent<String>(EventBus.BOOKSHELF_REFRESH) {
             booksAdapter.notifyDataSetChanged()
             startLastUpdateTimeJob()
+            upFastScrollerBar()
         }
     }
-}
+}

+ 11 - 2
app/src/main/res/layout/dialog_bookshelf_config.xml

@@ -58,13 +58,22 @@
         app:layout_constraintTop_toBottomOf="@+id/sw_show_last_update_time"
         tools:ignore="TouchTargetSizeCheck" />
 
+    <io.legado.app.lib.theme.view.ThemeSwitch
+        android:id="@+id/sw_show_bookshelf_fast_scroller"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:padding="6dp"
+        android:text="@string/show_bookshelf_fast_scroller"
+        app:layout_constraintTop_toBottomOf="@+id/sw_show_wait_up_books"
+        tools:ignore="TouchTargetSizeCheck" />
+
     <LinearLayout
         android:id="@+id/ll_layout"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:orientation="vertical"
         app:layout_constraintRight_toLeftOf="@+id/ll_sort"
-        app:layout_constraintTop_toBottomOf="@+id/sw_show_wait_up_books"
+        app:layout_constraintTop_toBottomOf="@+id/sw_show_bookshelf_fast_scroller"
         app:layout_constraintLeft_toLeftOf="parent">
 
         <io.legado.app.ui.widget.text.AccentTextView
@@ -119,7 +128,7 @@
         android:layout_height="wrap_content"
         android:orientation="vertical"
         app:layout_constraintLeft_toRightOf="@+id/ll_layout"
-        app:layout_constraintTop_toBottomOf="@id/sw_show_wait_up_books"
+        app:layout_constraintTop_toBottomOf="@id/sw_show_bookshelf_fast_scroller"
         app:layout_constraintRight_toRightOf="parent">
 
         <io.legado.app.ui.widget.text.AccentTextView

+ 0 - 1
app/src/main/res/layout/fragment_books.xml

@@ -13,7 +13,6 @@
             android:id="@+id/rv_bookshelf"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:scrollbars="none"
             tools:listitem="@layout/item_bookshelf_list" />
 
     </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

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

@@ -1131,4 +1131,5 @@
     <string name="default_home_page">默认主页</string>
     <string name="use_lib_archive">Use LibArchive</string>
     <string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

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

@@ -1134,4 +1134,5 @@
     <string name="default_home_page">默认主页</string>
     <string name="use_lib_archive">Use LibArchive</string>
     <string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

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

@@ -1134,4 +1134,5 @@
     <string name="default_home_page">默认主页</string>
     <string name="use_lib_archive">Use LibArchive</string>
     <string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

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

@@ -1129,4 +1129,5 @@ Còn </string>
     <string name="export_wait">等待导出</string>
     <string name="use_lib_archive">Use LibArchive</string>
     <string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

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

@@ -1130,4 +1130,5 @@
     <string name="export_wait">等待导出</string>
     <string name="use_lib_archive">使用LibArchive</string>
     <string name="pref_use_lib_archive_summary">使用libarchive解壓檔案,支持解壓RAR5。</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

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

@@ -1132,4 +1132,5 @@
     <string name="export_wait">等待导出</string>
     <string name="use_lib_archive">使用LibArchive</string>
     <string name="pref_use_lib_archive_summary">使用libarchive解壓檔案,支持解壓RAR5。</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

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

@@ -1132,4 +1132,5 @@
     <string name="export_wait">等待导出</string>
     <string name="use_lib_archive">使用LibArchive</string>
     <string name="pref_use_lib_archive_summary">使用libarchive解压文件,支持解压RAR5。</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

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

@@ -1134,4 +1134,5 @@
     <string name="default_home_page">默认主页</string>
     <string name="use_lib_archive">Use LibArchive</string>
     <string name="pref_use_lib_archive_summary">Using libarchive to extract files, it supports extracting RAR5.</string>
+    <string name="show_bookshelf_fast_scroller">显示快速滚动条</string>
 </resources>

+ 1 - 1
build.gradle

@@ -18,7 +18,7 @@ plugins {
     id 'com.android.library' version "$agp_version" apply false
     id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false
     id 'com.google.devtools.ksp' version "$kotlin_version-$ksp_version" apply false
-    id "de.undercouch.download" version "5.4.0" apply false
+    id "de.undercouch.download" version "5.5.0" apply false
     id "com.google.gms.google-services" version "4.3.15" apply false
 }
 

+ 2 - 2
gradle.properties

@@ -42,7 +42,7 @@ android.defaults.buildfeatures.shaders=false
 # and none from the library's dependencies, thereby reducing the size of the R class for that library.
 android.nonTransitiveRClass=true
 # https://chromiumdash.appspot.com/releases?platform=Android
-CronetVersion=115.0.5790.138
-CronetMainVersion=115.0.0.0
+CronetVersion=117.0.5938.60
+CronetMainVersion=117.0.0.0
 android.injected.testOnly=false
 android.nonFinalResIds=true