Using filled/outlined icons in tab bar + refactoring

This commit is contained in:
Jay 2020-03-15 14:34:28 -07:00
parent e05c374d2c
commit 6ab222bdc8
24 changed files with 222 additions and 233 deletions

View File

@ -121,7 +121,7 @@ class CatalogueController : NucleusController<CataloguePresenter>(),
*/ */
override fun onViewCreated(view: View) { override fun onViewCreated(view: View) {
super.onViewCreated(view) super.onViewCreated(view)
view.applyWindowInsetsForRootController(activity!!.navigationView) view.applyWindowInsetsForRootController(activity!!.bottom_nav)
adapter = CatalogueAdapter(this) adapter = CatalogueAdapter(this)

View File

@ -182,7 +182,6 @@ class LibraryCategoryAdapter(val libraryListener: LibraryListener) :
fun sortCategory(catId: Int, sortBy: Int) fun sortCategory(catId: Int, sortBy: Int)
fun selectAll(position: Int) fun selectAll(position: Int)
fun allSelected(position: Int): Boolean fun allSelected(position: Int): Boolean
fun showCategories(position: Int, view: View)
fun recyclerIsScrolling(): Boolean fun recyclerIsScrolling(): Boolean
} }
} }

View File

@ -398,6 +398,5 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
override fun sortCategory(catId: Int, sortBy: Int) { } override fun sortCategory(catId: Int, sortBy: Int) { }
override fun selectAll(position: Int) { } override fun selectAll(position: Int) { }
override fun allSelected(position: Int): Boolean = false override fun allSelected(position: Int): Boolean = false
override fun showCategories(position: Int, view: View) { }
override fun recyclerIsScrolling() = false override fun recyclerIsScrolling() = false
} }

View File

