Some fixes for favourites
This commit is contained in:
@@ -3,15 +3,14 @@ package org.koitharu.kotatsu.base.domain
|
||||
import okhttp3.*
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.get
|
||||
import org.koin.core.component.inject
|
||||
import org.koitharu.kotatsu.core.model.MangaSource
|
||||
import org.koitharu.kotatsu.core.prefs.SourceSettings
|
||||
import org.koitharu.kotatsu.utils.ext.await
|
||||
|
||||
open class MangaLoaderContext : KoinComponent {
|
||||
|
||||
private val okHttp by inject<OkHttpClient>()
|
||||
private val cookieJar by inject<CookieJar>()
|
||||
open class MangaLoaderContext(
|
||||
private val okHttp: OkHttpClient,
|
||||
private val cookieJar: CookieJar
|
||||
) : KoinComponent {
|
||||
|
||||
suspend fun httpGet(url: String): Response {
|
||||
val request = Request.Builder()
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.koitharu.kotatsu.core.parser.site.*
|
||||
val parserModule
|
||||
get() = module {
|
||||
|
||||
single { MangaLoaderContext() }
|
||||
single { MangaLoaderContext(get(), get()) }
|
||||
|
||||
factory<MangaRepository>(named(MangaSource.READMANGA_RU)) { ReadmangaRepository(get()) }
|
||||
factory<MangaRepository>(named(MangaSource.MINTMANGA)) { MintMangaRepository(get()) }
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.koitharu.kotatsu.favourites.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import android.view.*
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
@@ -21,14 +22,15 @@ class FavouritesContainerFragment : BaseFragment<FragmentFavouritesBinding>(),
|
||||
FavouritesTabLongClickListener, CategoriesEditDelegate.CategoriesEditCallback {
|
||||
|
||||
private val viewModel by viewModel<FavouritesCategoriesViewModel>()
|
||||
|
||||
private val editDelegate by lazy(LazyThreadSafetyMode.NONE) {
|
||||
CategoriesEditDelegate(requireContext(), this)
|
||||
}
|
||||
private var adapterState: Parcelable? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
adapterState = savedInstanceState?.getParcelable(KEY_ADAPTER_STATE) ?: adapterState
|
||||
}
|
||||
|
||||
override fun onInflateView(
|
||||
@@ -39,6 +41,7 @@ class FavouritesContainerFragment : BaseFragment<FragmentFavouritesBinding>(),
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val adapter = FavouritesPagerAdapter(this, this)
|
||||
adapterState?.let(adapter::restoreState)
|
||||
binding.pager.adapter = adapter
|
||||
TabLayoutMediator(binding.tabs, binding.pager, adapter).attach()
|
||||
|
||||
@@ -46,6 +49,16 @@ class FavouritesContainerFragment : BaseFragment<FragmentFavouritesBinding>(),
|
||||
viewModel.onError.observe(viewLifecycleOwner, ::onError)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
adapterState = (binding.pager.adapter as? FavouritesPagerAdapter)?.saveState()
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
override fun onSaveInstanceState(outState: Bundle) {
|
||||
super.onSaveInstanceState(outState)
|
||||
outState.putParcelable(KEY_ADAPTER_STATE, adapterState)
|
||||
}
|
||||
|
||||
private fun onCategoriesChanged(categories: List<FavouriteCategory>) {
|
||||
val data = ArrayList<FavouriteCategory>(categories.size + 1)
|
||||
data += FavouriteCategory(0L, getString(R.string.all_favourites), -1, Date())
|
||||
@@ -103,6 +116,8 @@ class FavouritesContainerFragment : BaseFragment<FragmentFavouritesBinding>(),
|
||||
|
||||
companion object {
|
||||
|
||||
private const val KEY_ADAPTER_STATE = "adapter_state"
|
||||
|
||||
fun newInstance() = FavouritesContainerFragment()
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,8 @@ class CategoriesActivity : BaseActivity<ActivityCategoriesBinding>(),
|
||||
}
|
||||
|
||||
private fun onCategoriesChanged(categories: List<FavouriteCategory>) {
|
||||
// TODO check if not moved
|
||||
|
||||
adapter.items = categories
|
||||
binding.textViewHolder.isVisible = categories.isEmpty()
|
||||
}
|
||||
|
||||
@@ -12,6 +12,11 @@ class CategoriesAdapter(
|
||||
|
||||
init {
|
||||
delegatesManager.addDelegate(categoryAD(onItemClickListener))
|
||||
setHasStableIds(true)
|
||||
}
|
||||
|
||||
override fun getItemId(position: Int): Long {
|
||||
return items[position].id
|
||||
}
|
||||
|
||||
private class DiffCallback : DiffUtil.ItemCallback<FavouriteCategory>() {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.koitharu.kotatsu.parsers
|
||||
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import okhttp3.CookieJar
|
||||
import okhttp3.OkHttpClient
|
||||
import org.junit.Assert
|
||||
import org.junit.BeforeClass
|
||||
@@ -11,10 +12,10 @@ import org.koin.core.context.startKoin
|
||||
import org.koin.dsl.module
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import org.koitharu.kotatsu.base.domain.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.core.model.MangaSource
|
||||
import org.koitharu.kotatsu.core.network.UserAgentInterceptor
|
||||
import org.koitharu.kotatsu.core.prefs.SourceSettings
|
||||
import org.koitharu.kotatsu.base.domain.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.utils.AssertX
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@@ -91,28 +92,27 @@ class RemoteRepositoryTest(source: MangaSource) : KoinTest {
|
||||
@BeforeClass
|
||||
fun initialize() {
|
||||
startKoin {
|
||||
modules(listOf(
|
||||
modules(
|
||||
module {
|
||||
single<CookieJar> { TemporaryCookieJar() }
|
||||
factory {
|
||||
OkHttpClient.Builder()
|
||||
.cookieJar(TemporaryCookieJar())
|
||||
.cookieJar(get())
|
||||
.addInterceptor(UserAgentInterceptor())
|
||||
.connectTimeout(20, TimeUnit.SECONDS)
|
||||
.readTimeout(60, TimeUnit.SECONDS)
|
||||
.writeTimeout(20, TimeUnit.SECONDS)
|
||||
.build()
|
||||
}
|
||||
},
|
||||
module {
|
||||
single<MangaLoaderContext> {
|
||||
object : MangaLoaderContext() {
|
||||
object : MangaLoaderContext(get(), get()) {
|
||||
override fun getSettings(source: MangaSource): SourceSettings {
|
||||
return SourceSettingsMock()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user