From 1240cc523294843e527b41d67756d133a6ec366f Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sat, 22 Aug 2020 22:12:59 -0400 Subject: [PATCH] Reader bottom sheet transparency, as well as a half fix for the fullscreen reader bug --- .../tachiyomi/ui/reader/ReaderActivity.kt | 17 ++++---- .../ui/reader/chapter/ReaderChapterSheet.kt | 39 +++++++++++++++++++ app/src/main/res/layout/reader_activity.xml | 14 +++---- .../main/res/layout/reader_chapters_sheet.xml | 3 ++ 4 files changed, 57 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 39ef99bfe..eca35cf1f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -509,7 +509,7 @@ class ReaderActivity : BaseRxActivity() } val loader = page.chapter.pageLoader - if (page.index == exh_currentPage()?.index && loader is HttpPageLoader) { + if (page.index == exhCurrentpage()?.index && loader is HttpPageLoader) { loader.boostPage(page) } else { loader?.retryPage(page) @@ -535,7 +535,7 @@ class ReaderActivity : BaseRxActivity() binding.ehBoostPage.clicks() .onEach { viewer?.let { _ -> - val curPage = exh_currentPage() ?: run { + val curPage = exhCurrentpage() ?: run { toast("This page cannot be boosted (invalid page)!") return@let } @@ -581,13 +581,8 @@ class ReaderActivity : BaseRxActivity() } // EXH --> - private fun exh_currentPage(): ReaderPage? { - val currentPage = ( - ( - (viewer as? PagerViewer)?.currentPage - ?: (viewer as? WebtoonViewer)?.currentPage - ) as? ReaderPage - )?.index + private fun exhCurrentpage(): ReaderPage? { + val currentPage = (((viewer as? PagerViewer)?.currentPage ?: (viewer as? WebtoonViewer)?.currentPage) as? ReaderPage)?.index return currentPage?.let { presenter.viewerChaptersRelay.value.currChapter.pages?.getOrNull(it) } } // EXH <-- @@ -606,6 +601,10 @@ class ReaderActivity : BaseRxActivity() } binding.readerMenu.isVisible = true + if (readerBottomSheetBinding.chaptersBottomSheet.sheetBehavior.isExpanded()) { + readerBottomSheetBinding.chaptersBottomSheet.sheetBehavior?.isHideable = false + } + if (animate) { val toolbarAnimation = AnimationUtils.loadAnimation(this, R.anim.enter_from_top) toolbarAnimation.setAnimationListener(object : SimpleAnimationListener() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterSheet.kt index 44dc6edb6..970c2c21b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/chapter/ReaderChapterSheet.kt @@ -1,9 +1,12 @@ package eu.kanade.tachiyomi.ui.reader.chapter import android.content.Context +import android.content.res.ColorStateList +import android.graphics.Color import android.util.AttributeSet import android.view.View import android.widget.LinearLayout +import androidx.core.graphics.ColorUtils import androidx.core.view.isInvisible import androidx.core.view.isVisible import androidx.recyclerview.widget.LinearLayoutManager @@ -12,15 +15,20 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior import com.mikepenz.fastadapter.FastAdapter import com.mikepenz.fastadapter.adapters.ItemAdapter import com.mikepenz.fastadapter.listeners.ClickEventHook +import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.databinding.ReaderChaptersSheetBinding import eu.kanade.tachiyomi.ui.reader.ReaderActivity import eu.kanade.tachiyomi.ui.reader.ReaderPresenter import eu.kanade.tachiyomi.util.lang.launchUI import eu.kanade.tachiyomi.util.system.dpToPx +import eu.kanade.tachiyomi.util.system.getResourceColor import exh.util.collapse import exh.util.expand import exh.util.isExpanded import kotlin.math.max +import kotlin.math.min +import kotlin.math.roundToInt +import kotlinx.android.synthetic.main.reader_chapters_sheet.view.pill class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : LinearLayout(context, attrs) { @@ -37,6 +45,8 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr fun setup(activity: ReaderActivity) { presenter = activity.presenter binding = activity.readerBottomSheetBinding + val fullPrimary = context.getResourceColor(R.attr.colorSurface) + val primary = ColorUtils.setAlphaComponent(fullPrimary, 200) sheetBehavior = BottomSheetBehavior.from(this) binding.chaptersButton.setOnClickListener { @@ -52,6 +62,7 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr } post { + binding.chapterRecycler.alpha = if (sheetBehavior.isExpanded()) 1f else 0f binding.chapterRecycler.isClickable = sheetBehavior.isExpanded() binding.chapterRecycler.isFocusable = sheetBehavior.isExpanded() } @@ -59,10 +70,14 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr sheetBehavior?.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { override fun onSlide(bottomSheet: View, progress: Float) { val trueProgress = max(progress, 0f) + binding.pill.alpha = (1 - trueProgress) * 0.25f binding.chaptersButton.alpha = 1 - trueProgress binding.webviewButton.alpha = trueProgress binding.webviewButton.isVisible = binding.webviewButton.alpha > 0 binding.chaptersButton.isInvisible = binding.chaptersButton.alpha <= 0 + backgroundTintList = + ColorStateList.valueOf(lerpColor(primary, fullPrimary, trueProgress)) + binding.chapterRecycler.alpha = trueProgress } override fun onStateChanged(p0: View, state: Int) { @@ -77,6 +92,7 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr binding.webviewButton.alpha = 0f } if (state == BottomSheetBehavior.STATE_EXPANDED) { + binding.chapterRecycler.alpha = 1F binding.chaptersButton.alpha = 0f binding.webviewButton.alpha = 1f } @@ -120,6 +136,11 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr } }) + backgroundTintList = ColorStateList.valueOf( + if (!sheetBehavior.isExpanded()) primary + else fullPrimary + ) + binding.chapterRecycler.layoutManager = LinearLayoutManager(context) refreshList() } @@ -138,4 +159,22 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr ) } } + + fun lerpColor(colorStart: Int, colorEnd: Int, percent: Float): Int { + val perc = (percent * 100).roundToInt() + return Color.argb( + lerpColorCalc(Color.alpha(colorStart), Color.alpha(colorEnd), perc), + lerpColorCalc(Color.red(colorStart), Color.red(colorEnd), perc), + lerpColorCalc(Color.green(colorStart), Color.green(colorEnd), perc), + lerpColorCalc(Color.blue(colorStart), Color.blue(colorEnd), perc) + ) + } + + fun lerpColorCalc(colorStart: Int, colorEnd: Int, percent: Int): Int { + return ( + min(colorStart, colorEnd) * (100 - percent) + max( + colorStart, colorEnd + ) * percent + ) / 100 + } } diff --git a/app/src/main/res/layout/reader_activity.xml b/app/src/main/res/layout/reader_activity.xml index 1c09fdd4d..ed40ee86d 100755 --- a/app/src/main/res/layout/reader_activity.xml +++ b/app/src/main/res/layout/reader_activity.xml @@ -1,4 +1,4 @@ - - - + - + - + diff --git a/app/src/main/res/layout/reader_chapters_sheet.xml b/app/src/main/res/layout/reader_chapters_sheet.xml index b2d5da9a3..9a54c49e0 100644 --- a/app/src/main/res/layout/reader_chapters_sheet.xml +++ b/app/src/main/res/layout/reader_chapters_sheet.xml @@ -7,6 +7,7 @@ android:layout_height="300dp" android:background="?attr/colorSurface" android:orientation="vertical" + android:alpha="1" app:behavior_peekHeight="?attr/actionBarSize" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> @@ -22,6 +23,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" + android:alpha="0.25" android:contentDescription="@string/action_sort_drag_and_drop" android:src="@drawable/ic_drag_pill_24dp" android:tint="?attr/colorOnSurface" @@ -84,5 +86,6 @@ android:layout_height="match_parent" android:background="?attr/colorSurface" android:clipToPadding="false" + android:alpha="0" tools:listitem="@layout/reader_chapter_item" /> \ No newline at end of file