From e7fd8a536afbdc4bec1b6e31e0fd7a4422c617cd Mon Sep 17 00:00:00 2001 From: kunfei Date: Mon, 22 Aug 2022 19:00:07 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=A0=81=E5=BC=B9?= =?UTF-8?q?=E5=87=BA=E6=A1=86=E6=98=BE=E7=A4=BA=E6=BA=90=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/help/SourceVerificationHelp.kt | 1 + .../ui/association/VerificationCodeDialog.kt | 52 +++++++++++-------- .../layout/dialog_verification_code_view.xml | 17 ++++-- 3 files changed, 43 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt b/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt index 1ed311e2f..7251225e3 100644 --- a/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt +++ b/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt @@ -27,6 +27,7 @@ object SourceVerificationHelp { appCtx.startActivity { putExtra("imageUrl", url) putExtra("sourceOrigin", source.getKey()) + putExtra("sourceName", source.getTag()) } } else { startBrowser(source, url, title, true) diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt index a3b7dd656..dcf38db7b 100644 --- a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt @@ -2,12 +2,12 @@ package io.legado.app.ui.association import android.annotation.SuppressLint import android.os.Bundle +import android.view.MenuItem import android.view.View import android.view.ViewGroup -import android.view.MenuItem import androidx.appcompat.widget.Toolbar -import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.request.RequestOptions import io.legado.app.R import io.legado.app.base.BaseDialogFragment 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.lib.theme.primaryColor 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 /** @@ -26,12 +28,18 @@ import io.legado.app.utils.viewbindingdelegate.viewBinding * val key = "${sourceOrigin ?: ""}_verificationResult" * 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 { - putString("sourceOrigin", sourceOrigin) putString("imageUrl", imageUrl) + putString("sourceOrigin", sourceOrigin) + putString("sourceName", sourceName) } } @@ -47,23 +55,23 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification initMenu() binding.run { toolBar.setBackgroundColor(primaryColor) - val sourceOrigin = arguments?.getString("sourceOrigin") - arguments?.getString("imageUrl")?.let { imageUrl -> - ImageLoader.load(requireContext(), imageUrl).apply { - sourceOrigin?.let { - apply( - RequestOptions().set( - OkHttpModelLoader.sourceOriginOption, - it + arguments?.let { arguments -> + tvTag.text = arguments.getString("sourceName") + val sourceOrigin = arguments.getString("sourceOrigin") + arguments.getString("imageUrl")?.let { imageUrl -> + ImageLoader.load(requireContext(), imageUrl).apply { + sourceOrigin?.let { + apply( + 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) dismiss() } - } + } } return false } diff --git a/app/src/main/res/layout/dialog_verification_code_view.xml b/app/src/main/res/layout/dialog_verification_code_view.xml index f3ca7c528..ef6ee0c02 100644 --- a/app/src/main/res/layout/dialog_verification_code_view.xml +++ b/app/src/main/res/layout/dialog_verification_code_view.xml @@ -10,26 +10,33 @@ android:id="@+id/tool_bar" android:layout_width="match_parent" android:layout_height="wrap_content" + android:background="@color/background_menu" android:elevation="5dp" android:theme="?attr/actionBarStyle" - android:background="@color/background_menu" - app:title="@string/input_verification_code" app:popupTheme="@style/AppTheme.PopupOverlay" + app:title="@string/input_verification_code" app:titleTextAppearance="@style/ToolbarTitle" /> + + + android:layout_marginTop="8dp" + android:padding="3dp"> Date: Mon, 22 Aug 2022 20:25:33 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/help/SourceVerificationHelp.kt | 1 + .../io/legado/app/ui/association/VerificationCodeDialog.kt | 2 +- .../main/java/io/legado/app/ui/browser/WebViewActivity.kt | 1 + app/src/main/res/layout/dialog_verification_code_view.xml | 7 ------- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt b/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt index 7251225e3..93e6c7e6e 100644 --- a/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt +++ b/app/src/main/java/io/legado/app/help/SourceVerificationHelp.kt @@ -59,6 +59,7 @@ object SourceVerificationHelp { putExtra("title", title) putExtra("url", url) putExtra("sourceOrigin", source.getKey()) + putExtra("sourceName", source.getTag()) putExtra("sourceVerificationEnable", saveResult) IntentData.put(url, source.getHeaderMap(true)) } diff --git a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt index dcf38db7b..c6408ccf6 100644 --- a/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/VerificationCodeDialog.kt @@ -56,7 +56,7 @@ class VerificationCodeDialog() : BaseDialogFragment(R.layout.dialog_verification binding.run { toolBar.setBackgroundColor(primaryColor) arguments?.let { arguments -> - tvTag.text = arguments.getString("sourceName") + toolBar.subtitle = arguments.getString("sourceName") val sourceOrigin = arguments.getString("sourceOrigin") arguments.getString("imageUrl")?.let { imageUrl -> ImageLoader.load(requireContext(), imageUrl).apply { diff --git a/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt b/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt index f42771a13..4288b2e16 100644 --- a/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt +++ b/app/src/main/java/io/legado/app/ui/browser/WebViewActivity.kt @@ -45,6 +45,7 @@ class WebViewActivity : VMBaseActivity() { override fun onActivityCreated(savedInstanceState: Bundle?) { binding.titleBar.title = intent.getStringExtra("title") ?: getString(R.string.loading) + binding.titleBar.subtitle = intent.getStringExtra("sourceName") viewModel.initData(intent) { val url = viewModel.baseUrl val headerMap = viewModel.headerMap diff --git a/app/src/main/res/layout/dialog_verification_code_view.xml b/app/src/main/res/layout/dialog_verification_code_view.xml index ef6ee0c02..fe60e9b1c 100644 --- a/app/src/main/res/layout/dialog_verification_code_view.xml +++ b/app/src/main/res/layout/dialog_verification_code_view.xml @@ -17,13 +17,6 @@ app:title="@string/input_verification_code" app:titleTextAppearance="@style/ToolbarTitle" /> - - Date: Mon, 22 Aug 2022 23:01:27 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/legado/app/ui/book/search/SearchActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt index 134b5bf09..716a09922 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchActivity.kt @@ -341,7 +341,7 @@ class SearchActivity : VMBaseActivity appDb.searchKeywordDao.flowByUsage() + key.isNullOrBlank() -> appDb.searchKeywordDao.flowByTime() else -> appDb.searchKeywordDao.flowSearch(key) }.conflate().collect { historyKeyAdapter.setItems(it) From 8c3b43174861111c8fbf62ad55053d3909524f2e Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 23 Aug 2022 22:51:13 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/ui/association/OnLineImportActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt b/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt index fcf2c9aab..ef9e739e5 100644 --- a/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt +++ b/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt @@ -46,7 +46,7 @@ class OnLineImportActivity : finallyDialog(getString(R.string.error), it) } intent.data?.let { - val url = it.getQueryParameter("src") + val url = it.query?.substringAfter("src=") if (url.isNullOrBlank()) { finish() return From c05c2df234fc66ec7c16727b669b1bb0a2575d2b Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 23 Aug 2022 22:53:38 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 12ce83741..afa2559ef 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -11,6 +11,10 @@ * 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。 * 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源! +**2022/08/23** + +* 修复一键导入再有些情况下丢失url参数的问题 + **2022/08/19** * 更新cronet: 104.0.5112.97 From 914a2877ac6fddab1f8e2c864908a4badbc5b240 Mon Sep 17 00:00:00 2001 From: kunfei Date: Tue, 23 Aug 2022 22:59:00 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index afa2559ef..1838e4941 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -13,6 +13,7 @@ **2022/08/23** +* 验证码输入框显示来自哪个书源 * 修复一键导入再有些情况下丢失url参数的问题 **2022/08/19** From 1a75fb9f4d90d9ef3bb4f218118d364eb3d80a48 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 24 Aug 2022 08:33:42 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/defaultData/directLinkUpload.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/assets/defaultData/directLinkUpload.json b/app/src/main/assets/defaultData/directLinkUpload.json index effbbee27..57dd4b0b6 100644 --- a/app/src/main/assets/defaultData/directLinkUpload.json +++ b/app/src/main/assets/defaultData/directLinkUpload.json @@ -1,5 +1,5 @@ { "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天" } \ No newline at end of file From 764dbc6b8bb1b2ed19ac53e0fd898ef9d80fd201 Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 24 Aug 2022 09:19:19 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/updateLog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index 1838e4941..f7d01feac 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -14,7 +14,7 @@ **2022/08/23** * 验证码输入框显示来自哪个书源 -* 修复一键导入再有些情况下丢失url参数的问题 +* 修复一键导入丢失url参数的问题 **2022/08/19** From 3fd3691e9a037bc427ce7a35183747cd2e9a7242 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Aug 2022 04:44:02 +0000 Subject: [PATCH 09/12] Bump jsoup from 1.15.2 to 1.15.3 in /app Bumps [jsoup](https://github.com/jhy/jsoup) from 1.15.2 to 1.15.3. - [Release notes](https://github.com/jhy/jsoup/releases) - [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES) - [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.15.2...jsoup-1.15.3) --- updated-dependencies: - dependency-name: org.jsoup:jsoup dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ec76ecb4d..8778d4394 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -207,7 +207,7 @@ dependencies { 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('cn.wanghaomiao:JsoupXpath:2.5.1') implementation(project(path: ':epublib')) From 55974867ae47522d37420e31ebc159609afc0afd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Aug 2022 04:36:33 +0000 Subject: [PATCH 10/12] Bump webkit from 1.4.0 to 1.5.0 in /app Bumps webkit from 1.4.0 to 1.5.0. --- updated-dependencies: - dependency-name: androidx.webkit:webkit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 8778d4394..9741510c8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -164,7 +164,7 @@ dependencies { implementation('androidx.constraintlayout:constraintlayout:2.1.4') implementation('androidx.swiperefreshlayout:swiperefreshlayout:1.1.0') implementation('androidx.viewpager2:viewpager2:1.0.0') - implementation('androidx.webkit:webkit:1.4.0') + implementation('androidx.webkit:webkit:1.5.0') //google implementation('com.google.android.material:material:1.6.1') From 1af53fc50dcd6109de8433e4c152fcb901f8e33e Mon Sep 17 00:00:00 2001 From: ALin Date: Thu, 25 Aug 2022 01:08:08 -0700 Subject: [PATCH 11/12] disable popup animations when eink mode enabled, fixed #1398 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在dptrp等墨水屏机型上动画会导致按钮无反应的bug(已复现),通过检测是否为墨水屏模式禁用相应按钮的动画可以解决这一问题 --- .../io/legado/app/ui/book/read/ReadMenu.kt | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt index 0d4eec250..1a3067f5c 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt @@ -247,16 +247,22 @@ class ReadMenu @JvmOverloads constructor( //搜索 fabSearch.setOnClickListener { - runMenuOut { + if(AppConfig.isEInkMode) callBack.openSearchActivity(null) - } + else + runMenuOut { + callBack.openSearchActivity(null) + } } //自动翻页 fabAutoPage.setOnClickListener { - runMenuOut { + if(AppConfig.isEInkMode) callBack.autoPage() - } + else + runMenuOut { + callBack.autoPage() + } } //替换 @@ -276,32 +282,47 @@ class ReadMenu @JvmOverloads constructor( //目录 llCatalog.setOnClickListener { - runMenuOut { + if(AppConfig.isEInkMode) callBack.openChapterList() - } + else + runMenuOut { + callBack.openChapterList() + } } //朗读 llReadAloud.setOnClickListener { - runMenuOut { + if(AppConfig.isEInkMode) callBack.onClickReadAloud() - } + else + runMenuOut { + callBack.onClickReadAloud() + } } llReadAloud.onLongClick { - runMenuOut { callBack.showReadAloudDialog() } + if(AppConfig.isEInkMode) + callBack.showReadAloudDialog() + else + runMenuOut { callBack.showReadAloudDialog() } } //界面 llFont.setOnClickListener { - runMenuOut { + if(AppConfig.isEInkMode) callBack.showReadStyle() - } + else + runMenuOut { + callBack.showReadStyle() + } } //设置 llSetting.setOnClickListener { - runMenuOut { + if(AppConfig.isEInkMode) callBack.showMoreSetting() - } + else + runMenuOut { + callBack.showMoreSetting() + } } } From ca90ff24db45aef2de8c783dea9c08f5c343437f Mon Sep 17 00:00:00 2001 From: kunfei Date: Sat, 27 Aug 2022 19:55:23 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legado/app/ui/book/read/ReadMenu.kt | 199 +++++++++--------- .../io/legado/app/ui/book/read/SearchMenu.kt | 6 +- .../legado/app/utils/AnimationExtensions.kt | 15 ++ .../legado/app/utils/AnimationUtilsSupport.kt | 17 -- 4 files changed, 113 insertions(+), 124 deletions(-) create mode 100644 app/src/main/java/io/legado/app/utils/AnimationExtensions.kt delete mode 100644 app/src/main/java/io/legado/app/utils/AnimationUtilsSupport.kt diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt index 1a3067f5c..174b06dad 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt @@ -43,10 +43,18 @@ class ReadMenu @JvmOverloads constructor( var cnaShowMenu: Boolean = false private val callBack: CallBack get() = activity as CallBack private val binding = ViewReadMenuBinding.inflate(LayoutInflater.from(context), this, true) - private lateinit var menuTopIn: Animation - private lateinit var menuTopOut: Animation - private lateinit var menuBottomIn: Animation - private lateinit var menuBottomOut: Animation + private val menuTopIn: Animation by lazy { + loadAnimation(context, R.anim.anim_readbook_top_in) + } + 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 textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor)) 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 { initView() @@ -141,19 +201,29 @@ class ReadMenu @JvmOverloads constructor( activity?.window?.attributes = params } - fun runMenuIn() { + fun runMenuIn(anim: Boolean = AppConfig.isEInkMode) { this.visible() binding.titleBar.visible() binding.bottomMenu.visible() - binding.titleBar.startAnimation(menuTopIn) - binding.bottomMenu.startAnimation(menuBottomIn) + if (anim) { + 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 if (this.isVisible) { - binding.titleBar.startAnimation(menuTopOut) - binding.bottomMenu.startAnimation(menuBottomOut) + if (anim) { + binding.titleBar.startAnimation(menuTopOut) + binding.bottomMenu.startAnimation(menuBottomOut) + } else { + menuOutListener.onAnimationStart(menuBottomOut) + menuOutListener.onAnimationEnd(menuBottomOut) + } } } @@ -247,22 +317,16 @@ class ReadMenu @JvmOverloads constructor( //搜索 fabSearch.setOnClickListener { - if(AppConfig.isEInkMode) + runMenuOut { callBack.openSearchActivity(null) - else - runMenuOut { - callBack.openSearchActivity(null) - } + } } //自动翻页 fabAutoPage.setOnClickListener { - if(AppConfig.isEInkMode) + runMenuOut { callBack.autoPage() - else - runMenuOut { - callBack.autoPage() - } + } } //替换 @@ -282,111 +346,40 @@ class ReadMenu @JvmOverloads constructor( //目录 llCatalog.setOnClickListener { - if(AppConfig.isEInkMode) + runMenuOut { callBack.openChapterList() - else - runMenuOut { - callBack.openChapterList() - } + } } //朗读 llReadAloud.setOnClickListener { - if(AppConfig.isEInkMode) + runMenuOut { callBack.onClickReadAloud() - else - runMenuOut { - callBack.onClickReadAloud() - } + } } llReadAloud.onLongClick { - if(AppConfig.isEInkMode) + runMenuOut { callBack.showReadAloudDialog() - else - runMenuOut { callBack.showReadAloudDialog() } + } } //界面 llFont.setOnClickListener { - if(AppConfig.isEInkMode) + runMenuOut { callBack.showReadStyle() - else - runMenuOut { - callBack.showReadStyle() - } + } } //设置 llSetting.setOnClickListener { - if(AppConfig.isEInkMode) + runMenuOut { callBack.showMoreSetting() - else - runMenuOut { - callBack.showMoreSetting() - } + } } } private fun initAnimation() { - //显示菜单 - menuTopIn = AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_top_in) - 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 - }) + menuTopIn.setAnimationListener(menuInListener) + menuTopOut.setAnimationListener(menuOutListener) } fun upBookView() { diff --git a/app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt index 88a33f08d..0a5013943 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/SearchMenu.kt @@ -33,10 +33,8 @@ class SearchMenu @JvmOverloads constructor( private val callBack: CallBack get() = activity as CallBack private val binding = ViewSearchMenuBinding.inflate(LayoutInflater.from(context), this, true) - private val menuBottomIn: Animation = - AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_in) - private val menuBottomOut: Animation = - AnimationUtilsSupport.loadAnimation(context, R.anim.anim_readbook_bottom_out) + private val menuBottomIn: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_in) + private val menuBottomOut: Animation = loadAnimation(context, R.anim.anim_readbook_bottom_out) private val bgColor: Int = context.bottomBackground private val textColor: Int = context.getPrimaryTextColor(ColorUtils.isColorLight(bgColor)) private val bottomBackgroundList: ColorStateList = diff --git a/app/src/main/java/io/legado/app/utils/AnimationExtensions.kt b/app/src/main/java/io/legado/app/utils/AnimationExtensions.kt new file mode 100644 index 000000000..d862306f3 --- /dev/null +++ b/app/src/main/java/io/legado/app/utils/AnimationExtensions.kt @@ -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 +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/utils/AnimationUtilsSupport.kt b/app/src/main/java/io/legado/app/utils/AnimationUtilsSupport.kt deleted file mode 100644 index 674e162da..000000000 --- a/app/src/main/java/io/legado/app/utils/AnimationUtilsSupport.kt +++ /dev/null @@ -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 - } -} \ No newline at end of file