@ -12,6 +12,7 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
@ -175,7 +176,7 @@ open class LibraryController(
override fun onViewCreated(view: View) { override fun onViewCreated(view: View) {
super.onViewCreated(view) super.onViewCreated(view)
view.applyWindowInsetsForRootController(activity!!.navigationView) view.applyWindowInsetsForRootController(activity!!.bottom_nav)
mangaPerRow = getColumnsPreferenceForCurrentOrientation().getOrDefault() mangaPerRow = getColumnsPreferenceForCurrentOrientation().getOrDefault()
if (!::presenter.isInitialized) if (!::presenter.isInitialized)
presenter = LibraryPresenter(this) presenter = LibraryPresenter(this)
@ -193,7 +194,8 @@ open class LibraryController(
when (it) { when (it) {
FilterBottomSheet.ACTION_REFRESH -> onRefresh() FilterBottomSheet.ACTION_REFRESH -> onRefresh()
FilterBottomSheet.ACTION_FILTER -> onFilterChanged() FilterBottomSheet.ACTION_FILTER -> onFilterChanged()
FilterBottomSheet.ACTION_HIDE_FILTER_TIP -> activity?.toast(R.string.hide_filters_tip) FilterBottomSheet.ACTION_HIDE_FILTER_TIP -> activity?.toast(R.string
.hide_filters_tip, Toast.LENGTH_LONG)
} }
} }

View File

@ -8,13 +8,11 @@ import android.graphics.Rect
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.util.TypedValue import android.util.TypedValue
import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MotionEvent import android.view.MotionEvent
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.PopupMenu
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
@ -38,7 +36,6 @@ import eu.kanade.tachiyomi.ui.main.SpinnerTitleInterface
import eu.kanade.tachiyomi.ui.main.SwipeGestureInterface import eu.kanade.tachiyomi.ui.main.SwipeGestureInterface
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.view.inflate
import eu.kanade.tachiyomi.util.view.scrollViewWith import eu.kanade.tachiyomi.util.view.scrollViewWith
import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.util.view.snack
import eu.kanade.tachiyomi.util.view.updateLayoutParams import eu.kanade.tachiyomi.util.view.updateLayoutParams
@ -47,9 +44,7 @@ import kotlinx.android.synthetic.main.filter_bottom_sheet.*
import kotlinx.android.synthetic.main.library_grid_recycler.* import kotlinx.android.synthetic.main.library_grid_recycler.*
import kotlinx.android.synthetic.main.library_list_controller.* import kotlinx.android.synthetic.main.library_list_controller.*
import kotlinx.android.synthetic.main.main_activity.* import kotlinx.android.synthetic.main.main_activity.*
import kotlinx.android.synthetic.main.spinner_title.view.*
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import timber.log.Timber
import java.util.Locale import java.util.Locale
import kotlin.math.abs import kotlin.math.abs
import kotlin.math.max import kotlin.math.max
@ -73,42 +68,29 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
private var updateScroll = true private var updateScroll = true
private var spinnerAdapter: SpinnerAdapter? = null
private var lastItemPosition:Int? = null private var lastItemPosition:Int? = null
private var lastItem:IFlexible<*>? = null private var lastItem:IFlexible<*>? = null
private lateinit var customTitleSpinner: ViewGroup
private lateinit var titlePopupMenu:PopupMenu
private var switchingCategories = false private var switchingCategories = false
var startPosX:Float? = null private var startPosX:Float? = null
var startPosY:Float? = null private var startPosY:Float? = null
var moved = false private var moved = false
var lockedRecycler = false private var lockedRecycler = false
var lockedY = false private var lockedY = false
var nextCategory:Int? = null private var nextCategory:Int? = null
var ogCategory:Int? = null private var ogCategory:Int? = null
var prevCategory:Int? = null private var prevCategory:Int? = null
private val swipeDistance = 300f private val swipeDistance = 300f
var flinging = false private var flinging = false
var isDragging = false private var isDragging = false
/**
* Recycler view of the list of manga.
*/
// private lateinit var recycler: RecyclerView
override fun contentView():View = recycler_layout override fun contentView():View = recycler_layout
override fun getTitle(): String? { override fun getTitle(): String? {
return if (::customTitleSpinner.isInitialized) customTitleSpinner.category_title.text.toString() return if (view != null && presenter.categories.size > 1) presenter.categories.find {
it.order == activeCategory }?.name ?: super.getTitle()
else super.getTitle() else super.getTitle()
// when {
// spinnerAdapter?.array?.size ?: 0 > 1 -> null
// spinnerAdapter?.array?.size == 1 -> return spinnerAdapter?.array?.firstOrNull()
// else -> return super.getTitle()
// }
} }
private var scrollListener = object : RecyclerView.OnScrollListener () { private var scrollListener = object : RecyclerView.OnScrollListener () {
@ -118,12 +100,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
if (order != null && order != activeCategory) { if (order != null && order != activeCategory) {
preferences.lastUsedCategory().set(order) preferences.lastUsedCategory().set(order)
activeCategory = order activeCategory = order
val category = presenter.categories.find { it.order == order } setTitle()
customTitleSpinner.category_title.text = category?.name ?: ""
val isCurrentController = router?.backstack?.lastOrNull()?.controller() ==
this@LibraryListController
if (isCurrentController) setTitle()
} }
} }
} }
@ -151,34 +128,32 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
} }
val sheetRect = Rect() val sheetRect = Rect()
val recyclerRect = Rect() val recyclerRect = Rect()
val appBarRect = Rect()
bottom_sheet.getGlobalVisibleRect(sheetRect) bottom_sheet.getGlobalVisibleRect(sheetRect)
view?.getGlobalVisibleRect(recyclerRect) view?.getGlobalVisibleRect(recyclerRect)
activity?.appbar?.getGlobalVisibleRect(appBarRect)
if (startPosX == null) { if (startPosX == null) {
startPosX = event.rawX startPosX = event.rawX
startPosY = event.rawY startPosY = event.rawY
val position = (recycler.layoutManager as LinearLayoutManager) val position =
.findFirstVisibleItemPosition() (recycler.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
val order = getCategoryOrder() val order = activeCategory
if (order != null) { ogCategory = order
ogCategory = order var newOffsetN = order + 1
var newOffsetN = order + 1 while (adapter.indexOf(newOffsetN) == -1 && presenter.categories.any { it.order == newOffsetN }) {
while (adapter.indexOf(newOffsetN) == -1 && presenter.categories.any { it.order == newOffsetN }) { newOffsetN += 1
newOffsetN += 1 }
} if (adapter.indexOf(newOffsetN) != -1) nextCategory = newOffsetN
if (adapter.indexOf(newOffsetN) != -1)
nextCategory = newOffsetN
if (position == 0) prevCategory = null if (position == 0) prevCategory = null
else { else {
var newOffsetP = order - 1 var newOffsetP = order - 1
while (adapter.indexOf(newOffsetP) == -1 && presenter.categories.any { it.order == newOffsetP }) { while (adapter.indexOf(newOffsetP) == -1 && presenter.categories.any { it.order == newOffsetP }) {
newOffsetP -= 1 newOffsetP -= 1
}
if (adapter.indexOf(newOffsetP) != -1)
prevCategory = newOffsetP
} }
if (adapter.indexOf(newOffsetP) != -1) prevCategory = newOffsetP
} }
return return
} }
@ -193,7 +168,8 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
} }
if (startPosX != null && startPosY != null && if (startPosX != null && startPosY != null &&
(sheetRect.contains(startPosX!!.toInt(), startPosY!!.toInt()) || (sheetRect.contains(startPosX!!.toInt(), startPosY!!.toInt()) ||
!recyclerRect.contains(startPosX!!.toInt(), startPosY!!.toInt()))) { !recyclerRect.contains(startPosX!!.toInt(), startPosY!!.toInt())
|| appBarRect.contains(startPosX!!.toInt(), startPosY!!.toInt()))) {
return return
} }
if (event.actionMasked != MotionEvent.ACTION_UP && startPosX != null) { if (event.actionMasked != MotionEvent.ACTION_UP && startPosX != null) {
@ -330,21 +306,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
val tv = TypedValue() val tv = TypedValue()
activity!!.theme.resolveAttribute(R.attr.actionBarTintColor, tv, true) activity!!.theme.resolveAttribute(R.attr.actionBarTintColor, tv, true)
customTitleSpinner = library_layout.inflate(R.layout.spinner_title) as ViewGroup
spinnerAdapter = SpinnerAdapter(
view.context,
R.layout.library_spinner_textview,
arrayOf(resources!!.getString(R.string.label_library))
)
customTitleSpinner.category_title.text = view.resources.getString(R.string.label_library)
titlePopupMenu = PopupMenu(view.context, customTitleSpinner, Gravity.END or Gravity.CENTER)
customTitleSpinner.setOnTouchListener(titlePopupMenu.dragToOpenListener)
titlePopupMenu.setOnMenuItemClickListener { item ->
scrollToHeader(item.itemId)
true
}
scrollViewWith(recycler) { insets -> scrollViewWith(recycler) { insets ->
fast_scroller.updateLayoutParams<CoordinatorLayout.LayoutParams> { fast_scroller.updateLayoutParams<CoordinatorLayout.LayoutParams> {
topMargin = insets.systemWindowInsetTop topMargin = insets.systemWindowInsetTop
@ -396,19 +357,11 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
adapter.setItems(mangaMap) adapter.setItems(mangaMap)
val categoryNames = presenter.categories.map { it.name }.toTypedArray() val categoryNames = presenter.categories.map { it.name }.toTypedArray()
spinnerAdapter = SpinnerAdapter(recyclerLayout.context, R.layout.library_spinner_textview,
if (categoryNames.isNotEmpty()) categoryNames
else arrayOf(recyclerLayout.context.getString(R.string.label_library))
)
val isCurrentController = router?.backstack?.lastOrNull()?.controller() == val isCurrentController = router?.backstack?.lastOrNull()?.controller() ==
this this
/*customTitleSpinner.category_title.text = setTitle()
presenter.categories[clamp(activeCategory,
0,
presenter.categories.size - 1)].name
if (isCurrentController) setTitle()*/
updateScroll = false updateScroll = false
if (!freshStart) { if (!freshStart) {
justStarted = false justStarted = false
@ -432,9 +385,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
null null
} }
titlePopupMenu.menu.clear()
presenter.categories.forEach { category -> presenter.categories.forEach { category ->
titlePopupMenu.menu.add(0, category.order, max(0, category.order), category.name)
popupMenu?.menu?.add(0, category.order, max(0, category.order), category.name) popupMenu?.menu?.add(0, category.order, max(0, category.order), category.name)
} }
@ -442,10 +393,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
scrollToHeader(item.itemId) scrollToHeader(item.itemId)
true true
} }
customTitleSpinner.setOnClickListener {
titlePopupMenu.show()
}
} }
private fun scrollToHeader(pos: Int) { private fun scrollToHeader(pos: Int) {
@ -453,14 +400,12 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
switchingCategories = true switchingCategories = true
if (headerPosition > -1) { if (headerPosition > -1) {
val appbar = activity?.appbar val appbar = activity?.appbar
//if (headerPosition == 0)
//activity?.appbar?.y = 0f
recycler.suppressLayout(true) recycler.suppressLayout(true)
val appbarOffset = val appbarOffset =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (appbar?.y ?: 0f > -20) 0 else if (appbar?.y ?: 0f > -20) 0 else
(appbar?.y?.plus(view?.rootWindowInsets?.systemWindowInsetTop ?: 0) (appbar?.y?.plus(view?.rootWindowInsets?.systemWindowInsetTop ?: 0)
?: 0f).roundToInt() + 10.dpToPx ?: 0f).roundToInt() + 30.dpToPx
} }
else { else {
0 0
@ -470,11 +415,10 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
+ appbarOffset + appbarOffset
) )
val headerItem = adapter.getItem(headerPosition) as? LibraryHeaderItem /*val headerItem = adapter.getItem(headerPosition) as? LibraryHeaderItem
if (headerItem != null) { if (headerItem != null) {
customTitleSpinner.category_title.text = headerItem.category.name
setTitle() setTitle()
} }*/
recycler.suppressLayout(false) recycler.suppressLayout(false)
} }
launchUI { launchUI {
@ -573,11 +517,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
} }
override fun canDrag(): Boolean { override fun canDrag(): Boolean {
val filterOff = preferences.filterCompleted().getOrDefault() + val filterOff = !bottom_sheet.hasActiveFilters() &&
preferences.filterTracked().getOrDefault() +
preferences.filterUnread().getOrDefault() +
preferences.filterMangaType().getOrDefault() +
preferences.filterCompleted().getOrDefault() == 0 &&
!preferences.hideCategories().getOrDefault() !preferences.hideCategories().getOrDefault()
return filterOff && adapter.mode != SelectableAdapter.Mode.MULTI return filterOff && adapter.mode != SelectableAdapter.Mode.MULTI
} }
@ -775,28 +715,10 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
return items.all { adapter.isSelected(it) } return items.all { adapter.isSelected(it) }
} }
override fun showCategories(position: Int, view: View) {
if (presenter.categories.size <= 1) return
val header = adapter.getSectionHeader(position) as? LibraryHeaderItem ?: return
if (presenter.categories.size <= 1) return
val category = header.category
val popupMenu = PopupMenu(view.context, view)
presenter.categories.forEach {
if (it.id != category.id)
popupMenu.menu.add(0, it.order, it.order, it.name)
}
popupMenu.setOnMenuItemClickListener {
scrollToHeader(it.itemId)
true
}
popupMenu.show()
}
override fun onSwipeBottom(x: Float, y: Float) { } override fun onSwipeBottom(x: Float, y: Float) { }
override fun onSwipeTop(x: Float, y: Float) { override fun onSwipeTop(x: Float, y: Float) {
val sheetRect = Rect() val sheetRect = Rect()
activity!!.navigationView.getGlobalVisibleRect(sheetRect) activity!!.bottom_nav.getGlobalVisibleRect(sheetRect)
if (sheetRect.contains(x.toInt(), y.toInt())) { if (sheetRect.contains(x.toInt(), y.toInt())) {
if (bottom_sheet.sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED) if (bottom_sheet.sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED)
toggleFilters() toggleFilters()
@ -840,9 +762,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle),
} }
override fun onAnimationCancel(animation: Animator?) {} override fun onAnimationCancel(animation: Animator?) {}
override fun onAnimationRepeat(animation: Animator?) {} override fun onAnimationRepeat(animation: Animator?) {}
override fun onAnimationStart(animation: Animator?) {} override fun onAnimationStart(animation: Animator?) {}
}) })
} }

