Change chapter filters in reader

And some refactoring
This commit is contained in:
Jay 2020-05-21 15:01:25 -04:00
parent bd748f6a62
commit 45161220b8
10 changed files with 258 additions and 131 deletions

View File

@ -0,0 +1,50 @@
package eu.kanade.tachiyomi.ui.manga.chapter
import android.content.Context
import android.util.AttributeSet
import android.widget.CompoundButton
import android.widget.FrameLayout
import android.widget.RelativeLayout
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Manga
import kotlinx.android.synthetic.main.chapter_filter_layout.view.*
class ChapterFilterLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
FrameLayout(context, attrs) {
init {
RelativeLayout.inflate(context, R.layout.chapter_filter_layout, this)
show_all.setOnCheckedChangeListener(::checkedFilter)
show_read.setOnCheckedChangeListener(::checkedFilter)
show_unread.setOnCheckedChangeListener(::checkedFilter)
show_download.setOnCheckedChangeListener(::checkedFilter)
show_bookmark.setOnCheckedChangeListener(::checkedFilter)
}
private fun checkedFilter(checkBox: CompoundButton, isChecked: Boolean) {
if (isChecked) {
if (show_all == checkBox) {
show_read.isChecked = false
show_unread.isChecked = false
show_download.isChecked = false
show_bookmark.isChecked = false
} else {
show_all.isChecked = false
if (show_read == checkBox) show_unread.isChecked = false
else if (show_unread == checkBox) show_read.isChecked = false
}
} else if (!show_read.isChecked && !show_unread.isChecked && !show_download.isChecked && !show_bookmark.isChecked) {
show_all.isChecked = true
}
}
fun setCheckboxes(manga: Manga) {
show_read.isChecked = manga.readFilter == Manga.SHOW_READ
show_unread.isChecked = manga.readFilter == Manga.SHOW_UNREAD
show_download.isChecked = manga.downloadedFilter == Manga.SHOW_DOWNLOADED
show_bookmark.isChecked = manga.bookmarkedFilter == Manga.SHOW_BOOKMARKED
show_all.isChecked = !(show_read.isChecked || show_unread.isChecked ||
show_download.isChecked || show_bookmark.isChecked)
}
}

View File

@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.manga.chapter
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.CompoundButton
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.util.view.setBottomEdge
import eu.kanade.tachiyomi.util.view.setEdgeToEdge import eu.kanade.tachiyomi.util.view.setEdgeToEdge
import eu.kanade.tachiyomi.util.view.visInvisIf import eu.kanade.tachiyomi.util.view.visInvisIf
import eu.kanade.tachiyomi.util.view.visibleIf import eu.kanade.tachiyomi.util.view.visibleIf
import kotlinx.android.synthetic.main.chapter_filter_layout.*
import kotlinx.android.synthetic.main.chapter_sort_bottom_sheet.* import kotlinx.android.synthetic.main.chapter_sort_bottom_sheet.*
import kotlin.math.max import kotlin.math.max
@ -86,13 +86,7 @@ class ChaptersSortBottomSheet(controller: MangaDetailsController) : BottomSheetD
} }
private fun initGeneralPreferences() { private fun initGeneralPreferences() {
show_read.isChecked = presenter.onlyRead() chapter_filter_layout.setCheckboxes(presenter.manga)
show_unread.isChecked = presenter.onlyUnread()
show_download.isChecked = presenter.onlyDownloaded()
show_bookmark.isChecked = presenter.onlyBookmarked()
show_all.isChecked = !(show_read.isChecked || show_unread.isChecked ||
show_download.isChecked || show_bookmark.isChecked)
var defPref = presenter.globalSort() var defPref = presenter.globalSort()
sort_group.check(if (presenter.manga.sortDescending(defPref)) R.id.sort_newest else sort_group.check(if (presenter.manga.sortDescending(defPref)) R.id.sort_newest else
@ -124,29 +118,5 @@ class ChaptersSortBottomSheet(controller: MangaDetailsController) : BottomSheetD
hide_titles.setOnCheckedChangeListener { _, isChecked -> hide_titles.setOnCheckedChangeListener { _, isChecked ->
presenter.hideTitle(isChecked) presenter.hideTitle(isChecked)
} }
show_all.setOnCheckedChangeListener(::checkedFilter)
show_read.setOnCheckedChangeListener(::checkedFilter)
show_unread.setOnCheckedChangeListener(::checkedFilter)
show_download.setOnCheckedChangeListener(::checkedFilter)
show_bookmark.setOnCheckedChangeListener(::checkedFilter)
}
private fun checkedFilter(checkBox: CompoundButton, isChecked: Boolean) {
if (isChecked) {
if (show_all == checkBox) {
show_read.isChecked = false
show_unread.isChecked = false
show_download.isChecked = false
show_bookmark.isChecked = false
} else {
show_all.isChecked = false
if (show_read == checkBox) show_unread.isChecked = false
else if (show_unread == checkBox) show_read.isChecked = false
}
} else if (!show_read.isChecked && !show_unread.isChecked &&
!show_download.isChecked && !show_bookmark.isChecked) {
show_all.isChecked = true
}
} }
} }

