diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f16d451de..c04b7c14b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt index 899558782..55559eae2 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseRecyclerAdapter.kt @@ -5,7 +5,7 @@ import androidx.recyclerview.widget.RecyclerView import org.koin.core.KoinComponent import org.koitharu.kotatsu.utils.ext.replaceWith -abstract class BaseRecyclerAdapter(private val onItemClickListener: ((T) -> Unit)? = null) : +abstract class BaseRecyclerAdapter(private val onItemClickListener: OnRecyclerItemClickListener? = null) : RecyclerView.Adapter>(), KoinComponent { @@ -65,13 +65,7 @@ abstract class BaseRecyclerAdapter(private val onItemClickListener: ((T) -> U final override fun getItemCount() = dataSet.size final override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { - return onCreateViewHolder(parent).also { holder -> - if (onItemClickListener != null) { - holder.itemView.setOnClickListener { - onItemClickListener.invoke(holder.requireData()) - } - } - }.also(this::onViewHolderCreated) + return onCreateViewHolder(parent).setOnItemClickListener(onItemClickListener).also(this::onViewHolderCreated) } protected open fun onViewHolderCreated(holder: BaseViewHolder) = Unit diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt index b275074d5..321afa285 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/BaseViewHolder.kt @@ -28,5 +28,17 @@ abstract class BaseViewHolder protected constructor(view: View) : fun requireData() = boundData ?: throw IllegalStateException("Calling requireData() before bind()") + fun setOnItemClickListener(listener: OnRecyclerItemClickListener?): BaseViewHolder { + if (listener != null) { + itemView.setOnClickListener { + listener.onItemClick(boundData ?: return@setOnClickListener, adapterPosition, it) + } + itemView.setOnLongClickListener { + listener.onItemLongClick(boundData ?: return@setOnLongClickListener false, adapterPosition, it) + } + } + return this + } + abstract fun onBind(data: T) } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/common/list/OnRecyclerItemClickListener.kt b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/OnRecyclerItemClickListener.kt new file mode 100644 index 000000000..de1143d2d --- /dev/null +++ b/app/src/main/java/org/koitharu/kotatsu/ui/common/list/OnRecyclerItemClickListener.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.ui.common.list + +import android.view.View + +interface OnRecyclerItemClickListener { + + fun onItemClick(item: I, position: Int, view: View) + + fun onItemLongClick(item: I, position: Int, view: View) = false +} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChapterHolder.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChapterHolder.kt similarity index 90% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChapterHolder.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/ChapterHolder.kt index 5e0f2b556..84fa9632e 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChapterHolder.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChapterHolder.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details import android.view.ViewGroup import kotlinx.android.synthetic.main.item_chapter.* diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChaptersAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersAdapter.kt similarity index 58% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChaptersAdapter.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersAdapter.kt index 39e9a2965..e3924fdef 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChaptersAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersAdapter.kt @@ -1,11 +1,12 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details import android.view.ViewGroup +import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaChapter import org.koitharu.kotatsu.ui.common.list.BaseRecyclerAdapter -import org.koitharu.kotatsu.ui.common.list.BaseViewHolder +import org.koitharu.kotatsu.ui.common.list.OnRecyclerItemClickListener -class ChaptersAdapter(onItemClickListener: ((MangaChapter) -> Unit)?) : +class ChaptersAdapter(onItemClickListener: OnRecyclerItemClickListener) : BaseRecyclerAdapter(onItemClickListener) { override fun onCreateViewHolder(parent: ViewGroup) = ChapterHolder(parent) diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChaptersFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt similarity index 76% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChaptersFragment.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt index c89433a91..32813dc02 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/ChaptersFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/ChaptersFragment.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details import android.os.Bundle import android.view.View @@ -9,9 +9,12 @@ import kotlinx.android.synthetic.main.fragment_chapters.* import moxy.ktx.moxyPresenter import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga +import org.koitharu.kotatsu.core.model.MangaChapter import org.koitharu.kotatsu.ui.common.BaseFragment +import org.koitharu.kotatsu.ui.common.list.OnRecyclerItemClickListener -class ChaptersFragment : BaseFragment(R.layout.fragment_chapters), MangaDetailsView { +class ChaptersFragment : BaseFragment(R.layout.fragment_chapters), MangaDetailsView, + OnRecyclerItemClickListener { @Suppress("unused") private val presenter by moxyPresenter { (activity as MangaDetailsActivity).presenter } @@ -20,9 +23,7 @@ class ChaptersFragment : BaseFragment(R.layout.fragment_chapters), MangaDetailsV override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - adapter = ChaptersAdapter { - - } + adapter = ChaptersAdapter(this) recyclerView_chapters.addItemDecoration(DividerItemDecoration(view.context, RecyclerView.VERTICAL)) recyclerView_chapters.adapter = adapter } @@ -38,4 +39,8 @@ class ChaptersFragment : BaseFragment(R.layout.fragment_chapters), MangaDetailsV override fun onError(e: Exception) { } + + override fun onItemClick(item: MangaChapter, position: Int, view: View) { + //TODO + } } \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsActivity.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsActivity.kt similarity index 90% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsActivity.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsActivity.kt index f11fb4df1..0acc41cdb 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsActivity.kt @@ -1,11 +1,9 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details import android.content.Context import android.content.Intent import android.os.Bundle -import androidx.viewpager.widget.ViewPager import com.google.android.material.snackbar.Snackbar -import com.google.android.material.tabs.TabLayout import kotlinx.android.synthetic.main.activity_details.* import moxy.ktx.moxyPresenter import org.koitharu.kotatsu.R diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsAdapter.kt similarity index 88% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsAdapter.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsAdapter.kt index 087a68fb0..8b885165d 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsAdapter.kt @@ -1,10 +1,9 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details import android.content.res.Resources import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentPagerAdapter -import androidx.viewpager2.adapter.FragmentStateAdapter import org.koitharu.kotatsu.R class MangaDetailsAdapter(private val resources: Resources, fm: FragmentManager) : FragmentPagerAdapter(fm, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsFragment.kt similarity index 92% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsFragment.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsFragment.kt index 3f3cab43e..1f1f70116 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsFragment.kt @@ -1,11 +1,9 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details -import android.os.Bundle import androidx.core.view.isVisible import coil.api.load import kotlinx.android.synthetic.main.fragment_details.* import moxy.ktx.moxyPresenter -import org.koin.core.get import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.ui.common.BaseFragment diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsPresenter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsPresenter.kt similarity index 95% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsPresenter.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsPresenter.kt index a72a6cbbc..8898b2ce1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsPresenter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsPresenter.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsView.kt b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt similarity index 92% rename from app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsView.kt rename to app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt index bf3f9aa3e..060936af4 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/details/MangaDetailsView.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/details/MangaDetailsView.kt @@ -1,4 +1,4 @@ -package org.koitharu.kotatsu.ui.main.details +package org.koitharu.kotatsu.ui.details import moxy.MvpView import moxy.viewstate.strategy.AddToEndSingleStrategy diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListAdapter.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListAdapter.kt index 1004b725e..7a963ad65 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListAdapter.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListAdapter.kt @@ -4,8 +4,9 @@ import android.view.ViewGroup import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.prefs.ListMode import org.koitharu.kotatsu.ui.common.list.BaseRecyclerAdapter +import org.koitharu.kotatsu.ui.common.list.OnRecyclerItemClickListener -class MangaListAdapter(onItemClickListener: ((Manga) -> Unit)?) : +class MangaListAdapter(onItemClickListener: OnRecyclerItemClickListener) : BaseRecyclerAdapter(onItemClickListener) { var listMode: ListMode = ListMode.LIST diff --git a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt index b3f39d78f..e3be5c421 100644 --- a/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/ui/main/list/MangaListFragment.kt @@ -19,13 +19,14 @@ import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.core.prefs.ListMode import org.koitharu.kotatsu.ui.common.BaseFragment +import org.koitharu.kotatsu.ui.common.list.OnRecyclerItemClickListener import org.koitharu.kotatsu.ui.common.list.PaginationScrollListener import org.koitharu.kotatsu.ui.common.list.SpacingItemDecoration -import org.koitharu.kotatsu.ui.main.details.MangaDetailsActivity +import org.koitharu.kotatsu.ui.details.MangaDetailsActivity import org.koitharu.kotatsu.utils.ext.* class MangaListFragment : BaseFragment(R.layout.fragment_list), MangaListView, - PaginationScrollListener.Callback { + PaginationScrollListener.Callback, OnRecyclerItemClickListener { private val presenter by moxyPresenter(factory = ::MangaListPresenter) @@ -40,9 +41,7 @@ class MangaListFragment : BaseFragment(R.layout.fragment_list), MangaListView, override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - adapter = MangaListAdapter { - startActivity(MangaDetailsActivity.newIntent(context ?: return@MangaListAdapter, it)) - } + adapter = MangaListAdapter(this) initListMode(settings.listMode) recyclerView.adapter = adapter recyclerView.addOnScrollListener(PaginationScrollListener(4, this)) @@ -75,6 +74,10 @@ class MangaListFragment : BaseFragment(R.layout.fragment_list), MangaListView, else -> super.onOptionsItemSelected(item) } + override fun onItemClick(item: Manga, position: Int, view: View) { + startActivity(MangaDetailsActivity.newIntent(context ?: return, item)) + } + override fun onRequestMoreItems(offset: Int) { presenter.loadList(source, offset) } diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml index 25370ec6e..b6a527f1b 100644 --- a/app/src/main/res/layout/activity_details.xml +++ b/app/src/main/res/layout/activity_details.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.main.details.MangaDetailsActivity"> + tools:context=".ui.details.MangaDetailsActivity">