View File

@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.library.filter
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Parcelable
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -14,7 +15,6 @@ import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.gone
import eu.kanade.tachiyomi.util.view.inflate import eu.kanade.tachiyomi.util.view.inflate
@ -70,25 +70,18 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
var onGroupClicked: (Int) -> Unit = { _ -> } var onGroupClicked: (Int) -> Unit = { _ -> }
var pager:View? = null var pager:View? = null
var phoneLandscape = false
fun onCreate(pagerView:View) { fun onCreate(pagerView:View) {
clearButton = clear_button clearButton = clear_button
filter_layout.removeView(clearButton) filter_layout.removeView(clearButton)
sheetBehavior = BottomSheetBehavior.from(this) sheetBehavior = BottomSheetBehavior.from(this)
val phoneLandscape = (isLandscape() && !isTablet()) phoneLandscape = (isLandscape() && !isTablet())
sheetBehavior?.isHideable = true sheetBehavior?.isHideable = true
sheetBehavior?.skipCollapsed = phoneLandscape sheetBehavior?.skipCollapsed = phoneLandscape
top_bar.setOnClickListener {
if (sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED) {
sheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED
} else {
sheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED
}
}
pager = pagerView pager = pagerView
val shadow2:View = (pagerView.parent as ViewGroup).findViewById(R.id.shadow2) val shadow2:View = (pagerView.parent as ViewGroup).findViewById(R.id.shadow2)
val shadow:View = (pagerView.parent as ViewGroup).findViewById(R.id.shadow) val shadow:View = (pagerView.parent as ViewGroup).findViewById(R.id.shadow)
// val snackbarLayout:View = (pagerView.parent as ViewGroup).findViewById(R.id.snackbar_layout)
if (phoneLandscape) { if (phoneLandscape) {
sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN
} }
@ -96,47 +89,24 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
override fun onSlide(bottomSheet: View, progress: Float) { override fun onSlide(bottomSheet: View, progress: Float) {
top_bar.alpha = 1 - max(0f, progress) top_bar.alpha = 1 - max(0f, progress)
shadow2.alpha = (1 - max(0f, progress)) * 0.25f shadow2.alpha = (1 - max(0f, progress)) * 0.25f
if (phoneLandscape) if (phoneLandscape) shadow.alpha = progress
shadow.alpha = progress else shadow.alpha = 1 + min(0f, progress)
else updateRootPadding(progress)
shadow.alpha = 1 + min(0f, progress)
//if (progress >= 0)
updateRootPadding(progress)
} }
override fun onStateChanged(p0: View, state: Int) { override fun onStateChanged(p0: View, state: Int) {
if (state == BottomSheetBehavior.STATE_COLLAPSED) { stateChanged(state)
if (phoneLandscape)
reSortViews()
if (phoneLandscape)
shadow.alpha = 0f
else
shadow.alpha = 1f
pager?.updatePaddingRelative(bottom = sheetBehavior?.peekHeight ?: 0)
}
if (state == BottomSheetBehavior.STATE_EXPANDED) {
top_bar.alpha = 0f
if (phoneLandscape)
shadow.alpha = 1f
}
if (state == BottomSheetBehavior.STATE_HIDDEN) {
reSortViews()
shadow.alpha = 0f
pager?.updatePaddingRelative(bottom = 0)
// snackbarLayout.updatePaddingRelative(bottom = 0)
}
//top_bar.isClickable = state == BottomSheetBehavior.STATE_COLLAPSED
//top_bar.isFocusable = state == BottomSheetBehavior.STATE_COLLAPSED
} }
}) })
if (preferences.hideFiltersAtStart().getOrDefault()) { if (preferences.hideFiltersAtStart().getOrDefault()) {
sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN
shadow.alpha = 0f
}
else {
pager?.updatePaddingRelative(bottom = sheetBehavior?.peekHeight ?: 0)
// snackbarLayout.updatePaddingRelative(bottom = sheetBehavior?.peekHeight ?: 0)
} }
updateRootPadding(when (sheetBehavior?.state) {
BottomSheetBehavior.STATE_HIDDEN -> -1f
BottomSheetBehavior.STATE_EXPANDED -> 1f
else -> 0f
})
shadow.alpha = if (sheetBehavior?.state == BottomSheetBehavior.STATE_HIDDEN) 0f else 1f
if (phoneLandscape && shadow2.visibility != View.GONE) { if (phoneLandscape && shadow2.visibility != View.GONE) {
shadow2.gone() shadow2.gone()
} }
@ -150,6 +120,30 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
clearButton.setOnClickListener { clearFilters() } clearButton.setOnClickListener { clearFilters() }
} }
private fun stateChanged(state: Int) {
val shadow = ((pager?.parent as? ViewGroup)?.findViewById(R.id.shadow) as? View)
if (state == BottomSheetBehavior.STATE_COLLAPSED) {
shadow?.alpha = 1f
pager?.updatePaddingRelative(bottom = sheetBehavior?.peekHeight ?: 0)
}
if (state == BottomSheetBehavior.STATE_EXPANDED) {
top_bar.alpha = 0f
if (phoneLandscape)
shadow?.alpha = 1f
}
if (state == BottomSheetBehavior.STATE_HIDDEN) {
reSortViews()
shadow?.alpha = 0f
pager?.updatePaddingRelative(bottom = 0)
}
}
override fun onRestoreInstanceState(state: Parcelable?) {
super.onRestoreInstanceState(state)
val sheetBehavior = BottomSheetBehavior.from(this)
stateChanged(sheetBehavior.state)
}
private fun isLandscape(): Boolean { private fun isLandscape(): Boolean {
return context.resources.configuration?.orientation == Configuration.ORIENTATION_LANDSCAPE return context.resources.configuration?.orientation == Configuration.ORIENTATION_LANDSCAPE
} }
@ -176,11 +170,6 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
fun hasActiveFilters() = filterItems.any { it.isActivated } fun hasActiveFilters() = filterItems.any { it.isActivated }
private fun createTags() { private fun createTags() {
//categories = inflate(R.layout.filter_buttons) as FilterTagGroup
// categories.setup(this, R.string.action_hide_categories)
// list.add(categories)
hide_categories.isChecked = preferences.hideCategories().getOrDefault() hide_categories.isChecked = preferences.hideCategories().getOrDefault()
hide_categories.setOnCheckedChangeListener { _, isChecked -> hide_categories.setOnCheckedChangeListener { _, isChecked ->
preferences.hideCategories().set(isChecked) preferences.hideCategories().set(isChecked)
@ -212,11 +201,12 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
db.getCategories().executeAsBlocking() db.getCategories().executeAsBlocking()
.isNotEmpty() .isNotEmpty()
} }
val librryManga = db.getLibraryMangas().executeAsBlocking() val libraryManga = db.getLibraryMangas().executeAsBlocking()
val types = mutableListOf<Int>() val types = mutableListOf<Int>()
if (librryManga.any { it.mangaType() == Manga.TYPE_MANHWA }) types.add(R.string.manhwa) if (libraryManga.any { it.mangaType() == Manga.TYPE_MANHWA }) types.add(R.string.manhwa)
if (librryManga.any { it.mangaType() == Manga.TYPE_MANHUA }) types.add(R.string.manhua) if (libraryManga.any { it.mangaType() == Manga.TYPE_MANHUA }) types.add(R.string.manhua)
if (librryManga.any { it.mangaType() == Manga.TYPE_COMIC }) types.add(R.string.comic) if (libraryManga.any { it.mangaType() == Manga.TYPE_COMIC }) types.add(R.string.comic)
val hasTracking = Injekt.get<TrackManager>().hasLoggedServices()
if (types.isNotEmpty()) { if (types.isNotEmpty()) {
launchUI { launchUI {
val mangaType = inflate(R.layout.filter_buttons) as FilterTagGroup val mangaType = inflate(R.layout.filter_buttons) as FilterTagGroup
@ -230,12 +220,12 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
filter_layout.addView(mangaType) filter_layout.addView(mangaType)
filterItems.remove(tracked) filterItems.remove(tracked)
filterItems.add(mangaType) filterItems.add(mangaType)
filterItems.add(tracked) if (hasTracking)
filterItems.add(tracked)
} }
} }
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
hide_categories.visibleIf(showCategoriesCheckBox) hide_categories.visibleIf(showCategoriesCheckBox)
// categories.setState(preferences.hideCategories().getOrDefault())
downloaded.setState(preferences.filterDownloaded()) downloaded.setState(preferences.filterDownloaded())
completed.setState(preferences.filterCompleted()) completed.setState(preferences.filterCompleted())
unread.setState(preferences.filterUnread()) unread.setState(preferences.filterUnread())
@ -305,10 +295,6 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
} }
private fun clearFilters() { private fun clearFilters() {
val action = if (preferences.hideCategories().getOrDefault()) ACTION_REFRESH
else ACTION_FILTER
preferences.hideCategories().set(false)
preferences.filterDownloaded().set(0) preferences.filterDownloaded().set(0)
preferences.filterUnread().set(0) preferences.filterUnread().set(0)
preferences.filterCompleted().set(0) preferences.filterCompleted().set(0)
@ -322,8 +308,10 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
filterItems.forEach { filterItems.forEach {
it.reset() it.reset()
} }
if (trackers != null)
filterItems.remove(trackers!!)
reSortViews() reSortViews()
onGroupClicked(action) onGroupClicked(ACTION_FILTER)
} }
private fun reSortViews() { private fun reSortViews() {
@ -339,10 +327,6 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
filter_scroll.scrollTo(0, 0) filter_scroll.scrollTo(0, 0)
} }
fun adjustFiltersMargin(downloading: Boolean) {
filter_scroll.updatePaddingRelative(end = (if (downloading) 80 else 20).dpToPx)
}
companion object { companion object {
const val ACTION_REFRESH = 0 const val ACTION_REFRESH = 0
const val ACTION_FILTER = 1 const val ACTION_FILTER = 1

View File

@ -139,13 +139,13 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
// tabAnimator = TabsAnimator(tabs) // tabAnimator = TabsAnimator(tabs)
var continueSwitchingTabs = false var continueSwitchingTabs = false
navigationView.setOnNavigationItemSelectedListener { item -> bottom_nav.setOnNavigationItemSelectedListener { item ->
val id = item.itemId val id = item.itemId
val currentController = router.backstack.lastOrNull()?.controller() val currentController = router.backstack.lastOrNull()?.controller()
if (!continueSwitchingTabs && currentController is BottomNavBarInterface) { if (!continueSwitchingTabs && currentController is BottomNavBarInterface) {
if (!currentController.canChangeTabs { if (!currentController.canChangeTabs {
continueSwitchingTabs = true continueSwitchingTabs = true
this@MainActivity.navigationView.selectedItemId = id this@MainActivity.bottom_nav.selectedItemId = id
}) return@setOnNavigationItemSelectedListener false }) return@setOnNavigationItemSelectedListener false
} }
continueSwitchingTabs = false continueSwitchingTabs = false
@ -175,7 +175,6 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
if (!showRecents) setRoot(RecentChaptersController(), id) if (!showRecents) setRoot(RecentChaptersController(), id)
else setRoot(RecentlyReadController(), id) else setRoot(RecentlyReadController(), id)
preferences.showRecentUpdates().set(!showRecents) preferences.showRecentUpdates().set(!showRecents)
updateRecentsIcon()
} }
R.id.nav_library -> { R.id.nav_library -> {
val controller = val controller =
@ -190,6 +189,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
} }
} }
} }
updateIcons(id)
true true
} }
val container: ViewGroup = findViewById(R.id.controller_container) val container: ViewGroup = findViewById(R.id.controller_container)
@ -206,19 +206,18 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
/*dwawerContainer.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or /*dwawerContainer.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION*/ View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION*/
updateRecentsIcon()
content.viewTreeObserver.addOnGlobalLayoutListener { content.viewTreeObserver.addOnGlobalLayoutListener {
val heightDiff: Int = content.rootView.height - content.height val heightDiff: Int = content.rootView.height - content.height
if (heightDiff > 200 && if (heightDiff > 200 &&
window.attributes.softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) { window.attributes.softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) {
//keyboard is open, hide layout //keyboard is open, hide layout
navigationView.gone() bottom_nav.gone()
} else if (navigationView.visibility == View.GONE } else if (bottom_nav.visibility == View.GONE
&& window.attributes.softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) { && window.attributes.softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) {
//keyboard is hidden, show layout //keyboard is hidden, show layout
// use coroutine to delay so the bottom bar doesn't flash on top of the keyboard // use coroutine to delay so the bottom bar doesn't flash on top of the keyboard
launchUI { launchUI {
navigationView.visible() bottom_nav.visible()
} }
} }
} }
@ -272,7 +271,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
appbar.updatePadding( appbar.updatePadding(
top = insets.systemWindowInsetTop top = insets.systemWindowInsetTop
) )
navigationView.updatePadding(bottom = insets.systemWindowInsetBottom) bottom_nav.updatePadding(bottom = insets.systemWindowInsetBottom)
/*controller_container.updateLayoutParams<ConstraintLayout.LayoutParams> { /*controller_container.updateLayoutParams<ConstraintLayout.LayoutParams> {
val attrsArray = intArrayOf(android.R.attr.actionBarSize) val attrsArray = intArrayOf(android.R.attr.actionBarSize)
@ -308,7 +307,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
if (!router.hasRootController()) { if (!router.hasRootController()) {
// Set start screen // Set start screen
if (!handleIntentAction(intent)) { if (!handleIntentAction(intent)) {
navigationView.selectedItemId = R.id.nav_library bottom_nav.selectedItemId = R.id.nav_library
} }
} }
@ -320,8 +319,8 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
else onBackPressed() else onBackPressed()
} }
navigationView.visibility = if (router.backstackSize > 1) View.GONE else View.VISIBLE bottom_nav.visibility = if (router.backstackSize > 1) View.GONE else View.VISIBLE
navigationView.alpha = if (router.backstackSize > 1) 0f else 1f bottom_nav.alpha = if (router.backstackSize > 1) 0f else 1f
router.addChangeListener(object : ControllerChangeHandler.ControllerChangeListener { router.addChangeListener(object : ControllerChangeHandler.ControllerChangeListener {
override fun onChangeStarted(to: Controller?, from: Controller?, isPush: Boolean, override fun onChangeStarted(to: Controller?, from: Controller?, isPush: Boolean,
container: ViewGroup, handler: ControllerChangeHandler) { container: ViewGroup, handler: ControllerChangeHandler) {
@ -369,11 +368,31 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
setExtensionsBadge() setExtensionsBadge()
} }
fun updateRecentsIcon() { override fun onRestoreInstanceState(savedInstanceState: Bundle) {
navigationView.menu.findItem(R.id.nav_recents).icon = super.onRestoreInstanceState(savedInstanceState)
AppCompatResources.getDrawable(this, updateIcons(bottom_nav.selectedItemId)
if (preferences.showRecentUpdates().getOrDefault()) R.drawable.ic_update_black_24dp }
else R.drawable.ic_history_black_24dp)
fun updateIcons(id: Int) {
bottom_nav.menu.findItem(R.id.nav_library).icon = AppCompatResources.getDrawable(
this, if (id == R.id.nav_library) R.drawable.library_24dp
else R.drawable.library_outline_24dp
)
bottom_nav.menu.findItem(R.id.nav_recents).icon = AppCompatResources.getDrawable(
this, if (id == R.id.nav_recents) {
if (preferences.showRecentUpdates().getOrDefault()) R.drawable.recent_updates_24dp
else R.drawable.recent_read_24dp
} else {
if (preferences.showRecentUpdates()
.getOrDefault()
) R.drawable.recent_updates_outline_24dp
else R.drawable.recent_read_outline_24dp
}
)
bottom_nav.menu.findItem(R.id.nav_catalogues).icon = AppCompatResources.getDrawable(
this, if (id == R.id.nav_catalogues) R.drawable.browse_24dp
else R.drawable.browse_outline_24dp
)
} }
override fun startSupportActionMode(callback: androidx.appcompat.view.ActionMode.Callback): androidx.appcompat.view.ActionMode? { override fun startSupportActionMode(callback: androidx.appcompat.view.ActionMode.Callback): androidx.appcompat.view.ActionMode? {
@ -400,13 +419,13 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
private fun setExtensionsBadge() { private fun setExtensionsBadge() {
val updates = preferences.extensionUpdatesCount().getOrDefault() val updates = preferences.extensionUpdatesCount().getOrDefault()
if (updates > 0) { if (updates > 0) {
val badge = navigationView.getOrCreateBadge(R.id.nav_catalogues) val badge = bottom_nav.getOrCreateBadge(R.id.nav_catalogues)
badge.number = updates badge.number = updates
badge.backgroundColor = getResourceColor(R.attr.badgeColor) badge.backgroundColor = getResourceColor(R.attr.badgeColor)
badge.badgeTextColor = Color.WHITE badge.badgeTextColor = Color.WHITE
} }
else { else {
navigationView.removeBadge(R.id.nav_catalogues) bottom_nav.removeBadge(R.id.nav_catalogues)
} }
} }
@ -443,17 +462,16 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
applicationContext, notificationId, intent.getIntExtra("groupId", 0) applicationContext, notificationId, intent.getIntExtra("groupId", 0)
) )
when (intent.action) { when (intent.action) {
SHORTCUT_LIBRARY -> navigationView.selectedItemId = R.id.nav_library SHORTCUT_LIBRARY -> bottom_nav.selectedItemId = R.id.nav_library
SHORTCUT_RECENTLY_UPDATED, SHORTCUT_RECENTLY_READ -> { SHORTCUT_RECENTLY_UPDATED, SHORTCUT_RECENTLY_READ -> {
preferences.showRecentUpdates().set(intent.action == SHORTCUT_RECENTLY_UPDATED) preferences.showRecentUpdates().set(intent.action == SHORTCUT_RECENTLY_UPDATED)
navigationView.selectedItemId = R.id.nav_recents bottom_nav.selectedItemId = R.id.nav_recents
updateRecentsIcon()
} }
SHORTCUT_CATALOGUES -> navigationView.selectedItemId = R.id.nav_catalogues SHORTCUT_CATALOGUES -> bottom_nav.selectedItemId = R.id.nav_catalogues
SHORTCUT_EXTENSIONS -> { SHORTCUT_EXTENSIONS -> {
if (router.backstack.none { it.controller() is ExtensionController }) { if (router.backstack.none { it.controller() is ExtensionController }) {
if (router.backstack.isEmpty()) { if (router.backstack.isEmpty()) {
navigationView.selectedItemId = R.id.nav_library bottom_nav.selectedItemId = R.id.nav_library
router.pushController( router.pushController(
RouterTransaction.with(ExtensionController()).pushChangeHandler( RouterTransaction.with(ExtensionController()).pushChangeHandler(
SimpleSwapChangeHandler() SimpleSwapChangeHandler()
@ -467,14 +485,14 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
SHORTCUT_MANGA -> { SHORTCUT_MANGA -> {
val extras = intent.extras ?: return false val extras = intent.extras ?: return false
if (router.backstack.isEmpty()) { if (router.backstack.isEmpty()) {
navigationView.selectedItemId = R.id.nav_library bottom_nav.selectedItemId = R.id.nav_library
} }
router.pushController(MangaDetailsController(extras).withFadeTransaction()) router.pushController(MangaDetailsController(extras).withFadeTransaction())
} }
SHORTCUT_DOWNLOADS -> { SHORTCUT_DOWNLOADS -> {
if (router.backstack.none { it.controller() is DownloadController }) { if (router.backstack.none { it.controller() is DownloadController }) {
if (router.backstack.isEmpty()) { if (router.backstack.isEmpty()) {
navigationView.selectedItemId = R.id.nav_library bottom_nav.selectedItemId = R.id.nav_library
router.pushController(RouterTransaction.with(DownloadController()) router.pushController(RouterTransaction.with(DownloadController())
.pushChangeHandler(SimpleSwapChangeHandler()) .pushChangeHandler(SimpleSwapChangeHandler())
.popChangeHandler(FadeChangeHandler())) .popChangeHandler(FadeChangeHandler()))
@ -627,21 +645,21 @@ open class MainActivity : BaseActivity(), DownloadServiceListener {
if (to !is SpinnerTitleInterface) toolbar.removeSpinner() if (to !is SpinnerTitleInterface) toolbar.removeSpinner()
if (to !is DialogController) { if (to !is DialogController) {
navigationView.visibility = if (router.backstackSize == 0 || bottom_nav.visibility = if (router.backstackSize == 0 ||
(router.backstackSize <= 1 && !isPush)) (router.backstackSize <= 1 && !isPush))
View.VISIBLE else navigationView.visibility View.VISIBLE else bottom_nav.visibility
animationSet?.cancel() animationSet?.cancel()
animationSet = AnimatorSet() animationSet = AnimatorSet()
val alphaAnimation = ValueAnimator.ofFloat( val alphaAnimation = ValueAnimator.ofFloat(
navigationView.alpha, bottom_nav.alpha,
if (router.backstackSize > 1) 0f else 1f if (router.backstackSize > 1) 0f else 1f
) )
alphaAnimation.addUpdateListener { valueAnimator -> alphaAnimation.addUpdateListener { valueAnimator ->
navigationView.alpha = valueAnimator.animatedValue as Float bottom_nav.alpha = valueAnimator.animatedValue as Float
} }
alphaAnimation.addListener(object : Animator.AnimatorListener { alphaAnimation.addListener(object : Animator.AnimatorListener {
override fun onAnimationEnd(animation: Animator?) { override fun onAnimationEnd(animation: Animator?) {
navigationView.visibility = if (router.backstackSize > 1) View.GONE else View.VISIBLE bottom_nav.visibility = if (router.backstackSize > 1) View.GONE else View.VISIBLE
} }
override fun onAnimationCancel(animation: Animator?) { } override fun onAnimationCancel(animation: Animator?) { }

View File

@ -54,7 +54,7 @@ class SearchActivity: MainActivity() {
} else { } else {
appbar.enableElevation() appbar.enableElevation()
} }
navigationView.gone() bottom_nav.gone()
} }
override fun handleIntentAction(intent: Intent): Boolean { override fun handleIntentAction(intent: Intent): Boolean {

View File

@ -54,7 +54,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
DownloadQueue.DownloadListener, DownloadQueue.DownloadListener,
LibraryServiceListener { LibraryServiceListener {
<<<<<<< Updated upstream
private var scope = CoroutineScope(Job() + Dispatchers.Default) private var scope = CoroutineScope(Job() + Dispatchers.Default)
=======
var scope = CoroutineScope(Job() + Dispatchers.Default)
>>>>>>> Stashed changes
var isLockedFromSearch = false var isLockedFromSearch = false
var hasRequested = false var hasRequested = false
@ -711,7 +715,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
fun trackSearch(query: String, service: TrackService) { fun trackSearch(query: String, service: TrackService) {
scope.launch(Dispatchers.IO) { scope.launch(Dispatchers.IO) {
<<<<<<< Updated upstream
val results = try {service.search(query) } val results = try {service.search(query) }
=======
val results = try {service.search(query).toBlocking().single() }
>>>>>>> Stashed changes
catch (e: Exception) { catch (e: Exception) {
withContext(Dispatchers.Main) { controller.trackSearchError(e) } withContext(Dispatchers.Main) { controller.trackSearchError(e) }
null } null }
@ -726,7 +734,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
item.manga_id = manga.id!! item.manga_id = manga.id!!
scope.launch { scope.launch {
<<<<<<< Updated upstream
val binding = try { service.bind(item) } val binding = try { service.bind(item) }
=======
val binding = try { service.bind(item).toBlocking().single() }
>>>>>>> Stashed changes
catch (e: Exception) { catch (e: Exception) {
trackError(e) trackError(e)
null null
@ -746,7 +758,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController,
private fun updateRemote(track: Track, service: TrackService) { private fun updateRemote(track: Track, service: TrackService) {
scope.launch { scope.launch {
<<<<<<< Updated upstream
val binding = try { service.update(track) } val binding = try { service.update(track) }
=======
val binding = try { service.update(track).toBlocking().single() }
>>>>>>> Stashed changes
catch (e: Exception) { catch (e: Exception) {
trackError(e) trackError(e)
null null

View File

@ -86,7 +86,7 @@ class RecentChaptersController : NucleusController<RecentChaptersPresenter>(),
*/ */
override fun onViewCreated(view: View) { override fun onViewCreated(view: View) {
super.onViewCreated(view) super.onViewCreated(view)
view.applyWindowInsetsForRootController(activity!!.navigationView) view.applyWindowInsetsForRootController(activity!!.bottom_nav)
view.context.notificationManager.cancel(Notifications.ID_NEW_CHAPTERS) view.context.notificationManager.cancel(Notifications.ID_NEW_CHAPTERS)
// Init RecyclerView and adapter // Init RecyclerView and adapter
@ -109,7 +109,7 @@ class RecentChaptersController : NucleusController<RecentChaptersPresenter>(),
LibraryUpdateService.start(view.context) LibraryUpdateService.start(view.context)
view.snack(R.string.updating_library) { view.snack(R.string.updating_library) {
anchorView = (this@RecentChaptersController.activity as? MainActivity) anchorView = (this@RecentChaptersController.activity as? MainActivity)
?.navigationView ?.bottom_nav
} }
} }
// It can be a very long operation, so we disable swipe refresh and show a snackbar. // It can be a very long operation, so we disable swipe refresh and show a snackbar.
@ -385,7 +385,7 @@ class RecentChaptersController : NucleusController<RecentChaptersPresenter>(),
router.setRoot( router.setRoot(
RecentlyReadController().withFadeTransaction().tag(R.id.nav_recents.toString())) RecentlyReadController().withFadeTransaction().tag(R.id.nav_recents.toString()))
Injekt.get<PreferencesHelper>().showRecentUpdates().set(false) Injekt.get<PreferencesHelper>().showRecentUpdates().set(false)
(activity as? MainActivity)?.updateRecentsIcon() (activity as? MainActivity)?.updateIcons(R.id.nav_recents)
} }
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)

