Fix issues related to reviews
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user