DetailsMoreFragment: Drop dependency upon kovenant
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -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))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user