View File

@ -84,7 +84,7 @@ class RecentlyReadController(bundle: Bundle? = null) : BaseController(bundle),
*/ */
override fun onViewCreated(view: View) { override fun onViewCreated(view: View) {
super.onViewCreated(view) super.onViewCreated(view)
view.applyWindowInsetsForRootController(activity!!.navigationView) view.applyWindowInsetsForRootController(activity!!.bottom_nav)
// Initialize adapter // Initialize adapter
adapter = RecentlyReadAdapter(this) adapter = RecentlyReadAdapter(this)
recycler.adapter = adapter recycler.adapter = adapter
@ -239,7 +239,7 @@ class RecentlyReadController(bundle: Bundle? = null) : BaseController(bundle),
router.setRoot( router.setRoot(
RecentChaptersController().withFadeTransaction().tag(R.id.nav_recents.toString())) RecentChaptersController().withFadeTransaction().tag(R.id.nav_recents.toString()))
Injekt.get<PreferencesHelper>().showRecentUpdates().set(true) Injekt.get<PreferencesHelper>().showRecentUpdates().set(true)
(activity as? MainActivity)?.updateRecentsIcon() (activity as? MainActivity)?.updateIcons(R.id.nav_recents)
} }
} }
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)

View File

@ -0,0 +1,8 @@
<!-- drawable/compass_outline.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M7,17L10.2,10.2L17,7L13.8,13.8L7,17M12,11.1A0.9,0.9 0 0,0 11.1,12A0.9,0.9 0 0,0 12,12.9A0.9,0.9 0 0,0 12.9,12A0.9,0.9 0 0,0 12,11.1M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM17,4v5l-1,-0.75L15,9L15,4h2zM20,16L8,16L8,4h5v9l3,-2.25L19,13L19,4h1v12z"/>
</vector>

