From 5714f183a8685a6b5c6f01129aff8c8f79750136 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 7 Aug 2020 23:34:58 -0400 Subject: [PATCH] Update drag and drop to work like J2k's new version Cleanup some stuff from the continue reading button --- .../ui/library/LibraryCategoryAdapter.kt | 7 +- .../ui/library/LibraryCategoryView.kt | 83 +++++++------------ .../tachiyomi/ui/library/LibraryController.kt | 33 ++------ .../tachiyomi/ui/library/LibraryHolder.kt | 7 ++ .../ui/library/LibrarySettingsSheet.kt | 10 +++ app/src/main/res/menu/library.xml | 20 ----- app/src/main/res/values-pt-rBR/strings_sy.xml | 5 -- app/src/main/res/values/strings_sy.xml | 5 -- 8 files changed, 52 insertions(+), 118 deletions(-) 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 f8170745a..103613e66 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryAdapter.kt @@ -61,8 +61,6 @@ class LibraryCategoryAdapter(view: LibraryCategoryView, val controller: LibraryC */ private var mangas: List = emptyList() - val libraryListener: LibraryListener = controller - // SY --> val onItemReleaseListener: CategoryAdapter.OnItemReleaseListener = view // SY <-- @@ -93,6 +91,7 @@ class LibraryCategoryAdapter(view: LibraryCategoryView, val controller: LibraryC // (well technically we can cancel it by invoking filterItems again but that doesn't work when // we want to perform a no-op filter) suspend fun performFilter(scope: CoroutineScope) { + isLongPressDragEnabled = mode != Mode.MULTI && searchText.isBlank() lastFilterJob?.cancel() if (mangas.isNotEmpty() && searchText.isNotBlank()) { val savedSearchText = searchText @@ -228,9 +227,5 @@ class LibraryCategoryAdapter(view: LibraryCategoryView, val controller: LibraryC return@any false } } - - interface LibraryListener { - fun startReading(manga: Manga, adapter: LibraryCategoryAdapter) - } // EXH <-- } 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 a8422767f..0725fdde9 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryCategoryView.kt @@ -21,7 +21,6 @@ import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.inflate import eu.kanade.tachiyomi.widget.AutofitRecyclerView import exh.ui.LoadingHandle -import exh.util.removeArticles import java.util.concurrent.TimeUnit import kotlinx.android.synthetic.main.library_category.view.fast_scroller import kotlinx.android.synthetic.main.library_category.view.swipe_refresh @@ -38,6 +37,8 @@ import reactivecircus.flowbinding.recyclerview.scrollStateChanges import reactivecircus.flowbinding.swiperefreshlayout.refreshes import rx.android.schedulers.AndroidSchedulers import rx.subscriptions.CompositeSubscription +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get import uy.kohesive.injekt.injectLazy /** @@ -145,8 +146,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att SelectableAdapter.Mode.SINGLE } // SY --> - val sortingMode = preferences.librarySortingMode().get() - adapter.isLongPressDragEnabled = sortingMode == LibrarySort.DRAG_AND_DROP + adapter.isLongPressDragEnabled = canDrag() // SY <-- // EXH --> @@ -209,33 +209,6 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att } controller.invalidateActionMode() } - - // SY --> - subscriptions += controller.reorganizeRelay - .subscribe { - if (it.first == category.id) { - var items = when (it.second) { - 1, 2 -> adapter.currentItems.sortedBy { -// if (preferences.removeArticles().getOrDefault()) - it.manga.title.removeArticles() -// else -// it.manga.title - } - 3, 4 -> adapter.currentItems.sortedBy { it.manga.last_update } - else -> { - adapter.currentItems.sortedBy { it.manga.title } - } - } - if (it.second % 2 == 0) { - items = items.reversed() - } - runBlocking { adapter.setItems(this, items) } - adapter.notifyDataSetChanged() - } - controller.invalidateActionMode() - } -// } - // SY <-- } fun onRecycle() { @@ -264,7 +237,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att // Get the manga list for this category. // SY --> val sortingMode = preferences.librarySortingMode().get() - adapter.isLongPressDragEnabled = sortingMode == LibrarySort.DRAG_AND_DROP + adapter.isLongPressDragEnabled = canDrag() var mangaForCategory = event.getMangaForCategory(category).orEmpty() if (sortingMode == LibrarySort.DRAG_AND_DROP) { if (category.name == "Default") { @@ -307,7 +280,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att if (adapter.mode != SelectableAdapter.Mode.MULTI) { adapter.mode = SelectableAdapter.Mode.MULTI // SY --> - adapter.isLongPressDragEnabled = false + adapter.isLongPressDragEnabled = canDrag() // SY <-- } findAndToggleSelection(event.manga) @@ -318,8 +291,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att if (controller.selectedMangas.isEmpty()) { adapter.mode = SelectableAdapter.Mode.SINGLE // SY --> - adapter.isLongPressDragEnabled = preferences.librarySortingMode() - .get() == LibrarySort.DRAG_AND_DROP + adapter.isLongPressDragEnabled = canDrag() // SY <-- } } @@ -328,13 +300,14 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att adapter.clearSelection() lastClickPosition = -1 // SY --> - adapter.isLongPressDragEnabled = preferences.librarySortingMode() - .get() == LibrarySort.DRAG_AND_DROP + adapter.isLongPressDragEnabled = canDrag() // SY <-- } } } + fun canDrag() = adapter.mode != SelectableAdapter.Mode.MULTI && adapter.searchText.isBlank() + /** * Toggles the selection for the given manga and updates the view if needed. * @@ -390,30 +363,26 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att lastClickPosition = position } // SY --> - override fun onItemMove(fromPosition: Int, toPosition: Int) { - } - override fun onItemReleased(position: Int) { - if (adapter.selectedItemCount == 0) { - val mangaIds = adapter.currentItems.mapNotNull { it.manga.id } - category.mangaOrder = mangaIds - val db: DatabaseHelper by injectLazy() - if (category.name == "Default") { - preferences.defaultMangaOrder().set(mangaIds.joinToString("/")) - } else { - db.insertCategory(category).asRxObservable().subscribe() - } + controller.invalidateActionMode() + val mangaIds = adapter.currentItems.mapNotNull { it.manga.id } + category.mangaOrder = mangaIds + if (category.name == "Default") { + preferences.defaultMangaOrder().set(mangaIds.joinToString("/")) + } else { + Injekt.get().insertCategory(category).asRxObservable().subscribe() + } + if (preferences.librarySortingMode().get() != LibrarySort.DRAG_AND_DROP) { + preferences.librarySortingAscending().set(true) + preferences.librarySortingMode().set(LibrarySort.DRAG_AND_DROP) + controller.refreshSort() } } override fun shouldMoveItem(fromPosition: Int, toPosition: Int): Boolean { - if (adapter.selectedItemCount > 1) { - return false - } - if (adapter.isSelected(fromPosition)) { - toggleSelection(fromPosition) - } - return true + if (adapter.isSelected(fromPosition)) toggleSelection(fromPosition) + if (toPosition < 1) return false + return adapter.getItem(fromPosition) is LibraryItem } override fun onActionStateChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) { @@ -422,6 +391,10 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att onItemLongClick(position) } } + + override fun onItemMove(fromPosition: Int, toPosition: Int) { + return + } // SY <-- /** 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 922d20fe8..728af5380 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 @@ -71,8 +71,7 @@ class LibraryController( TabbedController, ActionMode.Callback, ChangeMangaCategoriesDialog.Listener, - DeleteLibraryMangasDialog.Listener, - LibraryCategoryAdapter.LibraryListener { + DeleteLibraryMangasDialog.Listener { /** * Position of the active category. @@ -119,13 +118,6 @@ class LibraryController( */ val selectInverseRelay: PublishRelay = PublishRelay.create() - // SY --> - /** - * Relay to notify the library's viewpager to reotagnize all - */ - val reorganizeRelay: PublishRelay> = PublishRelay.create() - // SY <-- - /** * Number of manga per row in grid mode. */ @@ -397,11 +389,6 @@ class LibraryController( override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.library, menu) - // SY --> - val reorganizeItem = menu.findItem(R.id.action_reorganize) - reorganizeItem.isVisible = preferences.librarySortingMode().get() == LibrarySort.DRAG_AND_DROP - // SY <-- - val searchItem = menu.findItem(R.id.action_search) val searchView = searchItem.actionView as SearchView searchView.maxWidth = Int.MAX_VALUE @@ -489,24 +476,12 @@ class LibraryController( presenter.favoritesSync.runSync() } } - R.id.action_alpha_asc -> reOrder(1) - R.id.action_alpha_dsc -> reOrder(2) - R.id.action_update_asc -> reOrder(3) - R.id.action_update_dsc -> reOrder(4) // SY <-- } return super.onOptionsItemSelected(item) } - // SY --> - private fun reOrder(type: Int) { - adapter?.categories?.getOrNull(binding.libraryPager.currentItem)?.id?.let { - reorganizeRelay.call(it to type) - } - } - // SY <-- - /** * Invalidates the action mode, forcing it to refresh its content. */ @@ -796,7 +771,7 @@ class LibraryController( oldSyncStatus = status } - override fun startReading(manga: Manga, adapter: LibraryCategoryAdapter) { + fun startReading(manga: Manga, adapter: LibraryCategoryAdapter) { if (adapter.mode == SelectableAdapter.Mode.MULTI) { toggleSelection(manga) return @@ -807,5 +782,9 @@ class LibraryController( destroyActionModeIfNeeded() startActivity(intent) } + + fun refreshSort() { + settingsSheet?.refreshSort() + } // <-- EXH } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt index 34b67fe76..00c03b86f 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryHolder.kt @@ -38,5 +38,12 @@ abstract class LibraryHolder( super.onItemReleased(position) (adapter as? LibraryCategoryAdapter)?.onItemReleaseListener?.onItemReleased(position) } + + override fun onLongClick(view: View?): Boolean { + return if (adapter.isLongPressDragEnabled) { + super.onLongClick(view) + false + } else super.onLongClick(view) + } // SY <-- } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt index 651250656..b6b86bc6b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibrarySettingsSheet.kt @@ -37,6 +37,10 @@ class LibrarySettingsSheet( display.onGroupClicked = onGroupClickListener } + fun refreshSort() { + sort.refreshMode() + } + override fun getTabViews(): List = listOf( filters, sort, @@ -141,6 +145,12 @@ class LibrarySettingsSheet( setGroups(listOf(SortGroup())) } + fun refreshMode() { + recycler.adapter = null + removeView(recycler) + setGroups(listOf(SortGroup())) + } + inner class SortGroup : Group { private val alphabetically = Item.MultiSort(R.string.action_sort_alpha, this) diff --git a/app/src/main/res/menu/library.xml b/app/src/main/res/menu/library.xml index 2b783516d..8424ce088 100755 --- a/app/src/main/res/menu/library.xml +++ b/app/src/main/res/menu/library.xml @@ -37,24 +37,4 @@ android:title="@string/source_migration" app:showAsAction="never"/> - - - - - - - - - diff --git a/app/src/main/res/values-pt-rBR/strings_sy.xml b/app/src/main/res/values-pt-rBR/strings_sy.xml index a46213f82..296dc4fca 100644 --- a/app/src/main/res/values-pt-rBR/strings_sy.xml +++ b/app/src/main/res/values-pt-rBR/strings_sy.xml @@ -1,10 +1,5 @@  - - - Reordenar - Alfa (decrescente) - Primeira verificação Arraste e solte diff --git a/app/src/main/res/values/strings_sy.xml b/app/src/main/res/values/strings_sy.xml index 3b561654b..e5f00baf0 100644 --- a/app/src/main/res/values/strings_sy.xml +++ b/app/src/main/res/values/strings_sy.xml @@ -1,10 +1,5 @@ - - - Reorder - Alpha. (descending) - First checked Drag & Drop