From 4cd31e1df81761b1be3715b8ceb97a6888f0785b Mon Sep 17 00:00:00 2001 From: lhjgege <1079947827@qq.com> Date: Sun, 16 Feb 2025 18:40:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8=E5=88=98=E6=B5=B7?= =?UTF-8?q?=E5=B1=8F=E6=89=8B=E6=9C=BA=E4=B8=AD=E6=98=BE=E7=A4=BA=E9=A1=B6?= =?UTF-8?q?=E9=83=A8=E6=A0=8F=E6=97=B6=E5=80=99=E5=88=97=E8=A1=A8=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=BB=9A=E5=8A=A8=20(#4691)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复在刘海屏手机中显示顶部栏时候列表上下滚动 * 修复解密失败一直显示加载框问题 * 修复有些源图片解密失败 --- .../app/help/glide/OkHttpModelLoader.kt | 2 +- .../app/help/glide/OkHttpStreamFetcher.kt | 37 +++--- .../app/ui/book/manga/ReadMangaActivity.kt | 110 +++--------------- .../io/legado/app/ui/book/read/MangaMenu.kt | 23 +++- app/src/main/res/layout/view_manga_menu.xml | 97 ++++++++------- 5 files changed, 106 insertions(+), 163 deletions(-) diff --git a/app/src/main/java/io/legado/app/help/glide/OkHttpModelLoader.kt b/app/src/main/java/io/legado/app/help/glide/OkHttpModelLoader.kt index 1f813a7c1..96c512398 100644 --- a/app/src/main/java/io/legado/app/help/glide/OkHttpModelLoader.kt +++ b/app/src/main/java/io/legado/app/help/glide/OkHttpModelLoader.kt @@ -27,7 +27,7 @@ object OkHttpModelLoader : ModelLoader { } return ModelLoader.LoadData( modelWithHeader, - OkHttpStreamFetcher(modelWithHeader, options) + OkHttpStreamFetcher(model,modelWithHeader, options) ) } diff --git a/app/src/main/java/io/legado/app/help/glide/OkHttpStreamFetcher.kt b/app/src/main/java/io/legado/app/help/glide/OkHttpStreamFetcher.kt index 5e9895961..6bfccaac0 100644 --- a/app/src/main/java/io/legado/app/help/glide/OkHttpStreamFetcher.kt +++ b/app/src/main/java/io/legado/app/help/glide/OkHttpStreamFetcher.kt @@ -1,5 +1,6 @@ package io.legado.app.help.glide +import android.net.Uri import com.bumptech.glide.Priority import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.HttpException @@ -28,6 +29,7 @@ import java.io.InputStream class OkHttpStreamFetcher( + private val oldUrl: GlideUrl, private val url: GlideUrl, private val options: Options, ) : @@ -99,25 +101,24 @@ class OkHttpStreamFetcher( override fun onResponse(call: Call, response: Response) { responseBody = response.body - val manga = options.get(OkHttpModelLoader.mangaOption) == true - val decodeResult = if (manga) { - ImageUtils.decode( - url.toStringUrl(), - responseBody!!.byteStream().readBytes(), - isCover = false, - source, - ReadMange.book - ).let { - ByteArrayInputStream(it) - } - } else { - ImageUtils.decode( - url.toStringUrl(), responseBody!!.byteStream(), - isCover = true, source - ) - } if (response.isSuccessful) { - + val manga = options.get(OkHttpModelLoader.mangaOption) == true + val decodeResult = if (manga) { + ImageUtils.decode( + Uri.decode(oldUrl.toStringUrl()), + responseBody!!.byteStream().readBytes(), + isCover = false, + source, + ReadMange.book + )?.let { + ByteArrayInputStream(it) + } + } else { + ImageUtils.decode( + url.toStringUrl(), responseBody!!.byteStream(), + isCover = true, source + ) + } if (decodeResult == null) { callback?.onLoadFailed(NoStackTraceException("封面二次解密失败")) } else { diff --git a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt index 660ab693f..602176a8e 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/ReadMangaActivity.kt @@ -1,17 +1,15 @@ package io.legado.app.ui.book.manga -import android.annotation.SuppressLint import android.content.Intent -import android.os.Build import android.os.Bundle import android.os.Looper import android.view.KeyEvent import android.view.Menu import android.view.MenuItem -import android.view.View -import android.view.WindowInsets import androidx.activity.viewModels import androidx.appcompat.app.AlertDialog +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.isGone import androidx.core.view.isVisible @@ -31,10 +29,8 @@ import io.legado.app.databinding.ActivityMangeBinding import io.legado.app.databinding.ViewLoadMoreBinding import io.legado.app.help.book.isImage import io.legado.app.help.config.AppConfig -import io.legado.app.help.config.ReadBookConfig import io.legado.app.help.storage.Backup import io.legado.app.lib.dialogs.alert -import io.legado.app.lib.theme.ThemeStore import io.legado.app.model.ReadMange import io.legado.app.model.ReadMange.mFirstLoading import io.legado.app.model.recyclerView.MangeContent @@ -47,25 +43,21 @@ import io.legado.app.ui.book.read.MangaMenu import io.legado.app.ui.book.read.ReadBookActivity.Companion.RESULT_DELETED import io.legado.app.ui.book.toc.TocActivityResult import io.legado.app.ui.widget.recycler.LoadMoreView -import io.legado.app.utils.ColorUtils import io.legado.app.utils.NetworkUtils import io.legado.app.utils.StartActivityContract import io.legado.app.utils.getCompatColor import io.legado.app.utils.gone import io.legado.app.utils.immersionFullScreen import io.legado.app.utils.printOnDebug -import io.legado.app.utils.setLightStatusBar -import io.legado.app.utils.setNavigationBarColorAuto import io.legado.app.utils.showDialogFragment import io.legado.app.utils.toastOnUi import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.visible +import splitties.dimensions.dp class ReadMangaActivity : VMBaseActivity(), ReadMange.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack { - private val menuLayoutIsVisible get() = binding.mangaMenu.isVisible - private val mLayoutManager by lazy { LinearLayoutManager(this@ReadMangaActivity) } @@ -98,6 +90,10 @@ class ReadMangaActivity : VMBaseActivity() } } + private val windowInsetsControllerCompat by lazy { + WindowInsetsControllerCompat(window, binding.root) + } + //打开目录返回选择章节返回结果 private val tocActivity = registerForActivityResult(TocActivityResult()) { @@ -117,7 +113,7 @@ class ReadMangaActivity : VMBaseActivity() override val viewModel by viewModels() override fun onActivityCreated(savedInstanceState: Bundle?) { - immersionFullScreen(WindowInsetsControllerCompat(window, binding.root)) + immersionFullScreen(windowInsetsControllerCompat) ReadMange.register(this) binding.mRecyclerMange.run { adapter = mAdapter @@ -182,6 +178,11 @@ class ReadMangaActivity : VMBaseActivity() } } loadMoreView.gone() + binding.mangaMenu.setTitleBarPadding( + ViewCompat.getRootWindowInsets(findViewById(android.R.id.content))?.getInsets( + WindowInsetsCompat.Type.statusBars() + )?.top ?: dp(25) + ) } override fun onNewIntent(intent: Intent) { @@ -257,7 +258,7 @@ class ReadMangaActivity : VMBaseActivity() networkChangedListener.register() networkChangedListener.onNetworkChanged = { // 当网络是可用状态且无需初始化时同步进度(初始化中已有同步进度逻辑) - if (AppConfig.syncBookProgressPlus && NetworkUtils.isAvailable()&&!justInitData) { + if (AppConfig.syncBookProgressPlus && NetworkUtils.isAvailable() && !justInitData) { ReadMange.syncProgress({ progress -> sureNewProgress(progress) }) } } @@ -369,19 +370,6 @@ class ReadMangaActivity : VMBaseActivity() return super.onCompatOptionsItemSelected(item) } - override fun upNavigationBarColor() { - when { - binding.mangaMenu.isVisible -> super.upNavigationBarColor() - !AppConfig.immNavigationBar -> super.upNavigationBarColor() - else -> setNavigationBarColorAuto(ReadBookConfig.bgMeanColor) - } - } - - @SuppressLint("RtlHardcoded") - private fun upNavigationBar(value: Boolean) { - binding.mangaMenu.isVisible = value - } - override fun openBookInfoActivity() { ReadMange.book?.let { bookInfoActivity.launch { @@ -392,74 +380,8 @@ class ReadMangaActivity : VMBaseActivity() } override fun upSystemUiVisibility(value: Boolean) { - upSystemUiVisibility(isInMultiWindow, !menuLayoutIsVisible, false) - upNavigationBarColor() - upNavigationBar(value) - if (!value) { - immersionFullScreen(WindowInsetsControllerCompat(window, binding.root)) - } - } - - /** - * 更新状态栏,导航栏 - */ - fun upSystemUiVisibility( - isInMultiWindow: Boolean, - toolBarHide: Boolean = true, - useBgMeanColor: Boolean = false, - ) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - window.insetsController?.run { - if (toolBarHide && ReadBookConfig.hideNavigationBar) { - hide(WindowInsets.Type.navigationBars()) - } else { - show(WindowInsets.Type.navigationBars()) - } - if (toolBarHide && ReadBookConfig.hideStatusBar) { - hide(WindowInsets.Type.statusBars()) - } else { - show(WindowInsets.Type.statusBars()) - } - } - } - upSystemUiVisibilityO(isInMultiWindow, toolBarHide) - if (toolBarHide) { - setLightStatusBar(ReadBookConfig.durConfig.curStatusIconDark()) - } else { - val statusBarColor = - if (AppConfig.readBarStyleFollowPage - && ReadBookConfig.durConfig.curBgType() == 0 - || useBgMeanColor - ) { - ReadBookConfig.bgMeanColor - } else { - ThemeStore.statusBarColor(this, AppConfig.isTransparentStatusBar) - } - setLightStatusBar(ColorUtils.isColorLight(statusBarColor)) - } - } - - @Suppress("DEPRECATION") - private fun upSystemUiVisibilityO( - isInMultiWindow: Boolean, - toolBarHide: Boolean = true, - ) { - var flag = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE - or View.SYSTEM_UI_FLAG_IMMERSIVE - or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) - if (!isInMultiWindow) { - flag = flag or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - } - if (ReadBookConfig.hideNavigationBar) { - flag = flag or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - if (toolBarHide) { - flag = flag or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - } - } - if (ReadBookConfig.hideStatusBar && toolBarHide) { - flag = flag or View.SYSTEM_UI_FLAG_FULLSCREEN - } - window.decorView.systemUiVisibility = flag + binding.mangaMenu.isVisible = value + immersionFullScreen(WindowInsetsControllerCompat(window, binding.root)) } override fun dispatchKeyEvent(event: KeyEvent): Boolean { diff --git a/app/src/main/java/io/legado/app/ui/book/read/MangaMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/MangaMenu.kt index 0c8580821..b6b3370eb 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/MangaMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/MangaMenu.kt @@ -36,6 +36,9 @@ import io.legado.app.utils.modifyBegin import io.legado.app.utils.openUrl import io.legado.app.utils.startActivity import io.legado.app.utils.visible +import splitties.views.bottomPadding +import splitties.views.leftPadding +import splitties.views.rightPadding class MangaMenu @JvmOverloads constructor( context: Context, @@ -81,7 +84,7 @@ class MangaMenu @JvmOverloads constructor( } override fun onAnimationEnd(animation: Animation) { - binding.titleBar.invisible() + binding.flTitleBar.invisible() isMenuOutAnimating = false canShowMenu = false callBack.upSystemUiVisibility(false) @@ -108,7 +111,7 @@ class MangaMenu @JvmOverloads constructor( } init { - initView() + initView(true) bindEvent() } @@ -117,6 +120,7 @@ class MangaMenu @JvmOverloads constructor( if (immersiveMenu) { val lightTextColor = ColorUtils.withAlpha(ColorUtils.lightenColor(textColor), 0.75f) titleBar.setTextColor(textColor) + flTitleBar.setBackgroundColor(bgColor) titleBar.setBackgroundColor(bgColor) titleBar.setColorFilter(textColor) tvChapterName.setTextColor(lightTextColor) @@ -125,6 +129,7 @@ class MangaMenu @JvmOverloads constructor( val bgColor = context.primaryColor val textColor = context.primaryTextColor titleBar.setTextColor(textColor) + flTitleBar.setBackgroundColor(bgColor) titleBar.setBackgroundColor(bgColor) titleBar.setColorFilter(textColor) tvChapterName.setTextColor(textColor) @@ -173,7 +178,7 @@ class MangaMenu @JvmOverloads constructor( } if (this.isVisible) { if (anim) { - binding.titleBar.startAnimation(menuTopOut) + binding.flTitleBar.startAnimation(menuTopOut) } else { menuOutListener.onAnimationStart(menuBottomOut) menuOutListener.onAnimationEnd(menuBottomOut) @@ -183,9 +188,9 @@ class MangaMenu @JvmOverloads constructor( fun runMenuIn(anim: Boolean = !AppConfig.isEInkMode) { this.visible() - binding.titleBar.visible() + binding.flTitleBar.visible() if (anim) { - binding.titleBar.startAnimation(menuTopIn) + binding.flTitleBar.startAnimation(menuTopIn) } else { menuInListener.onAnimationStart(menuBottomIn) menuInListener.onAnimationEnd(menuBottomIn) @@ -228,9 +233,15 @@ class MangaMenu @JvmOverloads constructor( tvChapterUrl.setOnLongClickListener(chapterViewLongClickListener) } + fun setTitleBarPadding(top: Int) { + binding.flTitleBar.run { + setPadding(leftPadding, this.paddingTop.plus(top), rightPadding, bottomPadding) + } + } + interface CallBack { fun openBookInfoActivity() - fun upSystemUiVisibility(value:Boolean) + fun upSystemUiVisibility(value: Boolean) } } \ No newline at end of file diff --git a/app/src/main/res/layout/view_manga_menu.xml b/app/src/main/res/layout/view_manga_menu.xml index e8be9ad07..dd3618a4e 100644 --- a/app/src/main/res/layout/view_manga_menu.xml +++ b/app/src/main/res/layout/view_manga_menu.xml @@ -15,59 +15,68 @@ tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="0dp" /> - - + android:layout_height="wrap_content" + android:theme="?attr/actionBarStyle"> - + - + - + - + - + + + + \ No newline at end of file