From 3bee24e79a891265c03776d3534559aa878b3cd7 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 25 Apr 2020 00:28:25 -0400 Subject: [PATCH] Long pressing library icon now updates the library Long pressing on other tab items expands the bottom sheet for that page --- .../tachiyomi/ui/library/LibraryController.kt | 45 +++++++++---------- .../kanade/tachiyomi/ui/main/MainActivity.kt | 23 ++++++++++ .../tachiyomi/ui/recents/RecentsController.kt | 3 +- .../tachiyomi/util/view/ViewExtensions.kt | 12 +++++ 4 files changed, 58 insertions(+), 25 deletions(-) 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 d7b180e17e..fe9c9ecdf8 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 @@ -59,6 +59,7 @@ import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.applyWindowInsetsForRootController +import eu.kanade.tachiyomi.util.view.getItemView import eu.kanade.tachiyomi.util.view.gone import eu.kanade.tachiyomi.util.view.scrollViewWith import eu.kanade.tachiyomi.util.view.setOnQueryTextChangeListener @@ -148,10 +149,10 @@ class LibraryController( override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) val order = getCategoryOrder() - if (bottom_sheet.canHide()) { + if (filter_bottom_sheet.canHide()) { scrollDistance += abs(dy) if (scrollDistance > scrollDistanceTilHidden) { - bottom_sheet.hideIfPossible() + filter_bottom_sheet.hideIfPossible() scrollDistance = 0f } } else scrollDistance = 0f @@ -335,15 +336,13 @@ class LibraryController( createActionModeIfNeeded() } - bottom_sheet.onCreate(recycler_layout) + filter_bottom_sheet.onCreate(recycler_layout) - bottom_sheet.onGroupClicked = { + filter_bottom_sheet.onGroupClicked = { when (it) { FilterBottomSheet.ACTION_REFRESH -> onRefresh() FilterBottomSheet.ACTION_FILTER -> onFilterChanged() - FilterBottomSheet.ACTION_HIDE_FILTER_TIP -> activity?.toast( - R.string.hide_filters_tip, Toast.LENGTH_LONG - ) + FilterBottomSheet.ACTION_HIDE_FILTER_TIP -> showFilterTip() FilterBottomSheet.ACTION_DISPLAY -> DisplayBottomSheet(this).show() } } @@ -418,7 +417,7 @@ class LibraryController( val view = view ?: return LibraryUpdateService.start(view.context, category) snack = view.snack(R.string.updating_library) { - anchorView = bottom_sheet + anchorView = filter_bottom_sheet } } @@ -449,7 +448,7 @@ class LibraryController( DownloadService.callListeners() LibraryUpdateService.setListener(this) } - if (type == ControllerChangeType.POP_ENTER) bottom_sheet.hideIfPossible() + if (type == ControllerChangeType.POP_ENTER) filter_bottom_sheet.hideIfPossible() } override fun onActivityResumed(activity: Activity) { @@ -485,7 +484,7 @@ class LibraryController( } else { empty_view?.show( R.drawable.ic_book_black_128dp, - if (bottom_sheet.hasActiveFilters()) R.string.no_matches_for_filters + if (filter_bottom_sheet.hasActiveFilters()) R.string.no_matches_for_filters else R.string.library_is_empty_add_from_browse ) } @@ -632,7 +631,7 @@ class LibraryController( override fun canDrag(): Boolean { val filterOff = - !bottom_sheet.hasActiveFilters() && !preferences.hideCategories().getOrDefault() + !filter_bottom_sheet.hasActiveFilters() && !preferences.hideCategories().getOrDefault() return filterOff && adapter.mode != SelectableAdapter.Mode.MULTI } @@ -758,7 +757,7 @@ class LibraryController( if (presenter.mangaIsInCategory(item.manga, newHeader?.category?.id)) { adapter.moveItem(position, lastItemPosition!!) snack = view?.snack(R.string.already_in_category) { - anchorView = bottom_sheet + anchorView = filter_bottom_sheet } return } @@ -781,7 +780,7 @@ class LibraryController( snack = view?.snack( resources!!.getString(R.string.moved_to_, category.name) ) { - anchorView = bottom_sheet + anchorView = filter_bottom_sheet setAction(R.string.undo) { manga.category = category.id!! presenter.moveMangaToCategory(manga, oldCatId, mangaIds) @@ -802,7 +801,7 @@ class LibraryController( }, category.name ), Snackbar.LENGTH_LONG ) { - anchorView = bottom_sheet + anchorView = filter_bottom_sheet } if (!inQueue) LibraryUpdateService.start(view!!.context, category) return true @@ -838,27 +837,28 @@ class LibraryController( override fun showSheet() { when { - bottom_sheet.sheetBehavior?.state == BottomSheetBehavior.STATE_HIDDEN -> bottom_sheet.sheetBehavior?.state = + filter_bottom_sheet.sheetBehavior?.state == BottomSheetBehavior.STATE_HIDDEN -> filter_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED - bottom_sheet.sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED -> bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED + filter_bottom_sheet.sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED -> filter_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED else -> DisplayBottomSheet(this).show() } } override fun toggleSheet() { + closeTip() when { - bottom_sheet.sheetBehavior?.state == BottomSheetBehavior.STATE_HIDDEN -> bottom_sheet.sheetBehavior?.state = + filter_bottom_sheet.sheetBehavior?.state == BottomSheetBehavior.STATE_HIDDEN -> filter_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED - bottom_sheet.sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED -> bottom_sheet.sheetBehavior?.state = + filter_bottom_sheet.sheetBehavior?.state != BottomSheetBehavior.STATE_EXPANDED -> filter_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED - bottom_sheet.sheetBehavior?.isHideable == true -> bottom_sheet.sheetBehavior?.state = + filter_bottom_sheet.sheetBehavior?.isHideable == true -> filter_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN - else -> bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED + else -> filter_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED } } override fun handleSheetBack(): Boolean { - val sheetBehavior = BottomSheetBehavior.from(bottom_sheet) + val sheetBehavior = BottomSheetBehavior.from(filter_bottom_sheet) if (sheetBehavior.state != BottomSheetBehavior.STATE_COLLAPSED && sheetBehavior.state != BottomSheetBehavior.STATE_HIDDEN) { sheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED return true @@ -888,7 +888,6 @@ class LibraryController( override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.action_search -> expandActionViewFromInteraction = true - R.id.action_library_display -> DisplayBottomSheet(this).show() else -> return super.onOptionsItemSelected(item) } return true @@ -965,7 +964,7 @@ class LibraryController( snack = view?.snack( activity?.getString(R.string.removed_from_library) ?: "", Snackbar.LENGTH_INDEFINITE ) { - anchorView = bottom_sheet + anchorView = filter_bottom_sheet var undoing = false setAction(R.string.undo) { presenter.reAddMangas(mangas) 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 dfc54cb37d..314a344a7b 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 @@ -37,6 +37,7 @@ import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadService import eu.kanade.tachiyomi.data.download.DownloadServiceListener +import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault @@ -59,6 +60,8 @@ import eu.kanade.tachiyomi.util.system.hasSideNavBar import eu.kanade.tachiyomi.util.system.isBottomTappable import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.view.doOnApplyWindowInsets +import eu.kanade.tachiyomi.util.view.getItemView +import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.util.view.updateLayoutParams import eu.kanade.tachiyomi.util.view.updatePadding import eu.kanade.tachiyomi.util.view.withFadeTransaction @@ -137,6 +140,26 @@ open class MainActivity : BaseActivity(), DownloadServiceListener { ) var continueSwitchingTabs = false + bottom_nav.getItemView(R.id.nav_library)?.setOnLongClickListener { + if (!LibraryUpdateService.isRunning()) { + LibraryUpdateService.start(this) + main_content.snack(R.string.updating_library) { + anchorView = bottom_nav + } + } + true + } + for (id in listOf(R.id.nav_recents, R.id.nav_browse)) { + bottom_nav.getItemView(id)?.setOnLongClickListener { + bottom_nav.selectedItemId = id + bottom_nav.post { + val controller = + router.backstack.firstOrNull()?.controller() as? BottomSheetController + controller?.toggleSheet() + } + true + } + } bottom_nav.setOnNavigationItemSelectedListener { item -> val id = item.itemId val currentController = router.backstack.lastOrNull()?.controller() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsController.kt index 8a281edafa..2ce9f77cb4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recents/RecentsController.kt @@ -432,8 +432,7 @@ class RecentsController(bundle: Bundle? = null) : BaseController(bundle), override fun toggleSheet() { if (showingDownloads) dl_bottom_sheet.dismiss() - else if (dl_bottom_sheet.sheetBehavior?.isHideable == false) dl_bottom_sheet.sheetBehavior?.state = - BottomSheetBehavior.STATE_EXPANDED + else dl_bottom_sheet.sheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED } override fun expandSearch() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt index 74314ae63d..566ee6129c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/view/ViewExtensions.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.util.view +import android.annotation.SuppressLint import android.app.Activity import android.content.res.ColorStateList import android.content.res.Configuration @@ -17,11 +18,16 @@ import android.widget.Button import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView +import androidx.annotation.IdRes import androidx.annotation.Px +import androidx.appcompat.view.menu.MenuBuilder import androidx.core.graphics.ColorUtils import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.amulyakhare.textdrawable.TextDrawable import com.amulyakhare.textdrawable.util.ColorGenerator +import com.google.android.material.bottomnavigation.BottomNavigationItemView +import com.google.android.material.bottomnavigation.BottomNavigationMenuView +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.button.MaterialButton import com.google.android.material.snackbar.Snackbar @@ -323,3 +329,9 @@ fun MaterialButton.resetStrokeColor() { ) ) } + +@SuppressLint("RestrictedApi") +fun BottomNavigationView.getItemView(@IdRes id: Int): BottomNavigationItemView? { + val order = (menu as MenuBuilder).findItemIndex(id) + return (getChildAt(0) as BottomNavigationMenuView).getChildAt(order) as? BottomNavigationItemView +}