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">