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.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
|
import androidx.fragment.app.viewModels
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.aurora.gplayapi.data.models.App
|
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.InfoViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.details.MoreBadgeViewModel_
|
import com.aurora.store.view.epoxy.views.details.MoreBadgeViewModel_
|
||||||
import com.aurora.store.view.ui.commons.BaseFragment
|
import com.aurora.store.view.ui.commons.BaseFragment
|
||||||
import nl.komponents.kovenant.task
|
import com.aurora.store.viewmodel.details.DetailsMoreViewModel
|
||||||
import nl.komponents.kovenant.ui.failUi
|
import kotlinx.coroutines.flow.collect
|
||||||
import nl.komponents.kovenant.ui.successUi
|
import kotlinx.coroutines.flow.drop
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
|
class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
|
||||||
|
|
||||||
@@ -47,6 +50,8 @@ class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
|
|||||||
private val binding: FragmentDetailsMoreBinding
|
private val binding: FragmentDetailsMoreBinding
|
||||||
get() = _binding!!
|
get() = _binding!!
|
||||||
|
|
||||||
|
private val viewModel: DetailsMoreViewModel by viewModels()
|
||||||
|
|
||||||
private val args: DetailsMoreFragmentArgs by navArgs()
|
private val args: DetailsMoreFragmentArgs by navArgs()
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@@ -60,7 +65,32 @@ class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
|
|||||||
|
|
||||||
inflateDescription(args.app)
|
inflateDescription(args.app)
|
||||||
inflateFiles(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() {
|
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