Notify user when they are ratelimited
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -28,7 +28,10 @@ import android.view.KeyEvent
|
||||
import android.view.View
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.widget.TextView
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.aurora.Constants
|
||||
import com.aurora.extensions.close
|
||||
import com.aurora.extensions.open
|
||||
@@ -48,6 +51,7 @@ import com.aurora.store.view.ui.downloads.DownloadActivity
|
||||
import com.aurora.store.view.ui.sheets.FilterSheet
|
||||
import com.aurora.store.viewmodel.search.SearchResultViewModel
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
|
||||
class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
|
||||
@@ -101,6 +105,18 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
|
||||
query?.let {
|
||||
updateQuery(it)
|
||||
}
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
VM.responseCode.collect {
|
||||
when (it) {
|
||||
429 -> attachErrorLayout(getString(R.string.rate_limited))
|
||||
else -> detachErrorLayout()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
@@ -110,6 +126,19 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
private fun attachErrorLayout(message: String) {
|
||||
B.recycler.visibility = View.GONE
|
||||
B.filterFab.visibility = View.GONE
|
||||
B.errorLayout.visibility = View.VISIBLE
|
||||
B.errorMessage.text = message
|
||||
}
|
||||
|
||||
private fun detachErrorLayout() {
|
||||
B.recycler.visibility = View.VISIBLE
|
||||
B.filterFab.visibility = View.VISIBLE
|
||||
B.errorLayout.visibility = View.GONE
|
||||
}
|
||||
|
||||
private fun attachToolbar() {
|
||||
searchView = B.layoutViewToolbar.inputSearch
|
||||
|
||||
@@ -253,4 +282,4 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,18 +21,25 @@ package com.aurora.store.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.aurora.store.data.RequestState
|
||||
import com.aurora.store.data.network.HttpClient
|
||||
import com.aurora.store.data.providers.NetworkProvider
|
||||
import com.aurora.store.util.Log
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.GsonBuilder
|
||||
import java.lang.reflect.Modifier
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
|
||||
abstract class BaseAndroidViewModel(application: Application) : AndroidViewModel(application),
|
||||
NetworkProvider.NetworkListener {
|
||||
|
||||
private lateinit var networkListener: NetworkProvider.NetworkListener
|
||||
|
||||
val responseCode = HttpClient.getPreferredClient().responseCode
|
||||
|
||||
protected val gson: Gson = GsonBuilder()
|
||||
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.STATIC)
|
||||
.create()
|
||||
@@ -45,6 +52,9 @@ abstract class BaseAndroidViewModel(application: Application) : AndroidViewModel
|
||||
requestState = RequestState.Init
|
||||
|
||||
NetworkProvider.addListener(this)
|
||||
|
||||
// Start collecting response code for requests
|
||||
responseCode.launchIn(viewModelScope)
|
||||
}
|
||||
|
||||
abstract fun observe()
|
||||
@@ -77,4 +87,4 @@ abstract class BaseAndroidViewModel(application: Application) : AndroidViewModel
|
||||
NetworkProvider.removeListener(this)
|
||||
super.onCleared()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
package com.aurora.store.viewmodel.search
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.aurora.gplayapi.data.models.AuthData
|
||||
@@ -29,11 +28,13 @@ import com.aurora.gplayapi.helpers.SearchHelper
|
||||
import com.aurora.store.data.network.HttpClient
|
||||
import com.aurora.store.data.providers.AuthProvider
|
||||
import com.aurora.extensions.flushAndAdd
|
||||
import com.aurora.store.data.RequestState
|
||||
import com.aurora.store.viewmodel.BaseAndroidViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.supervisorScope
|
||||
|
||||
class SearchResultViewModel(application: Application) : AndroidViewModel(application) {
|
||||
class SearchResultViewModel(application: Application) : BaseAndroidViewModel(application) {
|
||||
|
||||
private val authData: AuthData = AuthProvider
|
||||
.with(application)
|
||||
@@ -91,4 +92,8 @@ class SearchResultViewModel(application: Application) : AndroidViewModel(applica
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun observe() {
|
||||
requestState = RequestState.Init
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user