Merge remote-tracking branch 'origin/master'

pull/2296/head
kunfei 2 years ago
commit 03e1d5126c
  1. 2
      app/build.gradle
  2. 4
      app/src/main/assets/updateLog.md
  3. 4
      app/src/main/java/io/legado/app/help/AppWebDav.kt
  4. 5
      app/src/main/java/io/legado/app/help/BookHelp.kt
  5. 2
      app/src/main/java/io/legado/app/help/glide/ImageLoader.kt
  6. 2
      app/src/main/java/io/legado/app/ui/about/ReadRecordActivity.kt
  7. 2
      app/src/main/java/io/legado/app/ui/association/BaseAssociationViewModel.kt
  8. 2
      app/src/main/java/io/legado/app/ui/association/FileAssociationViewModel.kt
  9. 18
      app/src/main/java/io/legado/app/ui/association/OnLineImportViewModel.kt
  10. 3
      app/src/main/java/io/legado/app/ui/association/VerificationCodeActivity.kt
  11. 2
      app/src/main/java/io/legado/app/ui/book/local/ImportBookActivity.kt
  12. 1
      app/src/main/java/io/legado/app/ui/book/manage/BookAdapter.kt
  13. 3
      app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt
  14. 4
      app/src/main/java/io/legado/app/ui/book/read/page/provider/ImageProvider.kt
  15. 1
      app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt
  16. 8
      app/src/main/java/io/legado/app/ui/main/explore/ExploreAdapter.kt
  17. 11
      app/src/main/java/io/legado/app/ui/main/explore/ExploreFragment.kt
  18. 8
      app/src/main/java/io/legado/app/ui/main/explore/ExploreViewModel.kt
  19. 2
      app/src/main/java/io/legado/app/utils/EncoderUtils.kt
  20. 2
      app/src/main/java/io/legado/app/utils/StringExtensions.kt
  21. 51
      app/src/main/res/layout/activity_book_source_edit.xml
  22. 3
      app/src/main/res/layout/dialog_bookmark.xml
  23. 3
      app/src/main/res/layout/dialog_http_tts_edit.xml
  24. 3
      app/src/main/res/layout/dialog_login.xml
  25. 3
      app/src/main/res/layout/dialog_url_option_edit.xml
  26. 2
      app/src/main/res/layout/item_change_source.xml
  27. 6
      app/src/main/res/values-es-rES/strings.xml
  28. 6
      app/src/main/res/values-ja-rJP/strings.xml
  29. 6
      app/src/main/res/values-pt-rBR/strings.xml
  30. 6
      app/src/main/res/values-zh-rHK/strings.xml
  31. 6
      app/src/main/res/values-zh-rTW/strings.xml
  32. 6
      app/src/main/res/values-zh/strings.xml
  33. 6
      app/src/main/res/values/strings.xml
  34. 2
      build.gradle

