diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt index e162ddd127..a8044b8a63 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/CatalogueController.kt @@ -121,7 +121,7 @@ class CatalogueController : NucleusController(), */ override fun onViewCreated(view: View) { super.onViewCreated(view) - view.applyWindowInsetsForRootController(activity!!.navigationView) + view.applyWindowInsetsForRootController(activity!!.bottom_nav) adapter = CatalogueAdapter(this) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt index fca03ba4c0..0e923b793b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt @@ -182,7 +182,6 @@ class LibraryCategoryAdapter(val libraryListener: LibraryListener) : fun sortCategory(catId: Int, sortBy: Int) fun selectAll(position: Int) fun allSelected(position: Int): Boolean - fun showCategories(position: Int, view: View) fun recyclerIsScrolling(): Boolean } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt index 114cf40908..afd43acc0e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt @@ -398,6 +398,5 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att override fun sortCategory(catId: Int, sortBy: Int) { } override fun selectAll(position: Int) { } override fun allSelected(position: Int): Boolean = false - override fun showCategories(position: Int, view: View) { } override fun recyclerIsScrolling() = false } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt index e66356c2bf..c1aee94202 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt @@ -12,6 +12,7 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.view.inputmethod.InputMethodManager +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.view.ActionMode import androidx.appcompat.widget.SearchView @@ -175,7 +176,7 @@ open class LibraryController( override fun onViewCreated(view: View) { super.onViewCreated(view) - view.applyWindowInsetsForRootController(activity!!.navigationView) + view.applyWindowInsetsForRootController(activity!!.bottom_nav) mangaPerRow = getColumnsPreferenceForCurrentOrientation().getOrDefault() if (!::presenter.isInitialized) presenter = LibraryPresenter(this) @@ -193,7 +194,8 @@ open class LibraryController( when (it) { FilterBottomSheet.ACTION_REFRESH -> onRefresh() 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) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt index b9a4e6c8b5..aa6e2905be 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryListController.kt @@ -8,13 +8,11 @@ import android.graphics.Rect import android.os.Build import android.os.Bundle import android.util.TypedValue -import android.view.Gravity import android.view.LayoutInflater import android.view.MotionEvent import android.view.View import android.view.ViewGroup import androidx.appcompat.view.ActionMode -import androidx.appcompat.widget.PopupMenu import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.recyclerview.widget.GridLayoutManager 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.util.system.dpToPx 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.snack 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_list_controller.* import kotlinx.android.synthetic.main.main_activity.* -import kotlinx.android.synthetic.main.spinner_title.view.* import kotlinx.coroutines.delay -import timber.log.Timber import java.util.Locale import kotlin.math.abs import kotlin.math.max @@ -73,42 +68,29 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), private var updateScroll = true - private var spinnerAdapter: SpinnerAdapter? = null - private var lastItemPosition:Int? = null private var lastItem:IFlexible<*>? = null - private lateinit var customTitleSpinner: ViewGroup - private lateinit var titlePopupMenu:PopupMenu private var switchingCategories = false - var startPosX:Float? = null - var startPosY:Float? = null - var moved = false - var lockedRecycler = false - var lockedY = false - var nextCategory:Int? = null - var ogCategory:Int? = null - var prevCategory:Int? = null + private var startPosX:Float? = null + private var startPosY:Float? = null + private var moved = false + private var lockedRecycler = false + private var lockedY = false + private var nextCategory:Int? = null + private var ogCategory:Int? = null + private var prevCategory:Int? = null private val swipeDistance = 300f - var flinging = false - var isDragging = false - - /** - * Recycler view of the list of manga. - */ - // private lateinit var recycler: RecyclerView + private var flinging = false + private var isDragging = false override fun contentView():View = recycler_layout 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() -// 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 () { @@ -118,12 +100,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), if (order != null && order != activeCategory) { preferences.lastUsedCategory().set(order) activeCategory = order - val category = presenter.categories.find { it.order == order } - - customTitleSpinner.category_title.text = category?.name ?: "" - val isCurrentController = router?.backstack?.lastOrNull()?.controller() == - this@LibraryListController - if (isCurrentController) setTitle() + setTitle() } } } @@ -151,34 +128,32 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), } val sheetRect = Rect() val recyclerRect = Rect() + val appBarRect = Rect() bottom_sheet.getGlobalVisibleRect(sheetRect) view?.getGlobalVisibleRect(recyclerRect) + activity?.appbar?.getGlobalVisibleRect(appBarRect) if (startPosX == null) { startPosX = event.rawX startPosY = event.rawY - val position = (recycler.layoutManager as LinearLayoutManager) - .findFirstVisibleItemPosition() - val order = getCategoryOrder() - if (order != null) { - ogCategory = order - var newOffsetN = order + 1 - while (adapter.indexOf(newOffsetN) == -1 && presenter.categories.any { it.order == newOffsetN }) { - newOffsetN += 1 - } - if (adapter.indexOf(newOffsetN) != -1) - nextCategory = newOffsetN + val position = + (recycler.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition() + val order = activeCategory + ogCategory = order + var newOffsetN = order + 1 + while (adapter.indexOf(newOffsetN) == -1 && presenter.categories.any { it.order == newOffsetN }) { + newOffsetN += 1 + } + if (adapter.indexOf(newOffsetN) != -1) nextCategory = newOffsetN - if (position == 0) prevCategory = null - else { - var newOffsetP = order - 1 - while (adapter.indexOf(newOffsetP) == -1 && presenter.categories.any { it.order == newOffsetP }) { - newOffsetP -= 1 - } - if (adapter.indexOf(newOffsetP) != -1) - prevCategory = newOffsetP + if (position == 0) prevCategory = null + else { + var newOffsetP = order - 1 + while (adapter.indexOf(newOffsetP) == -1 && presenter.categories.any { it.order == newOffsetP }) { + newOffsetP -= 1 } + if (adapter.indexOf(newOffsetP) != -1) prevCategory = newOffsetP } return } @@ -193,7 +168,8 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), } if (startPosX != null && startPosY != null && (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 } if (event.actionMasked != MotionEvent.ACTION_UP && startPosX != null) { @@ -330,21 +306,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), val tv = TypedValue() 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 -> fast_scroller.updateLayoutParams { topMargin = insets.systemWindowInsetTop @@ -396,19 +357,11 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), adapter.setItems(mangaMap) 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() == this - /*customTitleSpinner.category_title.text = - presenter.categories[clamp(activeCategory, - 0, - presenter.categories.size - 1)].name - if (isCurrentController) setTitle()*/ + setTitle() updateScroll = false if (!freshStart) { justStarted = false @@ -432,9 +385,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), null } - titlePopupMenu.menu.clear() 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) } @@ -442,10 +393,6 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), scrollToHeader(item.itemId) true } - customTitleSpinner.setOnClickListener { - - titlePopupMenu.show() - } } private fun scrollToHeader(pos: Int) { @@ -453,14 +400,12 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), switchingCategories = true if (headerPosition > -1) { val appbar = activity?.appbar - //if (headerPosition == 0) - //activity?.appbar?.y = 0f recycler.suppressLayout(true) val appbarOffset = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (appbar?.y ?: 0f > -20) 0 else (appbar?.y?.plus(view?.rootWindowInsets?.systemWindowInsetTop ?: 0) - ?: 0f).roundToInt() + 10.dpToPx + ?: 0f).roundToInt() + 30.dpToPx } else { 0 @@ -470,11 +415,10 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), + appbarOffset ) - val headerItem = adapter.getItem(headerPosition) as? LibraryHeaderItem + /*val headerItem = adapter.getItem(headerPosition) as? LibraryHeaderItem if (headerItem != null) { - customTitleSpinner.category_title.text = headerItem.category.name setTitle() - } + }*/ recycler.suppressLayout(false) } launchUI { @@ -573,11 +517,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), } override fun canDrag(): Boolean { - val filterOff = preferences.filterCompleted().getOrDefault() + - preferences.filterTracked().getOrDefault() + - preferences.filterUnread().getOrDefault() + - preferences.filterMangaType().getOrDefault() + - preferences.filterCompleted().getOrDefault() == 0 && + val filterOff = !bottom_sheet.hasActiveFilters() && !preferences.hideCategories().getOrDefault() return filterOff && adapter.mode != SelectableAdapter.Mode.MULTI } @@ -775,28 +715,10 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), 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 onSwipeTop(x: Float, y: Float) { val sheetRect = Rect() - activity!!.navigationView.getGlobalVisibleRect(sheetRect) + activity!!.bottom_nav.getGlobalVisibleRect(sheetRect) if (sheetRect.contains(x.toInt(), y.toInt())) { if (bottom_sheet.sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED) toggleFilters() @@ -840,9 +762,7 @@ class LibraryListController(bundle: Bundle? = null) : LibraryController(bundle), } override fun onAnimationCancel(animation: Animator?) {} - override fun onAnimationRepeat(animation: Animator?) {} - override fun onAnimationStart(animation: Animator?) {} }) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/filter/FilterBottomSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/filter/FilterBottomSheet.kt index 261e392e4a..5209777861 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/filter/FilterBottomSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/filter/FilterBottomSheet.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.library.filter import android.content.Context import android.content.res.Configuration +import android.os.Parcelable import android.util.AttributeSet import android.view.View 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.getOrDefault 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.view.gone import eu.kanade.tachiyomi.util.view.inflate @@ -70,25 +70,18 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri var onGroupClicked: (Int) -> Unit = { _ -> } var pager:View? = null + var phoneLandscape = false fun onCreate(pagerView:View) { clearButton = clear_button filter_layout.removeView(clearButton) sheetBehavior = BottomSheetBehavior.from(this) - val phoneLandscape = (isLandscape() && !isTablet()) + phoneLandscape = (isLandscape() && !isTablet()) sheetBehavior?.isHideable = true 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 val shadow2:View = (pagerView.parent as ViewGroup).findViewById(R.id.shadow2) 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) { sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN } @@ -96,47 +89,24 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri override fun onSlide(bottomSheet: View, progress: Float) { top_bar.alpha = 1 - max(0f, progress) shadow2.alpha = (1 - max(0f, progress)) * 0.25f - if (phoneLandscape) - shadow.alpha = progress - else - shadow.alpha = 1 + min(0f, progress) - //if (progress >= 0) - updateRootPadding(progress) + if (phoneLandscape) shadow.alpha = progress + else shadow.alpha = 1 + min(0f, progress) + updateRootPadding(progress) } override fun onStateChanged(p0: View, state: Int) { - if (state == BottomSheetBehavior.STATE_COLLAPSED) { - 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 + stateChanged(state) } }) if (preferences.hideFiltersAtStart().getOrDefault()) { 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) { shadow2.gone() } @@ -150,6 +120,30 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri 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 { 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 } 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.setOnCheckedChangeListener { _, isChecked -> preferences.hideCategories().set(isChecked) @@ -212,11 +201,12 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri db.getCategories().executeAsBlocking() .isNotEmpty() } - val librryManga = db.getLibraryMangas().executeAsBlocking() + val libraryManga = db.getLibraryMangas().executeAsBlocking() val types = mutableListOf() - if (librryManga.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 (librryManga.any { it.mangaType() == Manga.TYPE_COMIC }) types.add(R.string.comic) + if (libraryManga.any { it.mangaType() == Manga.TYPE_MANHWA }) types.add(R.string.manhwa) + if (libraryManga.any { it.mangaType() == Manga.TYPE_MANHUA }) types.add(R.string.manhua) + if (libraryManga.any { it.mangaType() == Manga.TYPE_COMIC }) types.add(R.string.comic) + val hasTracking = Injekt.get().hasLoggedServices() if (types.isNotEmpty()) { launchUI { 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) filterItems.remove(tracked) filterItems.add(mangaType) - filterItems.add(tracked) + if (hasTracking) + filterItems.add(tracked) } } withContext(Dispatchers.Main) { hide_categories.visibleIf(showCategoriesCheckBox) - // categories.setState(preferences.hideCategories().getOrDefault()) downloaded.setState(preferences.filterDownloaded()) completed.setState(preferences.filterCompleted()) unread.setState(preferences.filterUnread()) @@ -305,10 +295,6 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri } private fun clearFilters() { - val action = if (preferences.hideCategories().getOrDefault()) ACTION_REFRESH - else ACTION_FILTER - - preferences.hideCategories().set(false) preferences.filterDownloaded().set(0) preferences.filterUnread().set(0) preferences.filterCompleted().set(0) @@ -322,8 +308,10 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri filterItems.forEach { it.reset() } + if (trackers != null) + filterItems.remove(trackers!!) reSortViews() - onGroupClicked(action) + onGroupClicked(ACTION_FILTER) } private fun reSortViews() { @@ -339,10 +327,6 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri filter_scroll.scrollTo(0, 0) } - fun adjustFiltersMargin(downloading: Boolean) { - filter_scroll.updatePaddingRelative(end = (if (downloading) 80 else 20).dpToPx) - } - companion object { const val ACTION_REFRESH = 0 const val ACTION_FILTER = 1 diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 62fbd57542..ea1b834d4d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -139,13 +139,13 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { // tabAnimator = TabsAnimator(tabs) var continueSwitchingTabs = false - navigationView.setOnNavigationItemSelectedListener { item -> + bottom_nav.setOnNavigationItemSelectedListener { item -> val id = item.itemId val currentController = router.backstack.lastOrNull()?.controller() if (!continueSwitchingTabs && currentController is BottomNavBarInterface) { if (!currentController.canChangeTabs { continueSwitchingTabs = true - this@MainActivity.navigationView.selectedItemId = id + this@MainActivity.bottom_nav.selectedItemId = id }) return@setOnNavigationItemSelectedListener false } continueSwitchingTabs = false @@ -175,7 +175,6 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { if (!showRecents) setRoot(RecentChaptersController(), id) else setRoot(RecentlyReadController(), id) preferences.showRecentUpdates().set(!showRecents) - updateRecentsIcon() } R.id.nav_library -> { val controller = @@ -190,6 +189,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { } } } + updateIcons(id) true } 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 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION*/ - updateRecentsIcon() content.viewTreeObserver.addOnGlobalLayoutListener { val heightDiff: Int = content.rootView.height - content.height if (heightDiff > 200 && window.attributes.softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) { //keyboard is open, hide layout - navigationView.gone() - } else if (navigationView.visibility == View.GONE + bottom_nav.gone() + } else if (bottom_nav.visibility == View.GONE && window.attributes.softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) { //keyboard is hidden, show layout // use coroutine to delay so the bottom bar doesn't flash on top of the keyboard launchUI { - navigationView.visible() + bottom_nav.visible() } } } @@ -272,7 +271,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { appbar.updatePadding( top = insets.systemWindowInsetTop ) - navigationView.updatePadding(bottom = insets.systemWindowInsetBottom) + bottom_nav.updatePadding(bottom = insets.systemWindowInsetBottom) /*controller_container.updateLayoutParams { val attrsArray = intArrayOf(android.R.attr.actionBarSize) @@ -308,7 +307,7 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { if (!router.hasRootController()) { // Set start screen 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() } - navigationView.visibility = if (router.backstackSize > 1) View.GONE else View.VISIBLE - navigationView.alpha = if (router.backstackSize > 1) 0f else 1f + bottom_nav.visibility = if (router.backstackSize > 1) View.GONE else View.VISIBLE + bottom_nav.alpha = if (router.backstackSize > 1) 0f else 1f router.addChangeListener(object : ControllerChangeHandler.ControllerChangeListener { override fun onChangeStarted(to: Controller?, from: Controller?, isPush: Boolean, container: ViewGroup, handler: ControllerChangeHandler) { @@ -369,11 +368,31 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { setExtensionsBadge() } - fun updateRecentsIcon() { - navigationView.menu.findItem(R.id.nav_recents).icon = - AppCompatResources.getDrawable(this, - if (preferences.showRecentUpdates().getOrDefault()) R.drawable.ic_update_black_24dp - else R.drawable.ic_history_black_24dp) + override fun onRestoreInstanceState(savedInstanceState: Bundle) { + super.onRestoreInstanceState(savedInstanceState) + updateIcons(bottom_nav.selectedItemId) + } + + 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? { @@ -400,13 +419,13 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { private fun setExtensionsBadge() { val updates = preferences.extensionUpdatesCount().getOrDefault() if (updates > 0) { - val badge = navigationView.getOrCreateBadge(R.id.nav_catalogues) + val badge = bottom_nav.getOrCreateBadge(R.id.nav_catalogues) badge.number = updates badge.backgroundColor = getResourceColor(R.attr.badgeColor) badge.badgeTextColor = Color.WHITE } 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) ) 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 -> { preferences.showRecentUpdates().set(intent.action == SHORTCUT_RECENTLY_UPDATED) - navigationView.selectedItemId = R.id.nav_recents - updateRecentsIcon() + bottom_nav.selectedItemId = R.id.nav_recents } - SHORTCUT_CATALOGUES -> navigationView.selectedItemId = R.id.nav_catalogues + SHORTCUT_CATALOGUES -> bottom_nav.selectedItemId = R.id.nav_catalogues SHORTCUT_EXTENSIONS -> { if (router.backstack.none { it.controller() is ExtensionController }) { if (router.backstack.isEmpty()) { - navigationView.selectedItemId = R.id.nav_library + bottom_nav.selectedItemId = R.id.nav_library router.pushController( RouterTransaction.with(ExtensionController()).pushChangeHandler( SimpleSwapChangeHandler() @@ -467,14 +485,14 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { SHORTCUT_MANGA -> { val extras = intent.extras ?: return false if (router.backstack.isEmpty()) { - navigationView.selectedItemId = R.id.nav_library + bottom_nav.selectedItemId = R.id.nav_library } router.pushController(MangaDetailsController(extras).withFadeTransaction()) } SHORTCUT_DOWNLOADS -> { if (router.backstack.none { it.controller() is DownloadController }) { if (router.backstack.isEmpty()) { - navigationView.selectedItemId = R.id.nav_library + bottom_nav.selectedItemId = R.id.nav_library router.pushController(RouterTransaction.with(DownloadController()) .pushChangeHandler(SimpleSwapChangeHandler()) .popChangeHandler(FadeChangeHandler())) @@ -627,21 +645,21 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { if (to !is SpinnerTitleInterface) toolbar.removeSpinner() if (to !is DialogController) { - navigationView.visibility = if (router.backstackSize == 0 || + bottom_nav.visibility = if (router.backstackSize == 0 || (router.backstackSize <= 1 && !isPush)) - View.VISIBLE else navigationView.visibility + View.VISIBLE else bottom_nav.visibility animationSet?.cancel() animationSet = AnimatorSet() val alphaAnimation = ValueAnimator.ofFloat( - navigationView.alpha, + bottom_nav.alpha, if (router.backstackSize > 1) 0f else 1f ) alphaAnimation.addUpdateListener { valueAnimator -> - navigationView.alpha = valueAnimator.animatedValue as Float + bottom_nav.alpha = valueAnimator.animatedValue as Float } alphaAnimation.addListener(object : Animator.AnimatorListener { 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?) { } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/SearchActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/SearchActivity.kt index 2bdb3b4041..e187f6effa 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/SearchActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/SearchActivity.kt @@ -54,7 +54,7 @@ class SearchActivity: MainActivity() { } else { appbar.enableElevation() } - navigationView.gone() + bottom_nav.gone() } override fun handleIntentAction(intent: Intent): Boolean { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt index e75fe84d1f..b57745530c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaDetailsPresenter.kt @@ -54,7 +54,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController, DownloadQueue.DownloadListener, LibraryServiceListener { +<<<<<<< Updated upstream private var scope = CoroutineScope(Job() + Dispatchers.Default) +======= + var scope = CoroutineScope(Job() + Dispatchers.Default) +>>>>>>> Stashed changes var isLockedFromSearch = false var hasRequested = false @@ -711,7 +715,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController, fun trackSearch(query: String, service: TrackService) { scope.launch(Dispatchers.IO) { +<<<<<<< Updated upstream val results = try {service.search(query) } +======= + val results = try {service.search(query).toBlocking().single() } +>>>>>>> Stashed changes catch (e: Exception) { withContext(Dispatchers.Main) { controller.trackSearchError(e) } null } @@ -726,7 +734,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController, item.manga_id = manga.id!! scope.launch { +<<<<<<< Updated upstream val binding = try { service.bind(item) } +======= + val binding = try { service.bind(item).toBlocking().single() } +>>>>>>> Stashed changes catch (e: Exception) { trackError(e) null @@ -746,7 +758,11 @@ class MangaDetailsPresenter(private val controller: MangaDetailsController, private fun updateRemote(track: Track, service: TrackService) { scope.launch { +<<<<<<< Updated upstream val binding = try { service.update(track) } +======= + val binding = try { service.update(track).toBlocking().single() } +>>>>>>> Stashed changes catch (e: Exception) { trackError(e) null diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersController.kt index b34135f648..17d5126db7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent_updates/RecentChaptersController.kt @@ -86,7 +86,7 @@ class RecentChaptersController : NucleusController(), */ override fun onViewCreated(view: View) { super.onViewCreated(view) - view.applyWindowInsetsForRootController(activity!!.navigationView) + view.applyWindowInsetsForRootController(activity!!.bottom_nav) view.context.notificationManager.cancel(Notifications.ID_NEW_CHAPTERS) // Init RecyclerView and adapter @@ -109,7 +109,7 @@ class RecentChaptersController : NucleusController(), LibraryUpdateService.start(view.context) view.snack(R.string.updating_library) { 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. @@ -385,7 +385,7 @@ class RecentChaptersController : NucleusController(), router.setRoot( RecentlyReadController().withFadeTransaction().tag(R.id.nav_recents.toString())) Injekt.get().showRecentUpdates().set(false) - (activity as? MainActivity)?.updateRecentsIcon() + (activity as? MainActivity)?.updateIcons(R.id.nav_recents) } } return super.onOptionsItemSelected(item) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadController.kt index 0367877c6c..047747c63e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recently_read/RecentlyReadController.kt @@ -84,7 +84,7 @@ class RecentlyReadController(bundle: Bundle? = null) : BaseController(bundle), */ override fun onViewCreated(view: View) { super.onViewCreated(view) - view.applyWindowInsetsForRootController(activity!!.navigationView) + view.applyWindowInsetsForRootController(activity!!.bottom_nav) // Initialize adapter adapter = RecentlyReadAdapter(this) recycler.adapter = adapter @@ -239,7 +239,7 @@ class RecentlyReadController(bundle: Bundle? = null) : BaseController(bundle), router.setRoot( RecentChaptersController().withFadeTransaction().tag(R.id.nav_recents.toString())) Injekt.get().showRecentUpdates().set(true) - (activity as? MainActivity)?.updateRecentsIcon() + (activity as? MainActivity)?.updateIcons(R.id.nav_recents) } } return super.onOptionsItemSelected(item) diff --git a/app/src/main/res/drawable/ic_explore_black_24dp.xml b/app/src/main/res/drawable/browse_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_explore_black_24dp.xml rename to app/src/main/res/drawable/browse_24dp.xml diff --git a/app/src/main/res/drawable/browse_outline_24dp.xml b/app/src/main/res/drawable/browse_outline_24dp.xml new file mode 100644 index 0000000000..5d9214ed20 --- /dev/null +++ b/app/src/main/res/drawable/browse_outline_24dp.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_collections_bookmark_white_24dp.xml b/app/src/main/res/drawable/library_24dp.xml similarity index 100% rename from app/src/main/res/drawable/ic_collections_bookmark_white_24dp.xml rename to app/src/main/res/drawable/library_24dp.xml diff --git a/app/src/main/res/drawable/library_outline_24dp.xml b/app/src/main/res/drawable/library_outline_24dp.xml new file mode 100644 index 0000000000..916e94524a --- /dev/null +++ b/app/src/main/res/drawable/library_outline_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/recent_read_24dp.xml b/app/src/main/res/drawable/recent_read_24dp.xml new file mode 100644 index 0000000000..11c4d5e625 --- /dev/null +++ b/app/src/main/res/drawable/recent_read_24dp.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/recent_read_outline_24dp.xml b/app/src/main/res/drawable/recent_read_outline_24dp.xml new file mode 100644 index 0000000000..15454ddf4f --- /dev/null +++ b/app/src/main/res/drawable/recent_read_outline_24dp.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/recent_updates_24dp.xml b/app/src/main/res/drawable/recent_updates_24dp.xml new file mode 100644 index 0000000000..0b38c3a6f3 --- /dev/null +++ b/app/src/main/res/drawable/recent_updates_24dp.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/recent_updates_outline_24dp.xml b/app/src/main/res/drawable/recent_updates_outline_24dp.xml new file mode 100644 index 0000000000..48319976cc --- /dev/null +++ b/app/src/main/res/drawable/recent_updates_outline_24dp.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/catalogue_grid_item.xml b/app/src/main/res/layout/catalogue_grid_item.xml index 46b9f92972..3750f50517 100644 --- a/app/src/main/res/layout/catalogue_grid_item.xml +++ b/app/src/main/res/layout/catalogue_grid_item.xml @@ -125,13 +125,13 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintBottom_toBottomOf="parent" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" android:orientation="vertical" android:layout_height="30sp"> diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml index ed7fee46cd..e5daaf6b4a 100644 --- a/app/src/main/res/layout/main_activity.xml +++ b/app/src/main/res/layout/main_activity.xml @@ -88,7 +88,7 @@ diff --git a/app/src/main/res/menu/manga_details.xml b/app/src/main/res/menu/manga_details.xml index ef13753b4a..735919d7a7 100644 --- a/app/src/main/res/menu/manga_details.xml +++ b/app/src/main/res/menu/manga_details.xml @@ -17,6 +17,9 @@ +