Fix ClusterStreamBrowse links - uses WebAPI

This commit is contained in:
Rahul Patel
2024-07-13 04:50:39 +05:30
parent 7917163a7c
commit e7d8960997
6 changed files with 34 additions and 57 deletions

View File

@@ -28,6 +28,7 @@ import androidx.navigation.fragment.findNavController
import androidx.viewbinding.ViewBinding import androidx.viewbinding.ViewBinding
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Category import com.aurora.gplayapi.data.models.Category
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.store.MobileNavigationDirections import com.aurora.store.MobileNavigationDirections
import com.google.gson.Gson import com.google.gson.Gson
import java.lang.reflect.ParameterizedType import java.lang.reflect.ParameterizedType
@@ -93,16 +94,15 @@ abstract class BaseFragment<ViewBindingType : ViewBinding> : Fragment() {
title title
) )
) )
} else {
findNavController().navigate(
MobileNavigationDirections.actionGlobalStreamBrowseFragment(
browseUrl,
title
)
)
} }
} }
fun openStreamBrowseFragment(streamCluster: StreamCluster) {
findNavController().navigate(
MobileNavigationDirections.actionGlobalStreamBrowseFragment(streamCluster)
)
}
fun openScreenshotFragment(app: App, position: Int) { fun openScreenshotFragment(app: App, position: Int) {
findNavController().navigate( findNavController().navigate(
MobileNavigationDirections.actionGlobalScreenshotFragment( MobileNavigationDirections.actionGlobalScreenshotFragment(

View File

@@ -88,7 +88,7 @@ class CategoryBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>()
} }
override fun onHeaderClicked(streamCluster: StreamCluster) { override fun onHeaderClicked(streamCluster: StreamCluster) {
openStreamBrowseFragment(streamCluster)
} }
override fun onClusterScrolled(streamCluster: StreamCluster) { override fun onClusterScrolled(streamCluster: StreamCluster) {

View File

@@ -98,7 +98,7 @@ class ForYouFragment : BaseFragment<FragmentForYouBinding>(),
} }
override fun onHeaderClicked(streamCluster: StreamCluster) { override fun onHeaderClicked(streamCluster: StreamCluster) {
openStreamBrowseFragment(streamCluster)
} }
override fun onClusterScrolled(streamCluster: StreamCluster) { override fun onClusterScrolled(streamCluster: StreamCluster) {

View File

@@ -38,38 +38,32 @@ class StreamBrowseFragment : BaseFragment<FragmentGenericWithToolbarBinding>() {
private val args: StreamBrowseFragmentArgs by navArgs() private val args: StreamBrowseFragmentArgs by navArgs()
private val viewModel: StreamBrowseViewModel by viewModels() private val viewModel: StreamBrowseViewModel by viewModels()
private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener private lateinit var streamCluster: StreamCluster
private lateinit var cluster: StreamCluster
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
streamCluster = args.cluster
// Toolbar // Toolbar
binding.layoutToolbarAction.apply { binding.layoutToolbarAction.apply {
txtTitle.text = args.title txtTitle.text = streamCluster.clusterTitle
imgActionPrimary.setOnClickListener { imgActionPrimary.setOnClickListener {
findNavController().navigateUp() findNavController().navigateUp()
} }
} }
viewModel.liveData.observe(viewLifecycleOwner) { binding.recycler.addOnScrollListener(object :
if (!::cluster.isInitialized) { EndlessRecyclerOnScrollListener(visibleThreshold = 4) {
endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) {
override fun onLoadMore(currentPage: Int) { viewModel.nextCluster()
viewModel.nextCluster()
}
}
binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener)
} }
})
cluster = it viewModel.initCluster(streamCluster)
viewModel.liveData.observe(viewLifecycleOwner) {
updateController(cluster) updateController(streamCluster)
binding.layoutToolbarAction.txtTitle.text = it.clusterTitle
} }
viewModel.getStreamBundle(args.browseUrl)
updateController(null)
} }
private fun updateController(streamCluster: StreamCluster?) { private fun updateController(streamCluster: StreamCluster?) {

View File

@@ -25,7 +25,8 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.gplayapi.helpers.StreamHelper import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.gplayapi.helpers.web.WebStreamHelper
import com.aurora.store.data.network.HttpClient import com.aurora.store.data.network.HttpClient
import com.aurora.store.data.providers.AuthProvider import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.util.Log import com.aurora.store.util.Log
@@ -43,31 +44,16 @@ class StreamBrowseViewModel @Inject constructor(
private val authProvider: AuthProvider private val authProvider: AuthProvider
) : ViewModel() { ) : ViewModel() {
private val streamHelper: StreamHelper = StreamHelper(authProvider.authData) private val streamHelper: StreamContract = WebStreamHelper()
.using(HttpClient.getPreferredClient(context)) .using(HttpClient.getPreferredClient(context))
val liveData: MutableLiveData<StreamCluster> = MutableLiveData() val liveData: MutableLiveData<StreamCluster> = MutableLiveData()
var streamCluster: StreamCluster = StreamCluster()
fun getStreamBundle(browseUrl: String) { private lateinit var streamCluster: StreamCluster
viewModelScope.launch(Dispatchers.IO) {
liveData.postValue(getInitialCluster(browseUrl))
}
}
private fun getInitialCluster(browseUrl: String): StreamCluster { fun initCluster(cluster: StreamCluster) {
val browseResponse = streamHelper.getBrowseStreamResponse(browseUrl) streamCluster = cluster
liveData.postValue(streamCluster)
if (browseResponse.contentsUrl.isNotEmpty())
streamCluster = streamHelper.getNextStreamCluster(browseResponse.contentsUrl)
else if (browseResponse.hasBrowseTab())
streamCluster = streamHelper.getNextStreamCluster(browseResponse.browseTab.listUrl)
streamCluster.apply {
clusterTitle = browseResponse.title
}
return streamCluster
} }
fun nextCluster() { fun nextCluster() {
@@ -75,18 +61,18 @@ class StreamBrowseViewModel @Inject constructor(
supervisorScope { supervisorScope {
try { try {
if (streamCluster.hasNext()) { if (streamCluster.hasNext()) {
val newCluster = streamHelper.getNextStreamCluster( val nextCluster = streamHelper.nextStreamCluster(
streamCluster.clusterNextPageUrl streamCluster.clusterNextPageUrl
) )
streamCluster.apply { streamCluster.apply {
clusterAppList.addAll(newCluster.clusterAppList) clusterAppList.addAll(nextCluster.clusterAppList)
clusterNextPageUrl = newCluster.clusterNextPageUrl clusterNextPageUrl = nextCluster.clusterNextPageUrl
} }
liveData.postValue(streamCluster) liveData.postValue(streamCluster)
} else { } else {
Log.i("End of Bundle") Log.i("End of Cluster")
} }
} catch (_: Exception) { } catch (_: Exception) {
} }

View File

@@ -255,11 +255,8 @@
android:name="com.aurora.store.view.ui.commons.StreamBrowseFragment" android:name="com.aurora.store.view.ui.commons.StreamBrowseFragment"
tools:layout="@layout/fragment_generic_with_toolbar" > tools:layout="@layout/fragment_generic_with_toolbar" >
<argument <argument
android:name="browseUrl" android:name="cluster"
app:argType="string" /> app:argType="com.aurora.gplayapi.data.models.StreamCluster" />
<argument
android:name="title"
app:argType="string" />
</fragment> </fragment>
<fragment <fragment
android:id="@+id/devAppsFragment" android:id="@+id/devAppsFragment"