View File

@ -0,0 +1,8 @@
<!-- drawable/clock.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M16.2,16.2L11,13V7H12.5V12.2L17,14.9L16.2,16.2Z" />
</vector>

View File

@ -0,0 +1,8 @@
<!-- drawable/clock_outline.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z" />
</vector>

View File

@ -0,0 +1,8 @@
<!-- drawable/alert_circle.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" />
</vector>

View File

@ -0,0 +1,8 @@
<!-- drawable/alert_circle_outline.xml -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z" />
</vector>

View File

@ -125,13 +125,13 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="8dp" android:layout_marginStart="10dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="10dp"
android:orientation="vertical" android:orientation="vertical"
android:layout_height="30sp"> android:layout_height="30sp">
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/title" android:id="@+id/title"
style="@style/TextAppearance.MaterialComponents.Body1" style="@style/TextAppearance.Regular.Body1.Light"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end" android:ellipsize="end"
@ -143,13 +143,12 @@
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/subtitle" android:id="@+id/subtitle"
style="@style/TextAppearance.MaterialComponents.Body1" style="@style/TextAppearance.Regular.Body1.Secondary"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="-1dp" android:layout_marginTop="-1dp"
android:ellipsize="end" android:ellipsize="end"
android:singleLine="true" android:singleLine="true"
android:textColor="?android:attr/textColorSecondary"
android:textSize="12sp" android:textSize="12sp"
tools:text="Sample artist" /> tools:text="Sample artist" />
</LinearLayout> </LinearLayout>

