diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index a65cf792e..fdd7cc341 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -95,8 +95,8 @@ object PreferKey { const val bitmapCacheSize = "bitmapCacheSize" const val imageRetainNum = "imageRetainNum" const val preDownloadNum = "preDownloadNum" - const val preMangaDownloadNum = "preMangaDownloadNum" - const val singlePageScrolling="singlePageScrolling" + const val mangaPreDownloadNum = "mangaPreDownloadNum" + const val singlePageScrolling = "singlePageScrolling" const val autoRefresh = "auto_refresh" const val defaultToRead = "defaultToRead" const val exportCharset = "exportCharset" @@ -155,8 +155,8 @@ object PreferKey { const val streamReadAloudAudio = "streamReadAloudAudio" const val pauseReadAloudWhilePhoneCalls = "pauseReadAloudWhilePhoneCalls" const val readAloudByMediaButton = "readAloudByMediaButton" - const val showMangaUi="showMangaUi" - const val disableMangaScaling="disableMangaScaling" + const val showMangaUi = "showMangaUi" + const val disableMangaScaling = "disableMangaScaling" const val cPrimary = "colorPrimary" const val cAccent = "colorAccent" diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index 06456b24f..f4bb260b9 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -617,10 +617,10 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { } //漫画预加载数量 - var preMangaDownloadNum - get() = appCtx.getPrefInt(PreferKey.preMangaDownloadNum, 10) + var mangaPreDownloadNum + get() = appCtx.getPrefInt(PreferKey.mangaPreDownloadNum, 10) set(value) { - appCtx.putPrefInt(PreferKey.preMangaDownloadNum, value) + appCtx.putPrefInt(PreferKey.mangaPreDownloadNum, value) } //单页滚动 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 66966c9e0..586cb3ece 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 @@ -7,13 +7,10 @@ import android.os.Looper import android.view.KeyEvent import android.view.Menu import android.view.MenuItem -import android.view.ViewGroup import androidx.activity.viewModels import androidx.appcompat.app.AlertDialog -import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.isGone import androidx.core.view.isVisible -import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.PagerSnapHelper import com.bumptech.glide.Glide @@ -27,7 +24,7 @@ import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookChapter import io.legado.app.data.entities.BookProgress import io.legado.app.data.entities.BookSource -import io.legado.app.databinding.ActivityMangeBinding +import io.legado.app.databinding.ActivityMangaBinding import io.legado.app.databinding.ViewLoadMoreBinding import io.legado.app.help.book.isImage import io.legado.app.help.config.AppConfig @@ -50,15 +47,14 @@ 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.immersionPadding import io.legado.app.utils.printOnDebug import io.legado.app.utils.showDialogFragment import io.legado.app.utils.toastOnUi +import io.legado.app.utils.toggleStatusBar import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.visible -class ReadMangaActivity : VMBaseActivity(), +class ReadMangaActivity : VMBaseActivity(), ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack { private val mLayoutManager by lazy { @@ -68,7 +64,7 @@ class ReadMangaActivity : VMBaseActivity() MangaAdapter(this@ReadMangaActivity) } private val mPreDownloadNum by lazy { - AppConfig.preMangaDownloadNum + AppConfig.mangaPreDownloadNum } private val mSinglePageScroller by lazy { AppConfig.singlePageScrolling @@ -105,10 +101,6 @@ class ReadMangaActivity : VMBaseActivity() } } - private val windowInsetsControllerCompat by lazy { - WindowInsetsControllerCompat(window, binding.root) - } - //打开目录返回选择章节返回结果 private val tocActivity = registerForActivityResult(TocActivityResult()) { it?.let { @@ -123,20 +115,13 @@ class ReadMangaActivity : VMBaseActivity() super.finish() } } - override val binding by viewBinding(ActivityMangeBinding::inflate) + override val binding by viewBinding(ActivityMangaBinding::inflate) override val viewModel by viewModels() override fun onActivityCreated(savedInstanceState: Bundle?) { - immersionFullScreen(windowInsetsControllerCompat) - immersionPadding(binding.root) { view, insets, _ -> - binding.mangaMenu.setTitleBarPadding(insets.top) - view.updateLayoutParams { - leftMargin = insets.left - rightMargin = insets.right - } - } ReadManga.register(this) disableMangaScaling(mDisableMangaScaling) + upSystemUiVisibility(false) binding.mRecyclerMange.run { adapter = mAdapter itemAnimator = null @@ -185,7 +170,7 @@ class ReadMangaActivity : VMBaseActivity() } } } - binding.retry.setOnClickListener { + binding.tvRetry.setOnClickListener { binding.llLoading.isVisible = true binding.llRetry.isGone = true mFirstLoading = false @@ -390,10 +375,14 @@ class ReadMangaActivity : VMBaseActivity() } R.id.menu_pre_manga_number -> { - NumberPickerDialog(this).setTitle(getString(R.string.pre_download)) - .setMaxValue(9999).setMinValue(0).setValue(AppConfig.preMangaDownloadNum).show { - AppConfig.preMangaDownloadNum = it - item.setTitle(getString(R.string.pre_download_m, it)) + NumberPickerDialog(this) + .setTitle(getString(R.string.pre_download)) + .setMaxValue(9999) + .setMinValue(0) + .setValue(AppConfig.mangaPreDownloadNum) + .show { + AppConfig.mangaPreDownloadNum = it + item.title = getString(R.string.pre_download_m, it) addRecyclerViewPreloader(it) } } @@ -422,9 +411,8 @@ class ReadMangaActivity : VMBaseActivity() } } - override fun upSystemUiVisibility(value: Boolean) { - binding.mangaMenu.isVisible = value - immersionFullScreen(WindowInsetsControllerCompat(window, binding.root)) + override fun upSystemUiVisibility(menuIsVisible: Boolean) { + toggleStatusBar(menuIsVisible) } override fun dispatchKeyEvent(event: KeyEvent): Boolean { diff --git a/app/src/main/java/io/legado/app/ui/book/manga/rv/WebtoonRecyclerView.kt b/app/src/main/java/io/legado/app/ui/book/manga/rv/WebtoonRecyclerView.kt index 3ff35b9e7..7bb936630 100644 --- a/app/src/main/java/io/legado/app/ui/book/manga/rv/WebtoonRecyclerView.kt +++ b/app/src/main/java/io/legado/app/ui/book/manga/rv/WebtoonRecyclerView.kt @@ -107,7 +107,7 @@ class WebtoonRecyclerView @JvmOverloads constructor( override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) { super.onSizeChanged(w, h, oldw, oldh) - mcRect.set(width * 0.33f, height * 0.33f, width * 0.66f, height * 0.46f) + mcRect.set(width * 0.33f, height * 0.33f, width * 0.66f, height * 0.66f) blRect.set(0f, height * 0.66f, width * 0.33f, height.toFloat()) brRect.set(width * 0.66f, height * 0.66f, width.toFloat(), height.toFloat()) } 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 4e171779b..b92f485e5 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 @@ -6,8 +6,6 @@ import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.util.AttributeSet import android.view.LayoutInflater -import android.view.View.OnClickListener -import android.view.View.OnLongClickListener import android.view.animation.Animation import android.widget.FrameLayout import androidx.core.view.isGone @@ -36,9 +34,6 @@ 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, @@ -84,7 +79,8 @@ class MangaMenu @JvmOverloads constructor( } override fun onAnimationEnd(animation: Animation) { - binding.flTitleBar.invisible() + this@MangaMenu.invisible() + binding.titleBar.invisible() isMenuOutAnimating = false canShowMenu = false callBack.upSystemUiVisibility(false) @@ -120,7 +116,6 @@ 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) @@ -129,7 +124,6 @@ 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) @@ -178,7 +172,7 @@ class MangaMenu @JvmOverloads constructor( } if (this.isVisible) { if (anim) { - binding.flTitleBar.startAnimation(menuTopOut) + binding.titleBar.startAnimation(menuTopOut) } else { menuOutListener.onAnimationStart(menuBottomOut) menuOutListener.onAnimationEnd(menuBottomOut) @@ -188,9 +182,9 @@ class MangaMenu @JvmOverloads constructor( fun runMenuIn(anim: Boolean = !AppConfig.isEInkMode) { this.visible() - binding.flTitleBar.visible() + binding.titleBar.visible() if (anim) { - binding.flTitleBar.startAnimation(menuTopIn) + binding.titleBar.startAnimation(menuTopIn) } else { menuInListener.onAnimationStart(menuBottomIn) menuInListener.onAnimationEnd(menuBottomIn) @@ -233,18 +227,9 @@ class MangaMenu @JvmOverloads constructor( tvChapterUrl.setOnLongClickListener(chapterViewLongClickListener) } - fun setTitleBarPadding(top: Int) { - if (top <= 0) { - return - } - binding.flTitleBar.run { - setPadding(leftPadding, this.paddingTop.plus(top), rightPadding, bottomPadding) - } - } - interface CallBack { fun openBookInfoActivity() - fun upSystemUiVisibility(value: Boolean) + fun upSystemUiVisibility(menuIsVisible: Boolean) } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt b/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt index 8de3c0ae3..b925d237b 100644 --- a/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt @@ -16,10 +16,8 @@ import android.view.WindowMetrics import android.widget.FrameLayout import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatActivity -import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat -import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_DEFAULT import androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE import androidx.fragment.app.DialogFragment @@ -191,6 +189,18 @@ fun Activity.toggleNavigationBar(show: Boolean) { } } +fun Activity.toggleStatusBar(show: Boolean) { + WindowCompat.getInsetsController(window, window.decorView).run { + if (show) { + show(WindowInsetsCompat.Type.statusBars()) + systemBarsBehavior = BEHAVIOR_DEFAULT + } else { + hide(WindowInsetsCompat.Type.statusBars()) + systemBarsBehavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + } + } +} + /////以下方法需要在View完全被绘制出来之后调用,否则判断不了,在比如 onWindowFocusChanged()方法中可以得到正确的结果///// /** @@ -246,15 +256,3 @@ fun AppCompatActivity.showHelp(fileName: String) { val mdText = String(assets.open("web/help/md/${fileName}.md").readBytes()) showDialogFragment(TextDialog(getString(R.string.help), mdText, TextDialog.Mode.MD)) } - -fun immersionFullScreen(windowInsetsControllerCompat: WindowInsetsControllerCompat) { - windowInsetsControllerCompat.systemBarsBehavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE - windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars()) -} - -inline fun immersionPadding(root: View, crossinline viewInsets: (v: View, insets: androidx.core.graphics.Insets, gestureInsets: androidx.core.graphics.Insets) -> Unit) { - ViewCompat.setOnApplyWindowInsetsListener(root) { view: View, windowInsetsCompat: WindowInsetsCompat -> - viewInsets(view, windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemBars()), windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemGestures())) - WindowInsetsCompat.CONSUMED - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mange.xml b/app/src/main/res/layout/activity_manga.xml similarity index 87% rename from app/src/main/res/layout/activity_mange.xml rename to app/src/main/res/layout/activity_manga.xml index 02d66df5f..4b3d2a5c4 100644 --- a/app/src/main/res/layout/activity_mange.xml +++ b/app/src/main/res/layout/activity_manga.xml @@ -34,7 +34,7 @@ android:id="@+id/fl_loading" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/white"> + android:background="@color/background"> + android:textColor="@color/primaryText" /> + android:orientation="vertical" + android:visibility="gone"> + android:textColor="@color/primaryText" /> -