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

@@ -167,7 +167,7 @@ dependencies {
implementation "com.github.topjohnwu.libsu:core:${versions.libsu}" implementation "com.github.topjohnwu.libsu:core:${versions.libsu}"
//Love <3 //Love <3
api("com.gitlab.AuroraOSS:gplayapi:7d7a0deab4") api("com.gitlab.AuroraOSS:gplayapi:fe28788fa0")
} }
Properties props = new Properties() Properties props = new Properties()

View File

@@ -152,7 +152,7 @@ abstract class BaseDetailsActivity : BaseActivity() {
} }
task { task {
fetchFirstFewReviews(app) fetchReviewSummary(app)
} successUi { } successUi {
B.epoxyRecycler.withModels { B.epoxyRecycler.withModels {
it.take(4) 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 val authData = AuthProvider
.with(this) .with(this)
.getAuthData() .getAuthData()
val reviewsHelper = ReviewsHelper(authData) val reviewsHelper = ReviewsHelper(authData)
.using(HttpClient.getPreferredClient()) .using(HttpClient.getPreferredClient())
return reviewsHelper.getReviews(app.packageName, Review.Filter.CRITICAL) return reviewsHelper.getReviewSummary(app.packageName)
} }
/* App Privacy Helpers */ /* App Privacy Helpers */

View File

@@ -22,13 +22,14 @@ package com.aurora.store.view.ui.details
import android.os.Bundle import android.os.Bundle
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.aurora.Constants import com.aurora.Constants
import com.aurora.extensions.close
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Review import com.aurora.gplayapi.data.models.Review
import com.aurora.gplayapi.data.models.ReviewCluster
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.ViewState
import com.aurora.store.databinding.ActivityDetailsReviewBinding import com.aurora.store.databinding.ActivityDetailsReviewBinding
import com.aurora.extensions.close
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener 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.epoxy.views.details.ReviewViewModel_
import com.aurora.store.view.ui.commons.BaseActivity import com.aurora.store.view.ui.commons.BaseActivity
import com.aurora.store.viewmodel.review.ReviewViewModel import com.aurora.store.viewmodel.review.ReviewViewModel
@@ -37,9 +38,12 @@ class DetailsReviewActivity : BaseActivity() {
private lateinit var B: ActivityDetailsReviewBinding private lateinit var B: ActivityDetailsReviewBinding
private lateinit var VM: ReviewViewModel private lateinit var VM: ReviewViewModel
private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener
private lateinit var app: App private lateinit var app: App
private lateinit var filter: Review.Filter private lateinit var filter: Review.Filter
private lateinit var reviewCluster: ReviewCluster
override fun onConnected() { override fun onConnected() {
@@ -61,23 +65,16 @@ class DetailsReviewActivity : BaseActivity() {
setContentView(B.root) setContentView(B.root)
VM.liveData.observe(this, { VM.liveData.observe(this, {
when (it) { if (!::reviewCluster.isInitialized) {
is ViewState.Empty -> { attachRecycler()
} }
is ViewState.Loading -> {
}
is ViewState.Error -> {
}
is ViewState.Success<*> -> {
updateController(it.data as List<Review>)
}
else -> {
} it?.let {
reviewCluster = it
updateController(reviewCluster)
} }
}) })
attachRecycler()
attachChips() attachChips()
val itemRaw: String? = intent.getStringExtra(Constants.STRING_EXTRA) val itemRaw: String? = intent.getStringExtra(Constants.STRING_EXTRA)
@@ -120,21 +117,31 @@ class DetailsReviewActivity : BaseActivity() {
private fun attachRecycler() { private fun attachRecycler() {
endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() {
override fun onLoadMore(currentPage: Int) { override fun onLoadMore(currentPage: Int) {
VM.fetchReview(app.packageName, filter) if (::reviewCluster.isInitialized) {
VM.next(reviewCluster.nextPageUrl)
}
} }
} }
B.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) B.recycler.addOnScrollListener(endlessRecyclerOnScrollListener)
} }
private fun updateController(reviews: List<Review>) { private fun updateController(reviewCluster: ReviewCluster) {
B.recycler.withModels { B.recycler.withModels {
reviews.forEach { setFilterDuplicates(true)
reviewCluster.reviewList.forEach {
add( add(
ReviewViewModel_() ReviewViewModel_()
.id(it.userName) .id(it.commentId)
.review(it) .review(it)
) )
} }
if (reviewCluster.hasNext()){
add(
AppProgressViewModel_()
.id("progress")
)
}
} }
} }
@@ -144,7 +151,5 @@ class DetailsReviewActivity : BaseActivity() {
private fun resetPage() { private fun resetPage() {
endlessRecyclerOnScrollListener.resetPageCount() endlessRecyclerOnScrollListener.resetPageCount()
B.recycler.clear()
VM.reset()
} }
} }

View File

@@ -24,9 +24,9 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.Review import com.aurora.gplayapi.data.models.Review
import com.aurora.gplayapi.data.models.ReviewCluster
import com.aurora.gplayapi.helpers.ReviewsHelper import com.aurora.gplayapi.helpers.ReviewsHelper
import com.aurora.store.data.RequestState import com.aurora.store.data.RequestState
import com.aurora.store.data.ViewState
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.viewmodel.BaseAndroidViewModel import com.aurora.store.viewmodel.BaseAndroidViewModel
@@ -43,19 +43,16 @@ class ReviewViewModel(application: Application) : BaseAndroidViewModel(applicati
var reviewsHelper: ReviewsHelper = ReviewsHelper(authData) var reviewsHelper: ReviewsHelper = ReviewsHelper(authData)
.using(HttpClient.getPreferredClient()) .using(HttpClient.getPreferredClient())
val liveData: MutableLiveData<ViewState> = MutableLiveData() val liveData: MutableLiveData<ReviewCluster> = MutableLiveData()
private val reviews: MutableList<Review> = mutableListOf() private lateinit var reviewsCluster: ReviewCluster
private var offset: Int = 0
fun fetchReview(packageName: String, filter: Review.Filter) { fun fetchReview(packageName: String, filter: Review.Filter) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
supervisorScope { supervisorScope {
try { try {
val newReviews = reviewsHelper.getReviews(packageName, filter, offset) reviewsCluster = reviewsHelper.getReviews(packageName, filter)
reviews.addAll(newReviews) liveData.postValue(reviewsCluster)
offset = reviews.size
liveData.postValue(ViewState.Success(reviews))
} catch (e: Exception) { } catch (e: Exception) {
requestState = RequestState.Pending requestState = RequestState.Pending
} }
@@ -63,9 +60,23 @@ class ReviewViewModel(application: Application) : BaseAndroidViewModel(applicati
} }
} }
fun reset() { fun next(nextReviewPageUrl: String) {
reviews.clear() viewModelScope.launch(Dispatchers.IO) {
offset = 0 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() { override fun observe() {

View File

@@ -110,6 +110,7 @@
android:orientation="vertical" android:orientation="vertical"
android:overScrollMode="never" android:overScrollMode="never"
android:paddingStart="@dimen/padding_normal" android:paddingStart="@dimen/padding_normal"
android:paddingEnd="0dp"
android:scrollbars="none" android:scrollbars="none"
app:itemSpacing="@dimen/margin_normal" app:itemSpacing="@dimen/margin_normal"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"