View File

@ -88,7 +88,7 @@
</eu.kanade.tachiyomi.widget.ElevationAppBarLayout> </eu.kanade.tachiyomi.widget.ElevationAppBarLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigationView" android:id="@+id/bottom_nav"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/colorPrimary" android:background="?attr/colorPrimary"

View File

@ -18,7 +18,7 @@
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/download_text" android:id="@+id/download_text"
style="@style/TextAppearance.MaterialComponents.Caption" style="@style/TextAppearance.Regular.Caption.Light"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/pale_red" android:background="@color/pale_red"
@ -48,7 +48,7 @@
<com.google.android.material.textview.MaterialTextView <com.google.android.material.textview.MaterialTextView
android:id="@+id/unread_text" android:id="@+id/unread_text"
style="@style/TextAppearance.MaterialComponents.Caption" style="@style/TextAppearance.Regular.Caption.Light"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/colorAccent" android:background="@color/colorAccent"

View File

@ -5,15 +5,15 @@
<item <item
android:checked="true" android:checked="true"
android:id="@+id/nav_library" android:id="@+id/nav_library"
android:icon="@drawable/ic_collections_bookmark_white_24dp" android:icon="@drawable/library_outline_24dp"
android:title="@string/label_library" /> android:title="@string/label_library" />
<item <item
android:id="@+id/nav_recents" android:id="@+id/nav_recents"
android:icon="@drawable/ic_update_black_24dp" android:icon="@drawable/recent_updates_outline_24dp"
android:title="@string/short_recents" /> android:title="@string/short_recents" />
<item <item
android:id="@+id/nav_catalogues" android:id="@+id/nav_catalogues"
android:icon="@drawable/ic_explore_black_24dp" android:icon="@drawable/browse_outline_24dp"
android:title="@string/short_catalogues" /> android:title="@string/short_catalogues" />
</group> </group>
</menu> </menu>

View File

@ -17,6 +17,9 @@
<item <item
android:id="@+id/download_next" android:id="@+id/download_next"
android:title="@string/download_first" /> android:title="@string/download_first" />
<item
android:id="@+id/download_next_5"
android:title="@string/download_5" />
<item <item
android:id="@+id/download_custom" android:id="@+id/download_custom"
android:title="@string/download_custom" /> android:title="@string/download_custom" />