Fix ClusterStreamBrowse links - uses WebAPI
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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?) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user