DetailsMoreFragment: Drop dependency upon kovenant

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-07-20 18:37:27 +05:30
parent aeb2a136ec
commit c7d3cd73c1
2 changed files with 69 additions and 41 deletions

View File

@@ -22,6 +22,8 @@ package com.aurora.store.view.ui.details
import android.os.Bundle
import android.view.View
import androidx.core.text.HtmlCompat
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.aurora.gplayapi.data.models.App
@@ -37,9 +39,10 @@ import com.aurora.store.view.epoxy.views.details.FileViewModel_
import com.aurora.store.view.epoxy.views.details.InfoViewModel_
import com.aurora.store.view.epoxy.views.details.MoreBadgeViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import nl.komponents.kovenant.task
import nl.komponents.kovenant.ui.failUi
import nl.komponents.kovenant.ui.successUi
import com.aurora.store.viewmodel.details.DetailsMoreViewModel
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.launch
class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
@@ -47,6 +50,8 @@ class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
private val binding: FragmentDetailsMoreBinding
get() = _binding!!
private val viewModel: DetailsMoreViewModel by viewModels()
private val args: DetailsMoreFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -60,7 +65,32 @@ class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
inflateDescription(args.app)
inflateFiles(args.app)
fetchDependentApps(args.app)
viewModel.fetchDependentApps(view.context, args.app)
viewLifecycleOwner.lifecycleScope.launch {
viewModel.dependentApps.collect { list ->
if (list.isNotEmpty()) {
binding.recyclerDependency.withModels {
list.filter { it.displayName.isNotEmpty() }.forEach {
add(
AppDependentViewModel_()
.id(it.id)
.app(it)
.click { _ -> openDetailsFragment(it) }
)
}
}
} else {
binding.recyclerDependency.withModels {
add(
NoAppAltViewModel_()
.id("no_app")
.message(getString(R.string.details_no_dependencies))
)
}
}
}
}
}
override fun onDestroyView() {
@@ -140,41 +170,4 @@ class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
}
}
}
private fun fetchDependentApps(app: App) {
val authData: AuthData = AuthProvider
.with(requireContext())
.getAuthData()
task {
AppDetailsHelper(authData)
.getAppByPackageName(app.dependencies.dependentPackages)
} successUi {
binding.recyclerDependency.withModels {
if (it.isNotEmpty()) {
it.filter { it.displayName.isNotEmpty() }.forEach {
add(
AppDependentViewModel_()
.id(it.id)
.app(it)
.click { _ -> openDetailsFragment(it) }
)
}
} else {
add(
NoAppAltViewModel_()
.id("no_app")
.message(getString(R.string.details_no_dependencies))
)
}
}
} failUi {
binding.recyclerDependency.withModels {
add(
NoAppAltViewModel_()
.id("no_app")
.message(getString(R.string.details_no_dependencies))
)
}
}
}
}

View File

@@ -0,0 +1,35 @@
package com.aurora.store.viewmodel.details
import android.content.Context
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.store.data.providers.AuthProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.launch
class DetailsMoreViewModel : ViewModel() {
private val TAG = DetailsMoreViewModel::class.java.simpleName
private val _dependentApps = MutableSharedFlow<List<App>>()
val dependentApps = _dependentApps.asSharedFlow()
fun fetchDependentApps(context: Context, app: App) {
viewModelScope.launch(Dispatchers.IO) {
try {
val authData: AuthData = AuthProvider.with(context).getAuthData()
_dependentApps.emit(AppDetailsHelper(authData)
.getAppByPackageName(app.dependencies.dependentPackages))
} catch (exception: Exception) {
Log.e(TAG, "Failed to fetch dependencies", exception)
_dependentApps.emit(emptyList())
}
}
}
}