diff --git a/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt b/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt index dde9cba19..b7531d6a7 100644 --- a/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt +++ b/app/src/main/java/io/legado/app/help/glide/LegadoGlideModule.kt @@ -37,9 +37,5 @@ class LegadoGlideModule : AppGlideModule() { 1024 * 1024 * 1000 ) ) - .setDefaultRequestOptions { - RequestOptions().format(DecodeFormat.PREFER_RGB_565) - .encodeQuality(90) - } } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/model/ReadManga.kt b/app/src/main/java/io/legado/app/model/ReadManga.kt index 0be43d52a..f5cfd9dc6 100644 --- a/app/src/main/java/io/legado/app/model/ReadManga.kt +++ b/app/src/main/java/io/legado/app/model/ReadManga.kt @@ -272,7 +272,7 @@ object ReadManga : CoroutineScope by MainScope() { suspend fun contentLoadFinish( chapter: BookChapter, content: String, - book: Book + book: Book, ) { if (mTopChapter != null && mTopChapter!!.title != chapterTitle && BookHelp.hasContent( book, @@ -299,7 +299,7 @@ object ReadManga : CoroutineScope by MainScope() { }.mapIndexed { index, src -> MangeContent( mChapterPageCount = durChapterPageCount, - mChapterPagePos = durChapterPagePos, + mChapterPagePos = durChapterPagePos.plus(1), mChapterNextPagePos = durChapterPagePos.plus(1), mImageUrl = src, mDurChapterPos = index.plus(1) @@ -308,6 +308,7 @@ object ReadManga : CoroutineScope by MainScope() { this.forEach { it.mDurChapterCount = this.size } + durChapterCount = this.size } val contentList = mutableListOf() contentList.add( @@ -318,7 +319,6 @@ object ReadManga : CoroutineScope by MainScope() { ) ) contentList.addAll(list) - durChapterCount = contentList.size contentList.add( ReaderLoading( durChapterPagePos, @@ -367,7 +367,12 @@ object ReadManga : CoroutineScope by MainScope() { val bookSource = bookSource ?: return val book = book ?: return if (!book.canUpdate) return - if (System.currentTimeMillis() - book.lastCheckTime < 600000) return + if (System.currentTimeMillis() - book.lastCheckTime < 600000) { + runOnUI { + mCallback?.noData() + } + return + } book.lastCheckTime = System.currentTimeMillis() WebBook.getChapterList(this, bookSource, book).onSuccess(IO) { cList -> if (book.bookUrl == ReadManga.book?.bookUrl @@ -389,6 +394,10 @@ object ReadManga : CoroutineScope by MainScope() { mCallback?.noData() } } + }.onError { + runOnUI { + mCallback?.noData() + } } } @@ -565,7 +574,7 @@ object ReadManga : CoroutineScope by MainScope() { fun syncProgress( newProgressAction: ((progress: BookProgress) -> Unit)? = null, uploadSuccessAction: (() -> Unit)? = null, - syncSuccessAction: (() -> Unit)? = null + syncSuccessAction: (() -> Unit)? = null, ) { if (!AppConfig.syncBookProgress) return book?.let { 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 430b97598..6dd0e14e0 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 @@ -6,13 +6,13 @@ 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.ViewCompat -import androidx.core.view.WindowInsetsCompat 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 com.bumptech.glide.Glide import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader @@ -48,12 +48,12 @@ 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.viewbindingdelegate.viewBinding import io.legado.app.utils.visible -import splitties.dimensions.dp class ReadMangaActivity : VMBaseActivity(), ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack { @@ -114,6 +114,13 @@ class ReadMangaActivity : VMBaseActivity() 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) binding.mRecyclerMange.run { adapter = mAdapter @@ -178,11 +185,6 @@ 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) { @@ -208,14 +210,15 @@ class ReadMangaActivity : VMBaseActivity() override fun loadContentFinish(list: MutableList) { if (!this.isDestroyed) { + setTitle(ReadManga.book?.name) mAdapter.submitList(list) { if (!mFirstLoading) { if (list.size > 1) { binding.infobar.isVisible = true upText( - ReadManga.durChapterPagePos, + ReadManga.durChapterPagePos.plus(1), ReadManga.durChapterPageCount, - ReadManga.durChapterPos, + ReadManga.durChapterPos.plus(1), ReadManga.durChapterCount ) } @@ -247,7 +250,7 @@ class ReadMangaActivity : VMBaseActivity() binding.infobar.update( chapterPagePos, chapterPageCount, - chapterPagePos.minus(1f).div(chapterPageCount.minus(1f)), + chapterPagePos.times(1f).div(chapterPageCount.times(1f)), chapterPos, chapterCount ) 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 c7cac1235..cab988fea 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 @@ -102,7 +102,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.66f) + mcRect.set(width * 0.33f, height * 0.33f, width * 0.66f, height * 0.46f) } private fun getPositionX(positionX: Float): Float { 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 cfad2d296..4e171779b 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,6 +6,8 @@ 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 @@ -232,6 +234,9 @@ class MangaMenu @JvmOverloads constructor( } fun setTitleBarPadding(top: Int) { + if (top <= 0) { + return + } binding.flTitleBar.run { setPadding(leftPadding, this.paddingTop.plus(top), rightPadding, bottomPadding) } 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 51a092ed4..8de3c0ae3 100644 --- a/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ActivityExtensions.kt @@ -16,6 +16,7 @@ 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 @@ -249,4 +250,11 @@ fun AppCompatActivity.showHelp(fileName: String) { 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