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