Fix issues related to reviews

This commit is contained in:
Rahul Kumar Patel
2021-03-07 01:19:25 +05:30
parent 9c4fc5109c
commit 2d53cbdc9d
5 changed files with 53 additions and 36 deletions

View File

@@ -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<Review> {
private fun fetchReviewSummary(app: App): List<Review> {
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 */

View File

@@ -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<Review>)
}
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<Review>) {
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()
}
}

View File

@@ -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<ViewState> = MutableLiveData()
val liveData: MutableLiveData<ReviewCluster> = MutableLiveData()
private val reviews: MutableList<Review> = 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() {

View File

@@ -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"