Merge remote-tracking branch 'upstream/master'
This commit is contained in:
+2
-2
@@ -164,7 +164,7 @@ dependencies {
|
|||||||
implementation('androidx.constraintlayout:constraintlayout:2.1.4')
|
implementation('androidx.constraintlayout:constraintlayout:2.1.4')
|
||||||
implementation('androidx.swiperefreshlayout:swiperefreshlayout:1.1.0')
|
implementation('androidx.swiperefreshlayout:swiperefreshlayout:1.1.0')
|
||||||
implementation('androidx.viewpager2:viewpager2:1.0.0')
|
implementation('androidx.viewpager2:viewpager2:1.0.0')
|
||||||
implementation('androidx.webkit:webkit:1.4.0')
|
implementation('androidx.webkit:webkit:1.5.0')
|
||||||
|
|
||||||
//google
|
//google
|
||||||
implementation('com.google.android.material:material:1.6.1')
|
implementation('com.google.android.material:material:1.6.1')
|
||||||
@@ -207,7 +207,7 @@ dependencies {
|
|||||||
implementation('io.github.jeremyliao:live-event-bus-x:1.8.0')
|
implementation('io.github.jeremyliao:live-event-bus-x:1.8.0')
|
||||||
|
|
||||||
//规则相关
|
//规则相关
|
||||||
implementation('org.jsoup:jsoup:1.15.2')
|
implementation('org.jsoup:jsoup:1.15.3')
|
||||||
implementation('com.jayway.jsonpath:json-path:2.7.0')
|
implementation('com.jayway.jsonpath:json-path:2.7.0')
|
||||||
implementation('cn.wanghaomiao:JsoupXpath:2.5.1')
|
implementation('cn.wanghaomiao:JsoupXpath:2.5.1')
|
||||||
implementation(project(path: ':epublib'))
|
implementation(project(path: ':epublib'))
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"uploadUrl": "http://sy.mgz6.cc/shuyuan,{\"method\":\"POST\",\"body\": {\"file\": \"fileRequest\"},\"type\": \"multipart/form-data\"}",
|
"uploadUrl": "http://sy.mgz6.cc/shuyuan,{\"method\":\"POST\",\"body\": {\"file\": \"fileRequest\"},\"type\": \"multipart/form-data\"}",
|
||||||
"downloadUrlRule": "$.data@js:if (result == '') \n '' \n else \n 'http://shuyuan.mgz6.cc/shuyuan/' + result",
|
"downloadUrlRule": "$.data@js:if (result == '') \n '' \n else \n 'https://shuyuan.mgz6.cc/shuyuan/' + result",
|
||||||
"summary": "有效期2天"
|
"summary": "有效期2天"
|
||||||
}
|
}
|
||||||
@@ -11,6 +11,11 @@
|
|||||||
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
|
* 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。
|
||||||
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
|
* 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源!
|
||||||
|
|
||||||
|
**2022/08/23**
|
||||||
|
|
||||||
|
* 验证码输入框显示来自哪个书源
|
||||||
|
* 修复一键导入丢失url参数的问题
|
||||||
|
|
||||||
**2022/08/19**
|
**2022/08/19**
|
||||||
|
|
||||||
* 更新cronet: 104.0.5112.97
|
* 更新cronet: 104.0.5112.97
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ object SourceVerificationHelp {
|
|||||||
appCtx.startActivity<VerificationCodeActivity> {
|
appCtx.startActivity<VerificationCodeActivity> {
|
||||||
putExtra("imageUrl", url)
|
putExtra("imageUrl", url)
|
||||||
putExtra("sourceOrigin", source.getKey())
|
putExtra("sourceOrigin", source.getKey())
|
||||||
|
putExtra("sourceName", source.getTag())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
startBrowser(source, url, title, true)
|
startBrowser(source, url, title, true)
|
||||||
@@ -58,6 +59,7 @@ object SourceVerificationHelp {
|
|||||||
putExtra("title", title)
|
putExtra("title", title)
|
||||||
putExtra("url", url)
|
putExtra("url", url)
|
||||||
putExtra("sourceOrigin", source.getKey())
|
putExtra("sourceOrigin", source.getKey())
|
||||||
|
putExtra("sourceName", source.getTag())
|
||||||
putExtra("sourceVerificationEnable", saveResult)
|
putExtra("sourceVerificationEnable", saveResult)
|
||||||
IntentData.put(url, source.getHeaderMap(true))
|
IntentData.put(url, source.getHeaderMap(true))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class OnLineImportActivity :
|
|||||||
finallyDialog(getString(R.string.error), it)
|
finallyDialog(getString(R.string.error), it)
|
||||||
}
|
}
|
||||||
intent.data?.let {
|
intent.data?.let {
|
||||||
val url = it.getQueryParameter("src")
|
val url = it.query?.substringAfter("src=")
|
||||||
if (url.isNullOrBlank()) {
|
if (url.isNullOrBlank()) {
|
||||||
finish()
|
finish()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ package io.legado.app.ui.association
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.MenuItem
|
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import com.bumptech.glide.request.RequestOptions
|
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.BaseDialogFragment
|
import io.legado.app.base.BaseDialogFragment
|
||||||
import io.legado.app.databinding.DialogVerificationCodeViewBinding
|
import io.legado.app.databinding.DialogVerificationCodeViewBinding
|
||||||
@@ -17,7 +17,9 @@ import io.legado.app.help.glide.ImageLoader
|
|||||||
import io.legado.app.help.glide.OkHttpModelLoader
|
import io.legado.app.help.glide.OkHttpModelLoader
|
||||||
import io.legado.app.lib.theme.primaryColor
|
import io.legado.app.lib.theme.primaryColor
|
||||||
import io.legado.app.ui.widget.dialog.PhotoDialog
|
import io.legado.app.ui.widget.dialog.PhotoDialog
|
||||||
import io.legado.app.utils.*
|
import io.legado.app.utils.applyTint
|
||||||
|
import io.legado.app.utils.setLayout
|
||||||
|
import io.legado.app.utils.showDialogFragment
|
||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,12 +28,18 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding
|
|||||||
* val key = "${sourceOrigin ?: ""}_verificationResult"
|
* val key = "${sourceOrigin ?: ""}_verificationResult"
|
||||||
* CacheManager.get(key)
|
* CacheManager.get(key)
|
||||||
*/
|
*/
|
||||||
class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification_code_view), Toolbar.OnMenuItemClickListener {
|
class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification_code_view),
|
||||||
|
Toolbar.OnMenuItemClickListener {
|
||||||
|
|
||||||
constructor(imageUrl: String, sourceOrigin: String? = null) : this() {
|
constructor(
|
||||||
|
imageUrl: String,
|
||||||
|
sourceOrigin: String? = null,
|
||||||
|
sourceName: String? = null
|
||||||
|
) : this() {
|
||||||
arguments = Bundle().apply {
|
arguments = Bundle().apply {
|
||||||
putString("sourceOrigin", sourceOrigin)
|
|
||||||
putString("imageUrl", imageUrl)
|
putString("imageUrl", imageUrl)
|
||||||
|
putString("sourceOrigin", sourceOrigin)
|
||||||
|
putString("sourceName", sourceName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,23 +55,23 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
|
|||||||
initMenu()
|
initMenu()
|
||||||
binding.run {
|
binding.run {
|
||||||
toolBar.setBackgroundColor(primaryColor)
|
toolBar.setBackgroundColor(primaryColor)
|
||||||
val sourceOrigin = arguments?.getString("sourceOrigin")
|
arguments?.let { arguments ->
|
||||||
arguments?.getString("imageUrl")?.let { imageUrl ->
|
toolBar.subtitle = arguments.getString("sourceName")
|
||||||
ImageLoader.load(requireContext(), imageUrl).apply {
|
val sourceOrigin = arguments.getString("sourceOrigin")
|
||||||
sourceOrigin?.let {
|
arguments.getString("imageUrl")?.let { imageUrl ->
|
||||||
apply(
|
ImageLoader.load(requireContext(), imageUrl).apply {
|
||||||
RequestOptions().set(
|
sourceOrigin?.let {
|
||||||
OkHttpModelLoader.sourceOriginOption,
|
apply(
|
||||||
it
|
RequestOptions().set(OkHttpModelLoader.sourceOriginOption, it)
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
|
}.error(R.drawable.image_loading_error)
|
||||||
|
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||||
|
.skipMemoryCache(true)
|
||||||
|
.into(verificationCodeImageView)
|
||||||
|
verificationCodeImageView.setOnClickListener {
|
||||||
|
showDialogFragment(PhotoDialog(imageUrl, sourceOrigin))
|
||||||
}
|
}
|
||||||
}.error(R.drawable.image_loading_error)
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
|
||||||
.skipMemoryCache(true)
|
|
||||||
.into(verificationCodeImageView)
|
|
||||||
verificationCodeImageView.setOnClickListener {
|
|
||||||
showDialogFragment(PhotoDialog(imageUrl, sourceOrigin))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,7 +94,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification
|
|||||||
CacheManager.putMemory(key, it)
|
CacheManager.putMemory(key, it)
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,10 +43,18 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
var cnaShowMenu: Boolean = false
|
var cnaShowMenu: Boolean = false
|
||||||
private val callBack: CallBack get() = activity as CallBack
|
private val callBack: CallBack get() = activity as CallBack
|
||||||
private val binding = ViewReadMenuBinding.inflate(LayoutInflater.from(context), this, true)
|
private val binding = ViewReadMenuBinding.inflate(LayoutInflater.from(context), this, true)
|
||||||
private lateinit var menuTopIn: Animation
|
private val menuTopIn: Animation by lazy {
|
||||||
private lateinit var menuTopOut: Animation
|
loadAnimation(context, R.anim.anim_readbook_top_in)
|
||||||
private lateinit var menuBottomIn: Animation
|
}
|
||||||
private lateinit var menuBottomOut: Animation
|
private val menuTopOut: Animation by lazy {
|
||||||
|
loadAnimation(context, R.anim.anim_readbook_top_out)
|
||||||
|
}
|
||||||
|
private val menuBottomIn: Animation by lazy {
|
||||||
|
loadAnimation(context, R.anim.anim_readbook_bottom_in)
|
||||||
|
}
|
||||||
|
private val menuBottomOut: Animation by lazy {
|
||||||
|
loadAnimation(context, R.anim.anim_readbook_bottom_out)
|
||||||
|
}
|
||||||
private val bgColor: Int = context.bottomBackground
|
private val bgColor: Int = context.bottomBackground
|
||||||
private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
|
private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
|
||||||
private val bottomBackgroundList: ColorStateList = Selector.colorBuild()
|
private val bottomBackgroundList: ColorStateList = Selector.colorBuild()
|
||||||
@@ -71,6 +79,58 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private val menuInListener = object : Animation.AnimationListener {
|
||||||
|
override fun onAnimationStart(animation: Animation) {
|
||||||
|
binding.tvSourceAction.isGone = ReadBook.isLocalBook
|
||||||
|
binding.tvLogin.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
|
||||||
|
binding.tvPay.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
|
||||||
|
|| ReadBook.curTextChapter?.isVip != true
|
||||||
|
|| ReadBook.curTextChapter?.isPay == true
|
||||||
|
callBack.upSystemUiVisibility()
|
||||||
|
binding.llBrightness.visible(showBrightnessView)
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RtlHardcoded")
|
||||||
|
override fun onAnimationEnd(animation: Animation) {
|
||||||
|
val navigationBarHeight =
|
||||||
|
if (ReadBookConfig.hideNavigationBar) {
|
||||||
|
activity?.navigationBarHeight ?: 0
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
binding.run {
|
||||||
|
vwMenuBg.setOnClickListener { runMenuOut() }
|
||||||
|
root.padding = 0
|
||||||
|
when (activity?.navigationBarGravity) {
|
||||||
|
Gravity.BOTTOM -> root.bottomPadding = navigationBarHeight
|
||||||
|
Gravity.LEFT -> root.leftPadding = navigationBarHeight
|
||||||
|
Gravity.RIGHT -> root.rightPadding = navigationBarHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
callBack.upSystemUiVisibility()
|
||||||
|
if (!LocalConfig.readMenuHelpVersionIsLast) {
|
||||||
|
callBack.showReadMenuHelp()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAnimationRepeat(animation: Animation) = Unit
|
||||||
|
}
|
||||||
|
private val menuOutListener = object : Animation.AnimationListener {
|
||||||
|
override fun onAnimationStart(animation: Animation) {
|
||||||
|
binding.vwMenuBg.setOnClickListener(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAnimationEnd(animation: Animation) {
|
||||||
|
this@ReadMenu.invisible()
|
||||||
|
binding.titleBar.invisible()
|
||||||
|
binding.bottomMenu.invisible()
|
||||||
|
cnaShowMenu = false
|
||||||
|
onMenuOutEnd?.invoke()
|
||||||
|
callBack.upSystemUiVisibility()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAnimationRepeat(animation: Animation) = Unit
|
||||||
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
initView()
|
initView()
|
||||||
@@ -141,19 +201,29 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
activity?.window?.attributes = params
|
activity?.window?.attributes = params
|
||||||
}
|
}
|
||||||
|
|
||||||
fun runMenuIn() {
|
fun runMenuIn(anim: Boolean = AppConfig.isEInkMode) {
|
||||||
this.visible()
|
this.visible()
|
||||||
binding.titleBar.visible()
|
binding.titleBar.visible()
|
||||||
binding.bottomMenu.visible()
|
binding.bottomMenu.visible()
|
||||||
binding.titleBar.startAnimation(menuTopIn)
|
if (anim) {
|
||||||
binding.bottomMenu.startAnimation(menuBottomIn)
|
binding.titleBar.startAnimation(menuTopIn)
|
||||||
|
binding.bottomMenu.startAnimation(menuBottomIn)
|
||||||
|
} else {
|
||||||
|
menuInListener.onAnimationStart(menuBottomIn)
|
||||||
|
menuInListener.onAnimationEnd(menuBottomIn)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun runMenuOut(onMenuOutEnd: (() -> Unit)? = null) {
|
fun runMenuOut(anim: Boolean = AppConfig.isEInkMode, onMenuOutEnd: (() -> Unit)? = null) {
|
||||||
this.onMenuOutEnd = onMenuOutEnd
|
this.onMenuOutEnd = onMenuOutEnd
|
||||||
if (this.isVisible) {
|
if (this.isVisible) {
|
||||||
binding.titleBar.startAnimation(menuTopOut)
|
if (anim) {
|
||||||
binding.bottomMenu.startAnimation(menuBottomOut)
|
binding.titleBar.startAnimation(menuTopOut)
|
||||||
|
binding.bottomMenu.startAnimation(menuBottomOut)
|
||||||
|
} else {
|
||||||
|
menuOutListener.onAnimationStart(menuBottomOut)
|
||||||
|
menuOutListener.onAnimationEnd(menuBottomOut)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +358,9 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
llReadAloud.onLongClick {
|
llReadAloud.onLongClick {
|
||||||
runMenuOut { callBack.showReadAloudDialog() }
|
runMenuOut {
|
||||||
|
callBack.showReadAloudDialog()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//界面
|
//界面
|
||||||
llFont.setOnClickListener {
|
llFont.setOnClickListener {
|
||||||
@@ -306,66 +378,8 @@ class ReadMenu @JvmOverloads constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initAnimation() {
|
private fun initAnimation() {
|
||||||
//显示菜单
|
menuTopIn.setAnimationListener(menuInListener)
|
||||||
menuTopIn = AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_top_in)
|
menuTopOut.setAnimationListener(menuOutListener)
|
||||||
menuBottomIn = AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_in)
|
|
||||||
menuTopIn.setAnimationListener(object : Animation.AnimationListener {
|
|
||||||
override fun onAnimationStart(animation: Animation) {
|
|
||||||
binding.tvSourceAction.isGone = ReadBook.isLocalBook
|
|
||||||
binding.tvLogin.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
|
|
||||||
binding.tvPay.isGone = ReadBook.bookSource?.loginUrl.isNullOrEmpty()
|
|
||||||
|| ReadBook.curTextChapter?.isVip != true
|
|
||||||
|| ReadBook.curTextChapter?.isPay == true
|
|
||||||
callBack.upSystemUiVisibility()
|
|
||||||
binding.llBrightness.visible(showBrightnessView)
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("RtlHardcoded")
|
|
||||||
override fun onAnimationEnd(animation: Animation) {
|
|
||||||
val navigationBarHeight =
|
|
||||||
if (ReadBookConfig.hideNavigationBar) {
|
|
||||||
activity?.navigationBarHeight ?: 0
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
}
|
|
||||||
binding.run {
|
|
||||||
vwMenuBg.setOnClickListener { runMenuOut() }
|
|
||||||
root.padding = 0
|
|
||||||
when (activity?.navigationBarGravity) {
|
|
||||||
Gravity.BOTTOM -> root.bottomPadding = navigationBarHeight
|
|
||||||
Gravity.LEFT -> root.leftPadding = navigationBarHeight
|
|
||||||
Gravity.RIGHT -> root.rightPadding = navigationBarHeight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
callBack.upSystemUiVisibility()
|
|
||||||
if (!LocalConfig.readMenuHelpVersionIsLast) {
|
|
||||||
callBack.showReadMenuHelp()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onAnimationRepeat(animation: Animation) = Unit
|
|
||||||
})
|
|
||||||
|
|
||||||
//隐藏菜单
|
|
||||||
menuTopOut = AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_top_out)
|
|
||||||
menuBottomOut =
|
|
||||||
AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_out)
|
|
||||||
menuTopOut.setAnimationListener(object : Animation.AnimationListener {
|
|
||||||
override fun onAnimationStart(animation: Animation) {
|
|
||||||
binding.vwMenuBg.setOnClickListener(null)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onAnimationEnd(animation: Animation) {
|
|
||||||
this@ReadMenu.invisible()
|
|
||||||
binding.titleBar.invisible()
|
|
||||||
binding.bottomMenu.invisible()
|
|
||||||
cnaShowMenu = false
|
|
||||||
onMenuOutEnd?.invoke()
|
|
||||||
callBack.upSystemUiVisibility()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onAnimationRepeat(animation: Animation) = Unit
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun upBookView() {
|
fun upBookView() {
|
||||||
|
|||||||
@@ -33,10 +33,8 @@ class SearchMenu @JvmOverloads constructor(
|
|||||||
private val callBack: CallBack get() = activity as CallBack
|
private val callBack: CallBack get() = activity as CallBack
|
||||||
private val binding = ViewSearchMenuBinding.inflate(LayoutInflater.from(context), this, true)
|
private val binding = ViewSearchMenuBinding.inflate(LayoutInflater.from(context), this, true)
|
||||||
|
|
||||||
private val menuBottomIn: Animation =
|
private val menuBottomIn: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_in)
|
||||||
AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_in)
|
private val menuBottomOut: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_out)
|
||||||
private val menuBottomOut: Animation =
|
|
||||||
AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_out)
|
|
||||||
private val bgColor: Int = context.bottomBackground
|
private val bgColor: Int = context.bottomBackground
|
||||||
private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
|
private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor))
|
||||||
private val bottomBackgroundList: ColorStateList =
|
private val bottomBackgroundList: ColorStateList =
|
||||||
|
|||||||
@@ -341,7 +341,7 @@ class SearchActivity : VMBaseActivity<ActivityBookSearchBinding, SearchViewModel
|
|||||||
historyFlowJob?.cancel()
|
historyFlowJob?.cancel()
|
||||||
historyFlowJob = launch {
|
historyFlowJob = launch {
|
||||||
when {
|
when {
|
||||||
key.isNullOrBlank() -> appDb.searchKeywordDao.flowByUsage()
|
key.isNullOrBlank() -> appDb.searchKeywordDao.flowByTime()
|
||||||
else -> appDb.searchKeywordDao.flowSearch(key)
|
else -> appDb.searchKeywordDao.flowSearch(key)
|
||||||
}.conflate().collect {
|
}.conflate().collect {
|
||||||
historyKeyAdapter.setItems(it)
|
historyKeyAdapter.setItems(it)
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
|
|||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
binding.titleBar.title = intent.getStringExtra("title") ?: getString(R.string.loading)
|
binding.titleBar.title = intent.getStringExtra("title") ?: getString(R.string.loading)
|
||||||
|
binding.titleBar.subtitle = intent.getStringExtra("sourceName")
|
||||||
viewModel.initData(intent) {
|
viewModel.initData(intent) {
|
||||||
val url = viewModel.baseUrl
|
val url = viewModel.baseUrl
|
||||||
val headerMap = viewModel.headerMap
|
val headerMap = viewModel.headerMap
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package io.legado.app.utils
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.view.animation.Animation
|
||||||
|
import android.view.animation.AnimationUtils
|
||||||
|
import androidx.annotation.AnimRes
|
||||||
|
import io.legado.app.help.config.AppConfig
|
||||||
|
|
||||||
|
fun loadAnimation(context: Context, @AnimRes id: Int): Animation {
|
||||||
|
val animation = AnimationUtils.loadAnimation(context, id)
|
||||||
|
if (AppConfig.isEInkMode) {
|
||||||
|
animation.duration = 0
|
||||||
|
}
|
||||||
|
return animation
|
||||||
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
package io.legado.app.utils
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.view.animation.Animation
|
|
||||||
import android.view.animation.AnimationUtils
|
|
||||||
import androidx.annotation.AnimRes
|
|
||||||
import io.legado.app.help.config.AppConfig
|
|
||||||
|
|
||||||
object AnimationUtilsSupport {
|
|
||||||
fun loadAnimation(context: Context, @AnimRes id: Int): Animation {
|
|
||||||
val animation = AnimationUtils.loadAnimation(context, id)
|
|
||||||
if (AppConfig.isEInkMode) {
|
|
||||||
animation.duration = 0
|
|
||||||
}
|
|
||||||
return animation
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -10,26 +10,26 @@
|
|||||||
android:id="@+id/tool_bar"
|
android:id="@+id/tool_bar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/background_menu"
|
||||||
android:elevation="5dp"
|
android:elevation="5dp"
|
||||||
android:theme="?attr/actionBarStyle"
|
android:theme="?attr/actionBarStyle"
|
||||||
android:background="@color/background_menu"
|
|
||||||
app:title="@string/input_verification_code"
|
|
||||||
app:popupTheme="@style/AppTheme.PopupOverlay"
|
app:popupTheme="@style/AppTheme.PopupOverlay"
|
||||||
|
app:title="@string/input_verification_code"
|
||||||
app:titleTextAppearance="@style/ToolbarTitle" />
|
app:titleTextAppearance="@style/ToolbarTitle" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/verification_code_image_view"
|
android:id="@+id/verification_code_image_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:scaleType="centerCrop"
|
|
||||||
android:background="?android:attr/selectableItemBackgroundBorderless"
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:scaleType="centerCrop"
|
||||||
tools:ignore="UnusedAttribute" />
|
tools:ignore="UnusedAttribute" />
|
||||||
|
|
||||||
<io.legado.app.ui.widget.text.TextInputLayout
|
<io.legado.app.ui.widget.text.TextInputLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="3dp"
|
android:layout_marginTop="8dp"
|
||||||
android:layout_marginTop="8dp">
|
android:padding="3dp">
|
||||||
|
|
||||||
<io.legado.app.lib.theme.view.ThemeEditText
|
<io.legado.app.lib.theme.view.ThemeEditText
|
||||||
android:id="@+id/verification_code"
|
android:id="@+id/verification_code"
|
||||||
|
|||||||
Reference in New Issue
Block a user