This commit is contained in:
Admin
2020-02-01 14:05:19 +02:00
parent 97ef9ddb48
commit d46bbda0d0
15 changed files with 56 additions and 35 deletions

View File

@@ -20,7 +20,7 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.main.details.MangaDetailsActivity" />
<activity android:name="org.koitharu.kotatsu.ui.details.MangaDetailsActivity" />
</application>
</manifest>

View File

@@ -5,7 +5,7 @@ import androidx.recyclerview.widget.RecyclerView
import org.koin.core.KoinComponent
import org.koitharu.kotatsu.utils.ext.replaceWith
abstract class BaseRecyclerAdapter<T>(private val onItemClickListener: ((T) -> Unit)? = null) :
abstract class BaseRecyclerAdapter<T>(private val onItemClickListener: OnRecyclerItemClickListener<T>? = null) :
RecyclerView.Adapter<BaseViewHolder<T>>(),
KoinComponent {
@@ -65,13 +65,7 @@ abstract class BaseRecyclerAdapter<T>(private val onItemClickListener: ((T) -> U
final override fun getItemCount() = dataSet.size
final override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<T> {
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<T>) = Unit

View File

@@ -28,5 +28,17 @@ abstract class BaseViewHolder<T> protected constructor(view: View) :
fun requireData() = boundData ?: throw IllegalStateException("Calling requireData() before bind()")
fun setOnItemClickListener(listener: OnRecyclerItemClickListener<T>?): BaseViewHolder<T> {
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)
}

View File

@@ -0,0 +1,10 @@
package org.koitharu.kotatsu.ui.common.list
import android.view.View
interface OnRecyclerItemClickListener<I> {
fun onItemClick(item: I, position: Int, view: View)
fun onItemLongClick(item: I, position: Int, view: View) = false
}

View File

@@ -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.*

View File

@@ -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<MangaChapter>) :
BaseRecyclerAdapter<MangaChapter>(onItemClickListener) {
override fun onCreateViewHolder(parent: ViewGroup) = ChapterHolder(parent)

View File

@@ -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<MangaChapter> {
@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
}
}

View File

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

View File

@@ -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) {

View File

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

View File

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

View File

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

View File

@@ -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<Manga>) :
BaseRecyclerAdapter<Manga>(onItemClickListener) {
var listMode: ListMode = ListMode.LIST

View File

@@ -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<Manga> {
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)
}

View File

@@ -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">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"