@ -131,7 +131,7 @@ resourcePlaceholders {
dependencies {
//noinspection GradleDependency
coreLibraryDesugaring('com.android.tools:desugar_jdk_libs:1.1.6')
coreLibraryDesugaring('com.android.tools:desugar_jdk_libs:1.2.2')
testImplementation('junit:junit:4.13.2')
androidTestImplementation('androidx.test:runner:1.4.0')
androidTestImplementation('androidx.test.espresso:espresso-core:3.4.0')

@ -11,6 +11,10 @@
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
**2022/09/16**
* 一些优化
**2022/09/15**
* 更新cronet: 105.0.5195.136

@ -19,9 +19,11 @@ import io.legado.app.lib.webdav.WebDavException
import io.legado.app.lib.webdav.WebDavFile
import io.legado.app.ui.widget.dialog.WaitDialog
import io.legado.app.utils.*
import kotlinx.coroutines.*
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import splitties.init.appCtx
import java.io.File
import java.text.SimpleDateFormat

@ -139,8 +139,11 @@ object BookHelp {
var bytes = analyzeUrl.getByteArrayAwait()
//某些图片被加密,需要进一步解密
bookSource?.getContentRule()?.imageDecode?.let {
if (it.isBlank()) {
return@let
}
kotlin.runCatching {
bookSource?.evalJS(it) {
bookSource.evalJS(it) {
put("book", book)
put("result", bytes)
put("src", src)

@ -7,8 +7,8 @@ import android.net.Uri
import androidx.annotation.DrawableRes
import com.bumptech.glide.RequestBuilder
import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.isDataUrl
import io.legado.app.utils.isContentScheme
import io.legado.app.utils.isDataUrl
import java.io.File
@Suppress("unused")

@ -1,6 +1,5 @@
package io.legado.app.ui.about
import java.text.SimpleDateFormat
import android.content.Context
import android.os.Bundle
import android.view.Menu
@ -26,6 +25,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.text.SimpleDateFormat
class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {

@ -21,7 +21,7 @@ abstract class BaseAssociationViewModel(application: Application) : BaseViewMode
}
}
fun importJson(json: String) {
private fun importJson(json: String) {
//暂时根据文件内容判断属于什么
when {
json.contains("sourceUrl") ->

@ -7,13 +7,11 @@ import androidx.lifecycle.MutableLiveData
import io.legado.app.constant.AppLog
import io.legado.app.constant.AppPattern.bookFileRegex
import io.legado.app.exception.NoStackTraceException
import io.legado.app.help.IntentData
import io.legado.app.model.localBook.LocalBook
import io.legado.app.utils.inputStream
import io.legado.app.utils.isJson
import io.legado.app.utils.printOnDebug
import java.io.File
import java.io.InputStream
class FileAssociationViewModel(application: Application) : BaseAssociationViewModel(application) {
val importBookLiveData = MutableLiveData<Uri>()

@ -1,12 +1,16 @@
package io.legado.app.ui.association
import android.app.Application
import androidx.core.net.toUri
import io.legado.app.R
import io.legado.app.help.config.ReadBookConfig
import io.legado.app.help.http.newCallResponseBody
import io.legado.app.help.http.okHttpClient
import io.legado.app.help.http.text
import io.legado.app.utils.FileUtils
import io.legado.app.utils.externalCache
import okhttp3.MediaType.Companion.toMediaType
import splitties.init.appCtx
class OnLineImportViewModel(app: Application) : BaseAssociationViewModel(app) {
@ -72,8 +76,18 @@ class OnLineImportViewModel(app: Application) : BaseAssociationViewModel(app) {
importReadConfig(rs.bytes(), finally)
}
else -> {
val json = rs.text("utf-8")
importJson(json)
val inputStream = rs.byteStream()
val file = FileUtils.createFileIfNotExist(
appCtx.externalCache,
"download",
"scheme_import_cache.json"
)
file.outputStream().use { out ->
inputStream.use {
it.copyTo(out)
}
}
importJson(file.toUri())
}
}
}

@ -17,8 +17,9 @@ class VerificationCodeActivity :
override fun onActivityCreated(savedInstanceState: Bundle?) {
intent.getStringExtra("imageUrl")?.let {
val sourceOrigin = intent.getStringExtra("sourceOrigin")
val sourceName = intent.getStringExtra("sourceName")
showDialogFragment(
VerificationCodeDialog(it, sourceOrigin)
VerificationCodeDialog(it, sourceOrigin, sourceName)
)
} ?: finish()
}

@ -200,7 +200,7 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
private fun upSort(sort: Int) {
viewModel.sort = sort
putPrefInt(PreferKey.localBookImportSort, sort)
if (scanDocJob?.isCancelled == true || scanDocJob?.isCompleted == true) {
if (scanDocJob?.isActive != true) {
viewModel.dataCallback?.setItems(adapter.getItems())
}
}

@ -15,7 +15,6 @@ import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.widget.recycler.DragSelectTouchHelper
import io.legado.app.ui.widget.recycler.ItemTouchCallback
import java.util.*
import kotlin.collections.HashSet
class BookAdapter(context: Context, val callBack: CallBack) :
RecyclerAdapter<Book, ItemArrangeBookBinding>(context),

@ -15,7 +15,8 @@ import android.view.animation.Animation
import android.widget.FrameLayout
import android.widget.SeekBar
import androidx.appcompat.widget.PopupMenu
import androidx.core.view.*
import androidx.core.view.isGone
import androidx.core.view.isVisible
import io.legado.app.R
import io.legado.app.constant.PreferKey
import io.legado.app.databinding.ViewReadMenuBinding

@ -15,7 +15,9 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.model.ReadBook
import io.legado.app.model.localBook.EpubFile
import io.legado.app.utils.*
import io.legado.app.utils.BitmapUtils
import io.legado.app.utils.FileUtils
import io.legado.app.utils.toastOnUi
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.withContext

@ -21,7 +21,6 @@ import io.legado.app.data.entities.BookSource
import io.legado.app.databinding.ActivityBookSourceBinding
import io.legado.app.databinding.DialogEditTextBinding
import io.legado.app.help.DirectLinkUpload
import io.legado.app.help.IntentData
import io.legado.app.help.config.LocalConfig
import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor

@ -10,12 +10,10 @@ import com.google.android.flexbox.FlexboxLayout
import io.legado.app.R
import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.data.appDb
import io.legado.app.data.entities.BookSource
import io.legado.app.data.entities.rule.ExploreKind
import io.legado.app.databinding.ItemFilletTextBinding
import io.legado.app.databinding.ItemFindBookBinding
import io.legado.app.help.config.SourceConfig
import io.legado.app.help.coroutine.Coroutine
import io.legado.app.lib.theme.accentColor
import io.legado.app.ui.login.SourceLoginActivity
@ -173,10 +171,7 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
}.onSuccess {
callBack.refreshData()
}
R.id.menu_del -> Coroutine.async(callBack.scope) {
appDb.bookSourceDao.delete(source)
SourceConfig.removeSource(source.bookSourceUrl)
}
R.id.menu_del -> callBack.deleteSource(source)
}
true
}
@ -191,5 +186,6 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
fun openExplore(sourceUrl: String, title: String, exploreUrl: String?)
fun editSource(sourceUrl: String)
fun toTop(source: BookSource)
fun deleteSource(source: BookSource)
}
}

@ -18,6 +18,7 @@ import io.legado.app.data.appDb
import io.legado.app.data.entities.BookSource
import io.legado.app.databinding.FragmentExploreBinding
import io.legado.app.help.config.AppConfig
import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor
import io.legado.app.lib.theme.primaryTextColor
import io.legado.app.ui.book.explore.ExploreShowActivity
@ -183,6 +184,16 @@ class ExploreFragment : VMBaseFragment<ExploreViewModel>(R.layout.fragment_explo
viewModel.topSource(source)
}
override fun deleteSource(source: BookSource) {
alert(R.string.draw) {
setMessage(getString(R.string.sure_del) + "\n" + source.bookSourceName)
noButton()
yesButton {
viewModel.deleteSource(source)
}
}
}
fun compressExplore() {
if (!adapter.compressExplore()) {
if (AppConfig.isEInkMode) {

@ -4,6 +4,7 @@ import android.app.Application
import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb
import io.legado.app.data.entities.BookSource
import io.legado.app.help.config.SourceConfig
class ExploreViewModel(application: Application) : BaseViewModel(application) {
@ -15,4 +16,11 @@ class ExploreViewModel(application: Application) : BaseViewModel(application) {
}
}
fun deleteSource(source: BookSource) {
execute {
appDb.bookSourceDao.delete(source)
SourceConfig.removeSource(source.bookSourceUrl)
}
}
}

@ -1,10 +1,10 @@
package io.legado.app.utils
import android.util.Base64
import cn.hutool.crypto.symmetric.SymmetricCrypto
import java.security.spec.AlgorithmParameterSpec
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
import cn.hutool.crypto.symmetric.SymmetricCrypto
/**
* transformations https://developer.android.google.cn/reference/kotlin/javax/crypto/Cipher?hl=en

@ -2,11 +2,11 @@
package io.legado.app.utils
import io.legado.app.constant.AppPattern.dataUriRegex
import android.icu.text.Collator
import android.icu.util.ULocale
import android.net.Uri
import android.text.Editable
import io.legado.app.constant.AppPattern.dataUriRegex
import java.io.File
import java.util.*

@ -13,11 +13,32 @@
app:fitStatusBar="false"
app:title="@string/edit_book_source" />
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical">
android:layout_gravity="center_vertical"
android:paddingHorizontal="8dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/book_type"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/sp_type"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:entries="@array/book_type"
app:theme="@style/Spinner" />
<io.legado.app.lib.theme.view.ThemeCheckBox
android:id="@+id/cb_is_enable"
@ -48,29 +69,8 @@
android:text="@string/review" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:height="30dp"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/book_type"
android:layout_marginLeft="8dp"
android:layout_marginRight="3dp"
tools:ignore="RtlHardcoded" />
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/sp_type"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:entries="@array/book_type"
app:theme="@style/Spinner" />
</LinearLayout>
</HorizontalScrollView>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
@ -119,6 +119,7 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
tools:listitem="@layout/item_source_edit" />
</LinearLayout>

@ -35,7 +35,8 @@
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
android:layout_weight="1"
android:overScrollMode="ifContentScrolls">
<LinearLayout
android:layout_width="match_parent"

@ -26,7 +26,8 @@
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:overScrollMode="ifContentScrolls">
<LinearLayout
android:layout_width="match_parent"

@ -30,7 +30,8 @@
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:overScrollMode="ifContentScrolls">
<com.google.android.flexbox.FlexboxLayout
android:id="@+id/flexbox"

@ -46,7 +46,8 @@
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:overScrollMode="ifContentScrolls">
<LinearLayout
android:layout_width="match_parent"

@ -14,6 +14,7 @@
android:layout_marginTop="5dp"
android:padding="5dp"
android:src="@drawable/ic_praise"
android:contentDescription="@string/like_source"
app:layout_constraintBottom_toTopOf="@+id/iv_bad"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
@ -27,6 +28,7 @@
android:padding="5dp"
android:rotationX="180"
android:src="@drawable/ic_praise"
android:contentDescription="@string/not_like_source"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_good"

@ -1016,8 +1016,8 @@
<string name="rule_review_content">段评内容(contentRule)</string>
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
@ -1026,4 +1026,6 @@
<string name="show_read_title_addition">show read title addition area</string>
<string name="read_bar_style_follow_page">read bar style follow page</string>
<string name="rule_image_decode">Decode Image(imageDecode)</string>
<string name="like_source"></string>
<string name="not_like_source"></string>
</resources>

@ -1019,8 +1019,8 @@
<string name="rule_review_content">段评内容(contentRule)</string>
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
@ -1029,4 +1029,6 @@
<string name="show_read_title_addition">show read title addition area</string>
<string name="read_bar_style_follow_page">read bar style follow page</string>
<string name="rule_image_decode">Decode Image(imageDecode)</string>
<string name="like_source"></string>
<string name="not_like_source"></string>
</resources>

@ -1019,8 +1019,8 @@
<string name="rule_review_content">段评内容(contentRule)</string>
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
@ -1029,4 +1029,6 @@
<string name="show_read_title_addition">show read title addition area</string>
<string name="read_bar_style_follow_page">read bar style follow page</string>
<string name="rule_image_decode">Decode Image(imageDecode)</string>
<string name="like_source"></string>
<string name="not_like_source"></string>
</resources>

@ -1016,8 +1016,8 @@
<string name="rule_review_content">段评内容(contentRule)</string>
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
@ -1026,4 +1026,6 @@
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
<string name="rule_image_decode">图片解密(imageDecode)</string>
<string name="like_source"></string>
<string name="not_like_source"></string>
</resources>

@ -1018,8 +1018,8 @@
<string name="rule_review_content">段评内容(contentRule)</string>
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
@ -1028,4 +1028,6 @@
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
<string name="rule_image_decode">图片解密(imageDecode)</string>
<string name="like_source"></string>
<string name="not_like_source"></string>
</resources>

@ -1018,8 +1018,8 @@
<string name="rule_review_content">段评内容(contentRule)</string>
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
@ -1028,4 +1028,6 @@
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
<string name="rule_image_decode">图片解密(imageDecode)</string>
<string name="like_source"></string>
<string name="not_like_source"></string>
</resources>

@ -1019,8 +1019,8 @@
<string name="rule_review_content">段评内容(contentRule)</string>
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
@ -1029,4 +1029,6 @@
<string name="show_read_title_addition">show read title addition area</string>
<string name="read_bar_style_follow_page">read bar style follow page</string>
<string name="rule_image_decode">Decode Image(imageDecode)</string>
<string name="like_source"></string>
<string name="not_like_source"></string>
</resources>

@ -5,7 +5,7 @@ buildscript {
kotlin_version = '1.7.10'
compose_version = '1.2.1'
compose_compiler_version = '1.3.0'
agp_version= '7.2.2'
agp_version = '7.3.0'
exoplayer_version = '2.18.1'
splitties_version = '3.0.0'
room_version = '2.4.3'

Loading…
Cancel
Save