View File

@ -18,6 +18,7 @@ import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
import eu.kanade.tachiyomi.ui.reader.chapter.ReaderChapterItem
import eu.kanade.tachiyomi.ui.reader.loader.ChapterLoader import eu.kanade.tachiyomi.ui.reader.loader.ChapterLoader
import eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader import eu.kanade.tachiyomi.ui.reader.loader.DownloadPageLoader
import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter import eu.kanade.tachiyomi.ui.reader.model.ReaderChapter
@ -229,8 +230,9 @@ class ReaderPresenter(
else -> it.source_order.toFloat() else -> it.source_order.toFloat()
} }
}.map { }.map {
ReaderChapterItem(it, manga, it.id == ReaderChapterItem(
getCurrentChapter()?.chapter?.id ?: chapterId) it, manga, it.id == getCurrentChapter()?.chapter?.id ?: chapterId
)
} }
if (!manga.sortDescending(preferences.chaptersDescAsDefault().getOrDefault())) if (!manga.sortDescending(preferences.chaptersDescAsDefault().getOrDefault()))
list.reversed() list.reversed()
@ -239,6 +241,21 @@ class ReaderPresenter(
return chapterItems return chapterItems
} }
/**
* Removes all filters and requests an UI update.
*/
fun setFilters(read: Boolean, unread: Boolean, downloaded: Boolean, bookmarked: Boolean) {
val manga = manga ?: return
manga.readFilter = when {
read -> Manga.SHOW_READ
unread -> Manga.SHOW_UNREAD
else -> Manga.SHOW_ALL
}
manga.downloadedFilter = if (downloaded) Manga.SHOW_DOWNLOADED else Manga.SHOW_ALL
manga.bookmarkedFilter = if (bookmarked) Manga.SHOW_BOOKMARKED else Manga.SHOW_ALL
db.updateFlags(manga).executeAsBlocking()
}
/** /**
* Initializes this presenter with the given [manga] and [initialChapterId]. This method will * Initializes this presenter with the given [manga] and [initialChapterId]. This method will
* set the chapter loader, view subscriptions and trigger an initial load. * set the chapter loader, view subscriptions and trigger an initial load.

View File

@ -0,0 +1,37 @@
package eu.kanade.tachiyomi.ui.reader.chapter
import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.util.view.expand
import eu.kanade.tachiyomi.util.view.setBottomEdge
import eu.kanade.tachiyomi.util.view.setEdgeToEdge
import kotlinx.android.synthetic.main.chapter_filter_layout.*
import kotlinx.android.synthetic.main.chapter_filter_sheet.*
import kotlinx.android.synthetic.main.reader_chapters_sheet.*
class ChapterFilterSheet(activity: ReaderActivity, manga: Manga) :
BottomSheetDialog(activity, R.style.BottomSheetDialogTheme) {
init {
val view = activity.layoutInflater.inflate(R.layout.chapter_filter_sheet, null)
setContentView(view)
BottomSheetBehavior.from(view.parent as ViewGroup).expand()
setEdgeToEdge(activity, view)
setBottomEdge(show_bookmark, activity)
chapter_filter_layout.setCheckboxes(manga)
setOnDismissListener {
activity.presenter.setFilters(
show_read.isChecked,
show_unread.isChecked,
show_download.isChecked,
show_bookmark.isChecked
)
activity.chapters_bottom_sheet.refreshList()
}
}
}

View File

@ -1,4 +1,4 @@
package eu.kanade.tachiyomi.ui.reader package eu.kanade.tachiyomi.ui.reader.chapter
import android.graphics.Typeface import android.graphics.Typeface
import android.view.View import android.view.View

View File

@ -1,4 +1,4 @@
package eu.kanade.tachiyomi.ui.reader package eu.kanade.tachiyomi.ui.reader.chapter
import android.content.Context import android.content.Context
import android.content.res.ColorStateList import android.content.res.ColorStateList
@ -14,12 +14,16 @@ import com.mikepenz.fastadapter.FastAdapter
import com.mikepenz.fastadapter.adapters.ItemAdapter import com.mikepenz.fastadapter.adapters.ItemAdapter
import com.mikepenz.fastadapter.listeners.ClickEventHook import com.mikepenz.fastadapter.listeners.ClickEventHook
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.reader.ReaderActivity
import eu.kanade.tachiyomi.ui.reader.ReaderPresenter
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.system.getResourceColor
import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.view.collapse import eu.kanade.tachiyomi.util.view.collapse
import eu.kanade.tachiyomi.util.view.expand import eu.kanade.tachiyomi.util.view.expand
import eu.kanade.tachiyomi.util.view.isExpanded import eu.kanade.tachiyomi.util.view.isExpanded
import eu.kanade.tachiyomi.util.view.visInvisIf
import eu.kanade.tachiyomi.util.view.visibleIf
import kotlinx.android.synthetic.main.reader_chapters_sheet.view.* import kotlinx.android.synthetic.main.reader_chapters_sheet.view.*
import kotlin.math.max import kotlin.math.max
import kotlin.math.min import kotlin.math.min
@ -49,6 +53,10 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr
} }
} }
filter_button.setOnClickListener {
ChapterFilterSheet(activity, presenter.manga!!).show()
}
post { post {
chapter_recycler.alpha = if (sheetBehavior.isExpanded()) 1f else 0f chapter_recycler.alpha = if (sheetBehavior.isExpanded()) 1f else 0f
} }
@ -57,6 +65,10 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr
override fun onSlide(bottomSheet: View, progress: Float) { override fun onSlide(bottomSheet: View, progress: Float) {
pill.alpha = (1 - max(0f, progress)) * 0.25f pill.alpha = (1 - max(0f, progress)) * 0.25f
val trueProgress = max(progress, 0f) val trueProgress = max(progress, 0f)
chapters_button.alpha = 1 - trueProgress
filter_button.alpha = trueProgress
filter_button.visibleIf(filter_button.alpha > 0)
chapters_button.visInvisIf(chapters_button.alpha > 0)
backgroundTintList = backgroundTintList =
ColorStateList.valueOf(lerpColor(primary, fullPrimary, trueProgress)) ColorStateList.valueOf(lerpColor(primary, fullPrimary, trueProgress))
chapter_recycler.alpha = trueProgress chapter_recycler.alpha = trueProgress
@ -74,11 +86,17 @@ class ReaderChapterSheet @JvmOverloads constructor(context: Context, attrs: Attr
adapter?.getPosition(presenter.getCurrentChapter()?.chapter?.id ?: 0L) ?: 0, adapter?.getPosition(presenter.getCurrentChapter()?.chapter?.id ?: 0L) ?: 0,
chapter_recycler.height / 2 - 30.dpToPx chapter_recycler.height / 2 - 30.dpToPx
) )
chapters_button.alpha = 1f
filter_button.alpha = 0f
} }
if (state == BottomSheetBehavior.STATE_EXPANDED) { if (state == BottomSheetBehavior.STATE_EXPANDED) {
chapter_recycler.alpha = 1f chapter_recycler.alpha = 1f
chapters_button.alpha = 0f
filter_button.alpha = 1f
if (activity.sheetManageNavColor) activity.window.navigationBarColor = primary if (activity.sheetManageNavColor) activity.window.navigationBarColor = primary
} }
filter_button.visibleIf(state != BottomSheetBehavior.STATE_COLLAPSED)
chapters_button.visInvisIf(state != BottomSheetBehavior.STATE_EXPANDED)
} }
}) })

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.google.android.material.textview.MaterialTextView
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:paddingStart="16dp"
android:paddingEnd="12dp"
android:text="@string/filter" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_all" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_read_chapters" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_unread"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_unread_chapters" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_download"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_downloaded_chapters" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_bookmark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_bookmarked_chapters" />
</LinearLayout>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bottom_sheet_rounded_background">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<eu.kanade.tachiyomi.ui.manga.chapter.ChapterFilterLayout
android:id="@+id/chapter_filter_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.core.widget.NestedScrollView>
</FrameLayout>

View File

@ -3,8 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/display_bottom_sheet" android:id="@+id/display_bottom_sheet"
android:layout_width="match_parent" android:layout_width="match_parent"
android:background="@drawable/bottom_sheet_rounded_background" android:layout_height="wrap_content"
android:layout_height="wrap_content"> android:background="@drawable/bottom_sheet_rounded_background">
<androidx.core.widget.NestedScrollView <androidx.core.widget.NestedScrollView
android:id="@+id/settings_scroll_view" android:id="@+id/settings_scroll_view"
@ -23,8 +23,8 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:orientation="horizontal" android:layout_height="wrap_content"
android:layout_height="wrap_content"> android:orientation="horizontal">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
style="@style/TextAppearance.MaterialComponents.Headline6" style="@style/TextAppearance.MaterialComponents.Headline6"
@ -66,54 +66,10 @@
android:text="@string/oldest_first" /> android:text="@string/oldest_first" />
</RadioGroup> </RadioGroup>
<com.google.android.material.textview.MaterialTextView <eu.kanade.tachiyomi.ui.manga.chapter.ChapterFilterLayout
style="@style/TextAppearance.MaterialComponents.Headline6" android:id="@+id/chapter_filter_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content" />
android:layout_marginTop="12dp"
android:paddingStart="16dp"
android:paddingEnd="12dp"
android:text="@string/filter" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_all" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_read_chapters" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_unread"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_unread_chapters" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_download"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_downloaded_chapters" />
<com.google.android.material.checkbox.MaterialCheckBox
android:id="@+id/show_bookmark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:text="@string/show_bookmarked_chapters" />
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
style="@style/TextAppearance.MaterialComponents.Headline6" style="@style/TextAppearance.MaterialComponents.Headline6"
@ -160,12 +116,12 @@
android:id="@+id/pill" android:id="@+id/pill"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center|top"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:alpha="0.25" android:alpha="0.25"
android:contentDescription="@string/drag_handle" android:contentDescription="@string/drag_handle"
android:src="@drawable/draggable_pill" android:src="@drawable/draggable_pill"
android:tint="?android:attr/textColorPrimary" android:tint="?android:attr/textColorPrimary" />
android:layout_gravity="center|top"/>
<ImageView <ImageView
android:id="@+id/close_button" android:id="@+id/close_button"

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<eu.kanade.tachiyomi.ui.reader.ReaderChapterSheet xmlns:android="http://schemas.android.com/apk/res/android" <eu.kanade.tachiyomi.ui.reader.chapter.ReaderChapterSheet xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/chapters_bottom_sheet" android:id="@+id/chapters_bottom_sheet"
@ -14,7 +14,7 @@
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/topbar_layout" android:id="@+id/topbar_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="?attr/actionBarSize"
android:clickable="true" android:clickable="true"
android:focusable="true"> android:focusable="true">
@ -31,47 +31,55 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<LinearLayout <ImageButton
android:id="@+id/seekbar_layout" android:id="@+id/chapters_button"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="?attr/actionBarSize" android:layout_height="wrap_content"
android:layout_gravity="top" android:background="?selectableItemBackgroundBorderless"
android:orientation="horizontal" android:contentDescription="@string/next"
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
android:tint="?actionBarTintColor"
android:tooltipText="@string/view_chapters"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_format_list_numbered_24dp" />
<ImageButton
android:id="@+id/filter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/next"
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
android:tint="?actionBarTintColor"
android:tooltipText="@string/filter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:alpha="0.0"
app:srcCompat="@drawable/ic_filter_list_24dp" />
<eu.kanade.tachiyomi.ui.reader.ReaderSeekBar
android:id="@+id/page_seekbar"
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/page_text"
app:layout_constraintStart_toEndOf="@id/chapters_button"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/page_text"
android:layout_width="100dp"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="?actionBarTintColor"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintTop_toTopOf="parent"> tools:text="100 / 105" />
<ImageButton
android:id="@+id/chapters_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/next"
android:padding="@dimen/material_layout_keylines_screen_edge_margin"
android:tint="?actionBarTintColor"
android:tooltipText="@string/view_chapters"
app:srcCompat="@drawable/ic_format_list_numbered_24dp" />
<!--
Wonky way of setting height due to issues with horizontally centering the thumb in Android 5.
See https://stackoverflow.com/questions/15701767/android-thumb-is-not-centered-in-seekbar
-->
<eu.kanade.tachiyomi.ui.reader.ReaderSeekBar
android:id="@+id/page_seekbar"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<TextView
android:id="@+id/page_text"
android:layout_width="100dp"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="?actionBarTintColor"
android:textSize="15sp"
tools:text="100 / 105" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
@ -82,4 +90,4 @@
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:clipToPadding="false" android:clipToPadding="false"
tools:listitem="@layout/reader_chapter_item" /> tools:listitem="@layout/reader_chapter_item" />
</eu.kanade.tachiyomi.ui.reader.ReaderChapterSheet> </eu.kanade.tachiyomi.ui.reader.chapter.ReaderChapterSheet>