Some fixes for favourites

This commit is contained in:
Koitharu
2020-12-08 07:26:52 +02:00
parent 6b529f806f
commit 71a5801a0c
6 changed files with 35 additions and 14 deletions

View File

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

View File

@@ -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()) }

View File

@@ -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()
}
}

View File

@@ -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()
}

View File

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

View File

@@ -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()
}
}
}
}
))
)
}
}