mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Remove chapter item popup menu
This commit is contained in:
		@@ -1,29 +1,20 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.manga.chapter
 | 
			
		||||
 | 
			
		||||
import android.view.View
 | 
			
		||||
import android.widget.PopupMenu
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.database.models.Manga
 | 
			
		||||
import eu.kanade.tachiyomi.data.download.model.Download
 | 
			
		||||
import eu.kanade.tachiyomi.ui.base.holder.BaseFlexibleViewHolder
 | 
			
		||||
import java.util.Date
 | 
			
		||||
import kotlinx.android.synthetic.main.chapters_item.chapter_description
 | 
			
		||||
import kotlinx.android.synthetic.main.chapters_item.chapter_menu
 | 
			
		||||
import kotlinx.android.synthetic.main.chapters_item.chapter_title
 | 
			
		||||
import kotlinx.android.synthetic.main.chapters_item.download_text
 | 
			
		||||
 | 
			
		||||
class ChapterHolder(
 | 
			
		||||
    private val view: View,
 | 
			
		||||
    view: View,
 | 
			
		||||
    private val adapter: ChaptersAdapter
 | 
			
		||||
) : BaseFlexibleViewHolder(view, adapter) {
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        // We need to post a Runnable to show the popup to make sure that the PopupMenu is
 | 
			
		||||
        // correctly positioned. The reason being that the view may change position before the
 | 
			
		||||
        // PopupMenu is shown.
 | 
			
		||||
        chapter_menu.setOnClickListener { it.post { showPopupMenu(it) } }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun bind(item: ChapterItem, manga: Manga) {
 | 
			
		||||
        val chapter = item.chapter
 | 
			
		||||
 | 
			
		||||
@@ -73,45 +64,4 @@ class ChapterHolder(
 | 
			
		||||
            else -> text = ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun showPopupMenu(view: View) {
 | 
			
		||||
        val item = adapter.getItem(adapterPosition) ?: return
 | 
			
		||||
 | 
			
		||||
        // Create a PopupMenu, giving it the clicked view for an anchor
 | 
			
		||||
        val popup = PopupMenu(view.context, view)
 | 
			
		||||
 | 
			
		||||
        // Inflate our menu resource into the PopupMenu's Menu
 | 
			
		||||
        popup.menuInflater.inflate(R.menu.chapter_single, popup.menu)
 | 
			
		||||
 | 
			
		||||
        val chapter = item.chapter
 | 
			
		||||
 | 
			
		||||
        // Hide download and show delete if the chapter is downloaded
 | 
			
		||||
        if (item.isDownloaded) {
 | 
			
		||||
            popup.menu.findItem(R.id.action_download).isVisible = false
 | 
			
		||||
            popup.menu.findItem(R.id.action_delete).isVisible = true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Hide bookmark if bookmark
 | 
			
		||||
        popup.menu.findItem(R.id.action_bookmark).isVisible = !chapter.bookmark
 | 
			
		||||
        popup.menu.findItem(R.id.action_remove_bookmark).isVisible = chapter.bookmark
 | 
			
		||||
 | 
			
		||||
        // Hide mark as unread when the chapter is unread
 | 
			
		||||
        if (!chapter.read && chapter.last_page_read == 0) {
 | 
			
		||||
            popup.menu.findItem(R.id.action_mark_as_unread).isVisible = false
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Hide mark as read when the chapter is read
 | 
			
		||||
        if (chapter.read) {
 | 
			
		||||
            popup.menu.findItem(R.id.action_mark_as_read).isVisible = false
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Set a listener so we are notified if a menu item is clicked
 | 
			
		||||
        popup.setOnMenuItemClickListener { menuItem ->
 | 
			
		||||
            adapter.menuItemListener.onMenuItemClick(adapterPosition, menuItem)
 | 
			
		||||
            true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Finally show the PopupMenu
 | 
			
		||||
        popup.show()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.manga.chapter
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.view.MenuItem
 | 
			
		||||
import eu.davidea.flexibleadapter.FlexibleAdapter
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
@@ -21,8 +20,6 @@ class ChaptersAdapter(
 | 
			
		||||
 | 
			
		||||
    var items: List<ChapterItem> = emptyList()
 | 
			
		||||
 | 
			
		||||
    val menuItemListener: OnMenuItemClickListener = controller
 | 
			
		||||
 | 
			
		||||
    val readColor = context.getResourceColor(android.R.attr.textColorHint)
 | 
			
		||||
 | 
			
		||||
    val unreadColor = context.getResourceColor(android.R.attr.textColorPrimary)
 | 
			
		||||
@@ -42,8 +39,4 @@ class ChaptersAdapter(
 | 
			
		||||
    fun indexOf(item: ChapterItem): Int {
 | 
			
		||||
        return items.indexOf(item)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface OnMenuItemClickListener {
 | 
			
		||||
        fun onMenuItemClick(position: Int, item: MenuItem)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,6 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
 | 
			
		||||
        ActionMode.Callback,
 | 
			
		||||
        FlexibleAdapter.OnItemClickListener,
 | 
			
		||||
        FlexibleAdapter.OnItemLongClickListener,
 | 
			
		||||
        ChaptersAdapter.OnMenuItemClickListener,
 | 
			
		||||
        DownloadCustomChaptersDialog.Listener,
 | 
			
		||||
        DeleteChaptersDialog.Listener {
 | 
			
		||||
 | 
			
		||||
@@ -364,6 +363,15 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
 | 
			
		||||
            destroyActionModeIfNeeded()
 | 
			
		||||
        } else {
 | 
			
		||||
            mode.title = count.toString()
 | 
			
		||||
 | 
			
		||||
            val chapters = getSelectedChapters()
 | 
			
		||||
            menu.findItem(R.id.action_download).isVisible = chapters.any { !it.isDownloaded }
 | 
			
		||||
            menu.findItem(R.id.action_delete).isVisible = chapters.any { it.isDownloaded }
 | 
			
		||||
            menu.findItem(R.id.action_bookmark).isVisible = chapters.any { !it.chapter.bookmark }
 | 
			
		||||
            menu.findItem(R.id.action_remove_bookmark).isVisible = chapters.any { it.chapter.bookmark }
 | 
			
		||||
            menu.findItem(R.id.action_mark_as_read).isVisible = chapters.any { !it.chapter.read }
 | 
			
		||||
            menu.findItem(R.id.action_mark_as_unread).isVisible = chapters.any { it.chapter.read }
 | 
			
		||||
            menu.findItem(R.id.action_mark_previous_as_read).isVisible = count == 1
 | 
			
		||||
        }
 | 
			
		||||
        return false
 | 
			
		||||
    }
 | 
			
		||||
@@ -377,6 +385,7 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
 | 
			
		||||
            R.id.action_mark_as_read -> markAsRead(getSelectedChapters())
 | 
			
		||||
            R.id.action_mark_as_unread -> markAsUnread(getSelectedChapters())
 | 
			
		||||
            R.id.action_select_all -> selectAll()
 | 
			
		||||
            R.id.action_mark_previous_as_read -> markPreviousAsRead(getSelectedChapters()[0])
 | 
			
		||||
            else -> return false
 | 
			
		||||
        }
 | 
			
		||||
        return true
 | 
			
		||||
@@ -394,21 +403,6 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
 | 
			
		||||
        super.onDetach(view)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onMenuItemClick(position: Int, item: MenuItem) {
 | 
			
		||||
        val chapter = adapter?.getItem(position) ?: return
 | 
			
		||||
        val chapters = listOf(chapter)
 | 
			
		||||
 | 
			
		||||
        when (item.itemId) {
 | 
			
		||||
            R.id.action_download -> downloadChapters(chapters)
 | 
			
		||||
            R.id.action_delete -> deleteChapters(chapters)
 | 
			
		||||
            R.id.action_bookmark -> bookmarkChapters(chapters, true)
 | 
			
		||||
            R.id.action_remove_bookmark -> bookmarkChapters(chapters, false)
 | 
			
		||||
            R.id.action_mark_as_read -> markAsRead(chapters)
 | 
			
		||||
            R.id.action_mark_as_unread -> markAsUnread(chapters)
 | 
			
		||||
            R.id.action_mark_previous_as_read -> markPreviousAsRead(chapter)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // SELECTION MODE ACTIONS
 | 
			
		||||
 | 
			
		||||
    private fun selectAll() {
 | 
			
		||||
@@ -431,7 +425,6 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
 | 
			
		||||
 | 
			
		||||
    private fun downloadChapters(chapters: List<ChapterItem>) {
 | 
			
		||||
        val view = view
 | 
			
		||||
        destroyActionModeIfNeeded()
 | 
			
		||||
        presenter.downloadChapters(chapters)
 | 
			
		||||
        if (view != null && !presenter.manga.favorite) {
 | 
			
		||||
            recycler?.snack(view.context.getString(R.string.snack_add_to_library), Snackbar.LENGTH_INDEFINITE) {
 | 
			
		||||
@@ -460,12 +453,10 @@ class ChaptersController : NucleusController<ChaptersPresenter>(),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun bookmarkChapters(chapters: List<ChapterItem>, bookmarked: Boolean) {
 | 
			
		||||
        destroyActionModeIfNeeded()
 | 
			
		||||
        presenter.bookmarkChapters(chapters, bookmarked)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun deleteChapters(chapters: List<ChapterItem>) {
 | 
			
		||||
        destroyActionModeIfNeeded()
 | 
			
		||||
        if (chapters.isEmpty()) return
 | 
			
		||||
 | 
			
		||||
        DeletingChaptersDialog().showDialog(router)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user