Merge remote-tracking branch 'origin/master'
This commit is contained in:
+1
-1
@@ -131,7 +131,7 @@ resourcePlaceholders {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
//noinspection GradleDependency
|
//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')
|
testImplementation('junit:junit:4.13.2')
|
||||||
androidTestImplementation('androidx.test:runner:1.4.0')
|
androidTestImplementation('androidx.test:runner:1.4.0')
|
||||||
androidTestImplementation('androidx.test.espresso:espresso-core:3.4.0')
|
androidTestImplementation('androidx.test.espresso:espresso-core:3.4.0')
|
||||||
|
|||||||
@@ -11,6 +11,10 @@
|
|||||||
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
|
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
|
||||||
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
|
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
|
||||||
|
|
||||||
|
**2022/09/16**
|
||||||
|
|
||||||
|
* 一些优化
|
||||||
|
|
||||||
**2022/09/15**
|
**2022/09/15**
|
||||||
|
|
||||||
* 更新cronet: 105.0.5195.136
|
* 更新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.lib.webdav.WebDavFile
|
||||||
import io.legado.app.ui.widget.dialog.WaitDialog
|
import io.legado.app.ui.widget.dialog.WaitDialog
|
||||||
import io.legado.app.utils.*
|
import io.legado.app.utils.*
|
||||||
import kotlinx.coroutines.*
|
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
|
import kotlinx.coroutines.ensureActive
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import splitties.init.appCtx
|
import splitties.init.appCtx
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
|||||||
@@ -139,8 +139,11 @@ object BookHelp {
|
|||||||
var bytes = analyzeUrl.getByteArrayAwait()
|
var bytes = analyzeUrl.getByteArrayAwait()
|
||||||
//某些图片被加密,需要进一步解密
|
//某些图片被加密,需要进一步解密
|
||||||
bookSource?.getContentRule()?.imageDecode?.let {
|
bookSource?.getContentRule()?.imageDecode?.let {
|
||||||
|
if (it.isBlank()) {
|
||||||
|
return@let
|
||||||
|
}
|
||||||
kotlin.runCatching {
|
kotlin.runCatching {
|
||||||
bookSource?.evalJS(it) {
|
bookSource.evalJS(it) {
|
||||||
put("book", book)
|
put("book", book)
|
||||||
put("result", bytes)
|
put("result", bytes)
|
||||||
put("src", src)
|
put("src", src)
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import android.net.Uri
|
|||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import com.bumptech.glide.RequestBuilder
|
import com.bumptech.glide.RequestBuilder
|
||||||
import io.legado.app.utils.isAbsUrl
|
import io.legado.app.utils.isAbsUrl
|
||||||
import io.legado.app.utils.isDataUrl
|
|
||||||
import io.legado.app.utils.isContentScheme
|
import io.legado.app.utils.isContentScheme
|
||||||
|
import io.legado.app.utils.isDataUrl
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package io.legado.app.ui.about
|
package io.legado.app.ui.about
|
||||||
|
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
@@ -26,6 +25,7 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
|
|||||||
import kotlinx.coroutines.Dispatchers.IO
|
import kotlinx.coroutines.Dispatchers.IO
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
|
||||||
class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
class ReadRecordActivity : BaseActivity<ActivityReadRecordBinding>() {
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ abstract class BaseAssociationViewModel(application: Application) : BaseViewMode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun importJson(json: String) {
|
private fun importJson(json: String) {
|
||||||
//暂时根据文件内容判断属于什么
|
//暂时根据文件内容判断属于什么
|
||||||
when {
|
when {
|
||||||
json.contains("sourceUrl") ->
|
json.contains("sourceUrl") ->
|
||||||
|
|||||||
@@ -7,13 +7,11 @@ import androidx.lifecycle.MutableLiveData
|
|||||||
import io.legado.app.constant.AppLog
|
import io.legado.app.constant.AppLog
|
||||||
import io.legado.app.constant.AppPattern.bookFileRegex
|
import io.legado.app.constant.AppPattern.bookFileRegex
|
||||||
import io.legado.app.exception.NoStackTraceException
|
import io.legado.app.exception.NoStackTraceException
|
||||||
import io.legado.app.help.IntentData
|
|
||||||
import io.legado.app.model.localBook.LocalBook
|
import io.legado.app.model.localBook.LocalBook
|
||||||
import io.legado.app.utils.inputStream
|
import io.legado.app.utils.inputStream
|
||||||
import io.legado.app.utils.isJson
|
import io.legado.app.utils.isJson
|
||||||
import io.legado.app.utils.printOnDebug
|
import io.legado.app.utils.printOnDebug
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.InputStream
|
|
||||||
|
|
||||||
class FileAssociationViewModel(application: Application) : BaseAssociationViewModel(application) {
|
class FileAssociationViewModel(application: Application) : BaseAssociationViewModel(application) {
|
||||||
val importBookLiveData = MutableLiveData<Uri>()
|
val importBookLiveData = MutableLiveData<Uri>()
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
package io.legado.app.ui.association
|
package io.legado.app.ui.association
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
|
import androidx.core.net.toUri
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.help.config.ReadBookConfig
|
import io.legado.app.help.config.ReadBookConfig
|
||||||
import io.legado.app.help.http.newCallResponseBody
|
import io.legado.app.help.http.newCallResponseBody
|
||||||
import io.legado.app.help.http.okHttpClient
|
import io.legado.app.help.http.okHttpClient
|
||||||
import io.legado.app.help.http.text
|
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 okhttp3.MediaType.Companion.toMediaType
|
||||||
|
import splitties.init.appCtx
|
||||||
|
|
||||||
class OnLineImportViewModel(app: Application) : BaseAssociationViewModel(app) {
|
class OnLineImportViewModel(app: Application) : BaseAssociationViewModel(app) {
|
||||||
|
|
||||||
@@ -72,8 +76,18 @@ class OnLineImportViewModel(app: Application) : BaseAssociationViewModel(app) {
|
|||||||
importReadConfig(rs.bytes(), finally)
|
importReadConfig(rs.bytes(), finally)
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
val json = rs.text("utf-8")
|
val inputStream = rs.byteStream()
|
||||||
importJson(json)
|
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?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
intent.getStringExtra("imageUrl")?.let {
|
intent.getStringExtra("imageUrl")?.let {
|
||||||
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
val sourceOrigin = intent.getStringExtra("sourceOrigin")
|
||||||
|
val sourceName = intent.getStringExtra("sourceName")
|
||||||
showDialogFragment(
|
showDialogFragment(
|
||||||
VerificationCodeDialog(it, sourceOrigin)
|
VerificationCodeDialog(it, sourceOrigin, sourceName)
|
||||||
)
|
)
|
||||||
} ?: finish()
|
} ?: finish()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ class ImportBookActivity : VMBaseActivity<ActivityImportBookBinding, ImportBookV
|
|||||||
private fun upSort(sort: Int) {
|
private fun upSort(sort: Int) {
|
||||||
viewModel.sort = sort
|
viewModel.sort = sort
|
||||||
putPrefInt(PreferKey.localBookImportSort, sort)
|
putPrefInt(PreferKey.localBookImportSort, sort)
|
||||||
if (scanDocJob?.isCancelled == true || scanDocJob?.isCompleted == true) {
|
if (scanDocJob?.isActive != true) {
|
||||||
viewModel.dataCallback?.setItems(adapter.getItems())
|
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.DragSelectTouchHelper
|
||||||
import io.legado.app.ui.widget.recycler.ItemTouchCallback
|
import io.legado.app.ui.widget.recycler.ItemTouchCallback
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.HashSet
|
|
||||||
|
|
||||||
class BookAdapter(context: Context, val callBack: CallBack) :
|
class BookAdapter(context: Context, val callBack: CallBack) :
|
||||||
RecyclerAdapter<Book, ItemArrangeBookBinding>(context),
|
RecyclerAdapter<Book, ItemArrangeBookBinding>(context),
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ import android.view.animation.Animation
|
|||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import androidx.appcompat.widget.PopupMenu
|
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.R
|
||||||
import io.legado.app.constant.PreferKey
|
import io.legado.app.constant.PreferKey
|
||||||
import io.legado.app.databinding.ViewReadMenuBinding
|
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.help.coroutine.Coroutine
|
||||||
import io.legado.app.model.ReadBook
|
import io.legado.app.model.ReadBook
|
||||||
import io.legado.app.model.localBook.EpubFile
|
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.IO
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
import kotlinx.coroutines.withContext
|
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.ActivityBookSourceBinding
|
||||||
import io.legado.app.databinding.DialogEditTextBinding
|
import io.legado.app.databinding.DialogEditTextBinding
|
||||||
import io.legado.app.help.DirectLinkUpload
|
import io.legado.app.help.DirectLinkUpload
|
||||||
import io.legado.app.help.IntentData
|
|
||||||
import io.legado.app.help.config.LocalConfig
|
import io.legado.app.help.config.LocalConfig
|
||||||
import io.legado.app.lib.dialogs.alert
|
import io.legado.app.lib.dialogs.alert
|
||||||
import io.legado.app.lib.theme.primaryColor
|
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.R
|
||||||
import io.legado.app.base.adapter.ItemViewHolder
|
import io.legado.app.base.adapter.ItemViewHolder
|
||||||
import io.legado.app.base.adapter.RecyclerAdapter
|
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.BookSource
|
||||||
import io.legado.app.data.entities.rule.ExploreKind
|
import io.legado.app.data.entities.rule.ExploreKind
|
||||||
import io.legado.app.databinding.ItemFilletTextBinding
|
import io.legado.app.databinding.ItemFilletTextBinding
|
||||||
import io.legado.app.databinding.ItemFindBookBinding
|
import io.legado.app.databinding.ItemFindBookBinding
|
||||||
import io.legado.app.help.config.SourceConfig
|
|
||||||
import io.legado.app.help.coroutine.Coroutine
|
import io.legado.app.help.coroutine.Coroutine
|
||||||
import io.legado.app.lib.theme.accentColor
|
import io.legado.app.lib.theme.accentColor
|
||||||
import io.legado.app.ui.login.SourceLoginActivity
|
import io.legado.app.ui.login.SourceLoginActivity
|
||||||
@@ -173,10 +171,7 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
|
|||||||
}.onSuccess {
|
}.onSuccess {
|
||||||
callBack.refreshData()
|
callBack.refreshData()
|
||||||
}
|
}
|
||||||
R.id.menu_del -> Coroutine.async(callBack.scope) {
|
R.id.menu_del -> callBack.deleteSource(source)
|
||||||
appDb.bookSourceDao.delete(source)
|
|
||||||
SourceConfig.removeSource(source.bookSourceUrl)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
@@ -191,5 +186,6 @@ class ExploreAdapter(context: Context, val callBack: CallBack) :
|
|||||||
fun openExplore(sourceUrl: String, title: String, exploreUrl: String?)
|
fun openExplore(sourceUrl: String, title: String, exploreUrl: String?)
|
||||||
fun editSource(sourceUrl: String)
|
fun editSource(sourceUrl: String)
|
||||||
fun toTop(source: BookSource)
|
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.data.entities.BookSource
|
||||||
import io.legado.app.databinding.FragmentExploreBinding
|
import io.legado.app.databinding.FragmentExploreBinding
|
||||||
import io.legado.app.help.config.AppConfig
|
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.primaryColor
|
||||||
import io.legado.app.lib.theme.primaryTextColor
|
import io.legado.app.lib.theme.primaryTextColor
|
||||||
import io.legado.app.ui.book.explore.ExploreShowActivity
|
import io.legado.app.ui.book.explore.ExploreShowActivity
|
||||||
@@ -183,6 +184,16 @@ class ExploreFragment : VMBaseFragment<ExploreViewModel>(R.layout.fragment_explo
|
|||||||
viewModel.topSource(source)
|
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() {
|
fun compressExplore() {
|
||||||
if (!adapter.compressExplore()) {
|
if (!adapter.compressExplore()) {
|
||||||
if (AppConfig.isEInkMode) {
|
if (AppConfig.isEInkMode) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import android.app.Application
|
|||||||
import io.legado.app.base.BaseViewModel
|
import io.legado.app.base.BaseViewModel
|
||||||
import io.legado.app.data.appDb
|
import io.legado.app.data.appDb
|
||||||
import io.legado.app.data.entities.BookSource
|
import io.legado.app.data.entities.BookSource
|
||||||
|
import io.legado.app.help.config.SourceConfig
|
||||||
|
|
||||||
class ExploreViewModel(application: Application) : BaseViewModel(application) {
|
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
|
package io.legado.app.utils
|
||||||
|
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
|
import cn.hutool.crypto.symmetric.SymmetricCrypto
|
||||||
import java.security.spec.AlgorithmParameterSpec
|
import java.security.spec.AlgorithmParameterSpec
|
||||||
import javax.crypto.spec.IvParameterSpec
|
import javax.crypto.spec.IvParameterSpec
|
||||||
import javax.crypto.spec.SecretKeySpec
|
import javax.crypto.spec.SecretKeySpec
|
||||||
import cn.hutool.crypto.symmetric.SymmetricCrypto
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* transformations https://developer.android.google.cn/reference/kotlin/javax/crypto/Cipher?hl=en
|
* transformations https://developer.android.google.cn/reference/kotlin/javax/crypto/Cipher?hl=en
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
package io.legado.app.utils
|
package io.legado.app.utils
|
||||||
|
|
||||||
import io.legado.app.constant.AppPattern.dataUriRegex
|
|
||||||
import android.icu.text.Collator
|
import android.icu.text.Collator
|
||||||
import android.icu.util.ULocale
|
import android.icu.util.ULocale
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.text.Editable
|
import android.text.Editable
|
||||||
|
import io.legado.app.constant.AppPattern.dataUriRegex
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|||||||
@@ -13,64 +13,64 @@
|
|||||||
app:fitStatusBar="false"
|
app:fitStatusBar="false"
|
||||||
app:title="@string/edit_book_source" />
|
app:title="@string/edit_book_source" />
|
||||||
|
|
||||||
<LinearLayout
|
<HorizontalScrollView
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:layout_gravity="center_vertical">
|
|
||||||
|
|
||||||
<io.legado.app.lib.theme.view.ThemeCheckBox
|
|
||||||
android:id="@+id/cb_is_enable"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:checked="true"
|
|
||||||
android:text="@string/is_enable" />
|
|
||||||
|
|
||||||
<io.legado.app.lib.theme.view.ThemeCheckBox
|
|
||||||
android:id="@+id/cb_is_enable_explore"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:checked="true"
|
|
||||||
android:text="@string/discovery" />
|
|
||||||
|
|
||||||
<io.legado.app.lib.theme.view.ThemeCheckBox
|
|
||||||
android:id="@+id/cb_is_enable_cookie"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:checked="true"
|
|
||||||
android:text="@string/auto_save_cookie" />
|
|
||||||
|
|
||||||
<io.legado.app.lib.theme.view.ThemeCheckBox
|
|
||||||
android:id="@+id/cb_is_enable_review"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:checked="true"
|
|
||||||
android:text="@string/review" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:scrollbars="none">
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:height="30dp"
|
|
||||||
android:gravity="center"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/book_type"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginLeft="8dp"
|
android:paddingHorizontal="8dp"
|
||||||
android:layout_marginRight="3dp"
|
android:gravity="center_vertical"
|
||||||
tools:ignore="RtlHardcoded" />
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatSpinner
|
<TextView
|
||||||
android:id="@+id/sp_type"
|
android:layout_width="wrap_content"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:gravity="center"
|
||||||
android:entries="@array/book_type"
|
android:text="@string/book_type"
|
||||||
app:theme="@style/Spinner" />
|
tools:ignore="RtlHardcoded" />
|
||||||
|
|
||||||
</LinearLayout>
|
<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"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="true"
|
||||||
|
android:text="@string/is_enable" />
|
||||||
|
|
||||||
|
<io.legado.app.lib.theme.view.ThemeCheckBox
|
||||||
|
android:id="@+id/cb_is_enable_explore"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="true"
|
||||||
|
android:text="@string/discovery" />
|
||||||
|
|
||||||
|
<io.legado.app.lib.theme.view.ThemeCheckBox
|
||||||
|
android:id="@+id/cb_is_enable_cookie"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="true"
|
||||||
|
android:text="@string/auto_save_cookie" />
|
||||||
|
|
||||||
|
<io.legado.app.lib.theme.view.ThemeCheckBox
|
||||||
|
android:id="@+id/cb_is_enable_review"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="true"
|
||||||
|
android:text="@string/review" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</HorizontalScrollView>
|
||||||
|
|
||||||
<com.google.android.material.tabs.TabLayout
|
<com.google.android.material.tabs.TabLayout
|
||||||
android:id="@+id/tab_layout"
|
android:id="@+id/tab_layout"
|
||||||
@@ -119,6 +119,7 @@
|
|||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
android:id="@+id/recycler_view"
|
android:id="@+id/recycler_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent"
|
||||||
|
tools:listitem="@layout/item_source_edit" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -35,7 +35,8 @@
|
|||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1">
|
android:layout_weight="1"
|
||||||
|
android:overScrollMode="ifContentScrolls">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -26,7 +26,8 @@
|
|||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:overScrollMode="ifContentScrolls">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content"
|
||||||
|
android:overScrollMode="ifContentScrolls">
|
||||||
|
|
||||||
<com.google.android.flexbox.FlexboxLayout
|
<com.google.android.flexbox.FlexboxLayout
|
||||||
android:id="@+id/flexbox"
|
android:id="@+id/flexbox"
|
||||||
|
|||||||
@@ -46,7 +46,8 @@
|
|||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content"
|
||||||
|
android:overScrollMode="ifContentScrolls">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
android:padding="5dp"
|
android:padding="5dp"
|
||||||
android:src="@drawable/ic_praise"
|
android:src="@drawable/ic_praise"
|
||||||
|
android:contentDescription="@string/like_source"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/iv_bad"
|
app:layout_constraintBottom_toTopOf="@+id/iv_bad"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
@@ -27,6 +28,7 @@
|
|||||||
android:padding="5dp"
|
android:padding="5dp"
|
||||||
android:rotationX="180"
|
android:rotationX="180"
|
||||||
android:src="@drawable/ic_praise"
|
android:src="@drawable/ic_praise"
|
||||||
|
android:contentDescription="@string/not_like_source"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/iv_good"
|
app:layout_constraintTop_toBottomOf="@+id/iv_good"
|
||||||
|
|||||||
@@ -1016,8 +1016,8 @@
|
|||||||
<string name="rule_review_content">段评内容(contentRule)</string>
|
<string name="rule_review_content">段评内容(contentRule)</string>
|
||||||
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
||||||
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
||||||
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
|
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
|
||||||
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
|
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
|
||||||
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
||||||
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
||||||
<string name="delete_review_url">删除段评URL(deleteUrl)</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="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="read_bar_style_follow_page">read bar style follow page</string>
|
||||||
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
||||||
|
<string name="like_source">赞</string>
|
||||||
|
<string name="not_like_source">踩</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1019,8 +1019,8 @@
|
|||||||
<string name="rule_review_content">段评内容(contentRule)</string>
|
<string name="rule_review_content">段评内容(contentRule)</string>
|
||||||
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
||||||
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
||||||
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
|
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
|
||||||
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
|
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
|
||||||
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
||||||
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
||||||
<string name="delete_review_url">删除段评URL(deleteUrl)</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="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="read_bar_style_follow_page">read bar style follow page</string>
|
||||||
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
||||||
|
<string name="like_source">赞</string>
|
||||||
|
<string name="not_like_source">踩</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1019,8 +1019,8 @@
|
|||||||
<string name="rule_review_content">段评内容(contentRule)</string>
|
<string name="rule_review_content">段评内容(contentRule)</string>
|
||||||
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
||||||
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
||||||
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
|
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
|
||||||
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
|
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
|
||||||
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
||||||
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
||||||
<string name="delete_review_url">删除段评URL(deleteUrl)</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="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="read_bar_style_follow_page">read bar style follow page</string>
|
||||||
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
||||||
|
<string name="like_source">赞</string>
|
||||||
|
<string name="not_like_source">踩</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1016,8 +1016,8 @@
|
|||||||
<string name="rule_review_content">段评内容(contentRule)</string>
|
<string name="rule_review_content">段评内容(contentRule)</string>
|
||||||
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
||||||
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
||||||
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
|
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
|
||||||
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
|
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
|
||||||
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
||||||
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
||||||
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
|
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
|
||||||
@@ -1026,4 +1026,6 @@
|
|||||||
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
|
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
|
||||||
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
|
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
|
||||||
<string name="rule_image_decode">图片解密(imageDecode)</string>
|
<string name="rule_image_decode">图片解密(imageDecode)</string>
|
||||||
|
<string name="like_source">赞</string>
|
||||||
|
<string name="not_like_source">踩</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1018,8 +1018,8 @@
|
|||||||
<string name="rule_review_content">段评内容(contentRule)</string>
|
<string name="rule_review_content">段评内容(contentRule)</string>
|
||||||
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
||||||
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
||||||
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
|
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
|
||||||
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
|
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
|
||||||
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
||||||
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
||||||
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
|
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
|
||||||
@@ -1028,4 +1028,6 @@
|
|||||||
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
|
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
|
||||||
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
|
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
|
||||||
<string name="rule_image_decode">图片解密(imageDecode)</string>
|
<string name="rule_image_decode">图片解密(imageDecode)</string>
|
||||||
|
<string name="like_source">赞</string>
|
||||||
|
<string name="not_like_source">踩</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1018,8 +1018,8 @@
|
|||||||
<string name="rule_review_content">段评内容(contentRule)</string>
|
<string name="rule_review_content">段评内容(contentRule)</string>
|
||||||
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
||||||
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
||||||
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
|
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
|
||||||
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
|
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
|
||||||
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
||||||
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
||||||
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
|
<string name="delete_review_url">删除段评URL(deleteUrl)</string>
|
||||||
@@ -1028,4 +1028,6 @@
|
|||||||
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
|
<string name="show_read_title_addition">展示顶部工具栏附加区域</string>
|
||||||
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
|
<string name="read_bar_style_follow_page">工具栏样式跟随页面</string>
|
||||||
<string name="rule_image_decode">图片解密(imageDecode)</string>
|
<string name="rule_image_decode">图片解密(imageDecode)</string>
|
||||||
|
<string name="like_source">赞</string>
|
||||||
|
<string name="not_like_source">踩</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1019,8 +1019,8 @@
|
|||||||
<string name="rule_review_content">段评内容(contentRule)</string>
|
<string name="rule_review_content">段评内容(contentRule)</string>
|
||||||
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
<string name="rule_post_time">段评发布时间(postTimeRule)</string>
|
||||||
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
<string name="rule_review_quote">段评回复URL(reviewQuoteUrl)</string>
|
||||||
<string name="review_vote_down">点踩URL(voteUpUrl)</string>
|
<string name="review_vote_down">点踩URL(voteDownUrl)</string>
|
||||||
<string name="review_vote_up">点赞URL(voteDownUrl)</string>
|
<string name="review_vote_up">点赞URL(voteUpUrl)</string>
|
||||||
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
<string name="post_review_url">发送回复URL(postReviewUrl)</string>
|
||||||
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
<string name="post_quote_url">发送回复段评URL(postQuoteUrl)</string>
|
||||||
<string name="delete_review_url">删除段评URL(deleteUrl)</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="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="read_bar_style_follow_page">read bar style follow page</string>
|
||||||
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
<string name="rule_image_decode">Decode Image(imageDecode)</string>
|
||||||
|
<string name="like_source">赞</string>
|
||||||
|
<string name="not_like_source">踩</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ buildscript {
|
|||||||
kotlin_version = '1.7.10'
|
kotlin_version = '1.7.10'
|
||||||
compose_version = '1.2.1'
|
compose_version = '1.2.1'
|
||||||
compose_compiler_version = '1.3.0'
|
compose_compiler_version = '1.3.0'
|
||||||
agp_version= '7.2.2'
|
agp_version = '7.3.0'
|
||||||
exoplayer_version = '2.18.1'
|
exoplayer_version = '2.18.1'
|
||||||
splitties_version = '3.0.0'
|
splitties_version = '3.0.0'
|
||||||
room_version = '2.4.3'
|
room_version = '2.4.3'
|
||||||
|
|||||||
Reference in New Issue
Block a user