97 lines
No EOL
3.4 KiB
Kotlin
97 lines
No EOL
3.4 KiB
Kotlin
package ani.dantotsu.settings
|
|
|
|
import android.app.NotificationManager
|
|
import android.content.Context
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.viewModels
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import ani.dantotsu.databinding.FragmentExtensionsBinding
|
|
import ani.dantotsu.settings.paging.MangaExtensionAdapter
|
|
import ani.dantotsu.settings.paging.MangaExtensionsViewModel
|
|
import ani.dantotsu.settings.paging.MangaExtensionsViewModelFactory
|
|
import ani.dantotsu.settings.paging.OnMangaInstallClickListener
|
|
import eu.kanade.tachiyomi.extension.manga.MangaExtensionManager
|
|
import eu.kanade.tachiyomi.extension.manga.model.MangaExtension
|
|
import kotlinx.coroutines.flow.collectLatest
|
|
import kotlinx.coroutines.launch
|
|
import rx.android.schedulers.AndroidSchedulers
|
|
import uy.kohesive.injekt.Injekt
|
|
import uy.kohesive.injekt.api.get
|
|
|
|
class MangaExtensionsFragment : Fragment(),
|
|
SearchQueryHandler, OnMangaInstallClickListener {
|
|
private var _binding: FragmentExtensionsBinding? = null
|
|
private val binding get() = _binding!!
|
|
|
|
private val viewModel: MangaExtensionsViewModel by viewModels {
|
|
MangaExtensionsViewModelFactory(mangaExtensionManager)
|
|
}
|
|
|
|
private val adapter by lazy {
|
|
MangaExtensionAdapter(this)
|
|
}
|
|
|
|
private val mangaExtensionManager: MangaExtensionManager = Injekt.get()
|
|
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater,
|
|
container: ViewGroup?,
|
|
savedInstanceState: Bundle?
|
|
): View {
|
|
_binding = FragmentExtensionsBinding.inflate(inflater, container, false)
|
|
|
|
binding.allExtensionsRecyclerView.isNestedScrollingEnabled = false
|
|
binding.allExtensionsRecyclerView.adapter = adapter
|
|
binding.allExtensionsRecyclerView.layoutManager = LinearLayoutManager(context)
|
|
(binding.allExtensionsRecyclerView.layoutManager as LinearLayoutManager).isItemPrefetchEnabled =
|
|
true
|
|
|
|
lifecycleScope.launch {
|
|
viewModel.pagerFlow.collectLatest { pagingData ->
|
|
adapter.submitData(pagingData)
|
|
}
|
|
}
|
|
|
|
viewModel.invalidatePager() // Force a refresh of the pager
|
|
|
|
return binding.root
|
|
}
|
|
|
|
override fun updateContentBasedOnQuery(query: String?) {
|
|
viewModel.setSearchQuery(query ?: "")
|
|
}
|
|
|
|
override fun notifyDataChanged() {
|
|
viewModel.invalidatePager()
|
|
}
|
|
|
|
override fun onInstallClick(pkg: MangaExtension.Available) {
|
|
if (isAdded) { // Check if the fragment is currently added to its activity
|
|
val context = requireContext()
|
|
val notificationManager =
|
|
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
|
val installerSteps = InstallerSteps(notificationManager, context)
|
|
|
|
// Start the installation process
|
|
mangaExtensionManager.installExtension(pkg)
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribe(
|
|
{ installStep -> installerSteps.onInstallStep(installStep) {} },
|
|
{ error -> installerSteps.onError(error) {} },
|
|
{ installerSteps.onComplete { viewModel.invalidatePager() } }
|
|
)
|
|
}
|
|
}
|
|
|
|
override fun onDestroyView() {
|
|
super.onDestroyView();_binding = null
|
|
}
|
|
|
|
|
|
} |