From 2d53cbdc9d7eadf62af30a06bcad07e6200e599b Mon Sep 17 00:00:00 2001 From: Rahul Kumar Patel Date: Sun, 7 Mar 2021 01:19:25 +0530 Subject: [PATCH] Fix issues related to reviews --- app/build.gradle | 2 +- .../view/ui/details/BaseDetailsActivity.kt | 6 +-- .../view/ui/details/DetailsReviewActivity.kt | 47 ++++++++++--------- .../store/viewmodel/review/ReviewViewModel.kt | 33 ++++++++----- .../res/layout/activity_details_review.xml | 1 + 5 files changed, 53 insertions(+), 36 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b811a440a..d3941bee2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -167,7 +167,7 @@ dependencies { implementation "com.github.topjohnwu.libsu:core:${versions.libsu}" //Love <3 - api("com.gitlab.AuroraOSS:gplayapi:7d7a0deab4") + api("com.gitlab.AuroraOSS:gplayapi:fe28788fa0") } Properties props = new Properties() diff --git a/app/src/main/java/com/aurora/store/view/ui/details/BaseDetailsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/BaseDetailsActivity.kt index 04e5aca57..3d3ef00c3 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/BaseDetailsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/BaseDetailsActivity.kt @@ -152,7 +152,7 @@ abstract class BaseDetailsActivity : BaseActivity() { } task { - fetchFirstFewReviews(app) + fetchReviewSummary(app) } successUi { B.epoxyRecycler.withModels { it.take(4) @@ -387,13 +387,13 @@ abstract class BaseDetailsActivity : BaseActivity() { } } - private fun fetchFirstFewReviews(app: App): List { + private fun fetchReviewSummary(app: App): List { val authData = AuthProvider .with(this) .getAuthData() val reviewsHelper = ReviewsHelper(authData) .using(HttpClient.getPreferredClient()) - return reviewsHelper.getReviews(app.packageName, Review.Filter.CRITICAL) + return reviewsHelper.getReviewSummary(app.packageName) } /* App Privacy Helpers */ diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt index d7f245682..9bb77b91f 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewActivity.kt @@ -22,13 +22,14 @@ package com.aurora.store.view.ui.details import android.os.Bundle import androidx.lifecycle.ViewModelProvider import com.aurora.Constants +import com.aurora.extensions.close import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.Review +import com.aurora.gplayapi.data.models.ReviewCluster import com.aurora.store.R -import com.aurora.store.data.ViewState import com.aurora.store.databinding.ActivityDetailsReviewBinding -import com.aurora.extensions.close import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener +import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.details.ReviewViewModel_ import com.aurora.store.view.ui.commons.BaseActivity import com.aurora.store.viewmodel.review.ReviewViewModel @@ -37,9 +38,12 @@ class DetailsReviewActivity : BaseActivity() { private lateinit var B: ActivityDetailsReviewBinding private lateinit var VM: ReviewViewModel + private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private lateinit var app: App private lateinit var filter: Review.Filter + private lateinit var reviewCluster: ReviewCluster override fun onConnected() { @@ -61,23 +65,16 @@ class DetailsReviewActivity : BaseActivity() { setContentView(B.root) VM.liveData.observe(this, { - when (it) { - is ViewState.Empty -> { - } - is ViewState.Loading -> { - } - is ViewState.Error -> { - } - is ViewState.Success<*> -> { - updateController(it.data as List) - } - else -> { + if (!::reviewCluster.isInitialized) { + attachRecycler() + } - } + it?.let { + reviewCluster = it + updateController(reviewCluster) } }) - attachRecycler() attachChips() val itemRaw: String? = intent.getStringExtra(Constants.STRING_EXTRA) @@ -120,21 +117,31 @@ class DetailsReviewActivity : BaseActivity() { private fun attachRecycler() { endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) { - VM.fetchReview(app.packageName, filter) + if (::reviewCluster.isInitialized) { + VM.next(reviewCluster.nextPageUrl) + } } } B.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) } - private fun updateController(reviews: List) { + private fun updateController(reviewCluster: ReviewCluster) { B.recycler.withModels { - reviews.forEach { + setFilterDuplicates(true) + reviewCluster.reviewList.forEach { add( ReviewViewModel_() - .id(it.userName) + .id(it.commentId) .review(it) ) } + + if (reviewCluster.hasNext()){ + add( + AppProgressViewModel_() + .id("progress") + ) + } } } @@ -144,7 +151,5 @@ class DetailsReviewActivity : BaseActivity() { private fun resetPage() { endlessRecyclerOnScrollListener.resetPageCount() - B.recycler.clear() - VM.reset() } } diff --git a/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt index 8a722da5a..3c8a37f50 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt @@ -24,9 +24,9 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.Review +import com.aurora.gplayapi.data.models.ReviewCluster import com.aurora.gplayapi.helpers.ReviewsHelper import com.aurora.store.data.RequestState -import com.aurora.store.data.ViewState import com.aurora.store.data.network.HttpClient import com.aurora.store.data.providers.AuthProvider import com.aurora.store.viewmodel.BaseAndroidViewModel @@ -43,19 +43,16 @@ class ReviewViewModel(application: Application) : BaseAndroidViewModel(applicati var reviewsHelper: ReviewsHelper = ReviewsHelper(authData) .using(HttpClient.getPreferredClient()) - val liveData: MutableLiveData = MutableLiveData() + val liveData: MutableLiveData = MutableLiveData() - private val reviews: MutableList = mutableListOf() - private var offset: Int = 0 + private lateinit var reviewsCluster: ReviewCluster fun fetchReview(packageName: String, filter: Review.Filter) { viewModelScope.launch(Dispatchers.IO) { supervisorScope { try { - val newReviews = reviewsHelper.getReviews(packageName, filter, offset) - reviews.addAll(newReviews) - offset = reviews.size - liveData.postValue(ViewState.Success(reviews)) + reviewsCluster = reviewsHelper.getReviews(packageName, filter) + liveData.postValue(reviewsCluster) } catch (e: Exception) { requestState = RequestState.Pending } @@ -63,9 +60,23 @@ class ReviewViewModel(application: Application) : BaseAndroidViewModel(applicati } } - fun reset() { - reviews.clear() - offset = 0 + fun next(nextReviewPageUrl: String) { + viewModelScope.launch(Dispatchers.IO) { + supervisorScope { + try { + val nextReviewCluster = reviewsHelper.next(nextReviewPageUrl) + + reviewsCluster.apply { + reviewList.addAll(nextReviewCluster.reviewList) + nextPageUrl = nextReviewCluster.nextPageUrl + } + + liveData.postValue(reviewsCluster) + } catch (e: Exception) { + requestState = RequestState.Pending + } + } + } } override fun observe() { diff --git a/app/src/main/res/layout/activity_details_review.xml b/app/src/main/res/layout/activity_details_review.xml index 3b5d60278..194c5fcf9 100644 --- a/app/src/main/res/layout/activity_details_review.xml +++ b/app/src/main/res/layout/activity_details_review.xml @@ -110,6 +110,7 @@ android:orientation="vertical" android:overScrollMode="never" android:paddingStart="@dimen/padding_normal" + android:paddingEnd="0dp" android:scrollbars="none" app:itemSpacing="@dimen/margin_normal" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"