fix crash in AccountListFragment (#1065)

* fix crash in AccountListFragment

* remove unnecessary subscribeOn
This commit is contained in:
Konrad Pozniak 2019-02-20 18:42:18 +01:00 committed by GitHub
commit 1621c1e689
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 28 deletions

View file

@ -20,6 +20,7 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@ -39,6 +40,10 @@ import com.keylesspalace.tusky.util.ThemeUtils
import com.keylesspalace.tusky.util.hide
import com.keylesspalace.tusky.util.show
import com.keylesspalace.tusky.view.EndlessOnScrollListener
import com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider.from
import com.uber.autodispose.autoDisposable
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import kotlinx.android.synthetic.main.fragment_account_list.*
import retrofit2.Call
import retrofit2.Callback
@ -46,6 +51,7 @@ import retrofit2.Response
import java.io.IOException
import javax.inject.Inject
class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
@Inject
@ -248,7 +254,7 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
Log.e(TAG, "Failed to $verb account id $accountId.")
}
private fun getFetchCallByListType(type: Type, fromId: String?): Call<List<Account>> {
private fun getFetchCallByListType(type: Type, fromId: String?): Single<Response<List<Account>>> {
return when (type) {
Type.FOLLOWS -> api.accountFollowing(id, fromId)
Type.FOLLOWERS -> api.accountFollowers(id, fromId)
@ -270,24 +276,22 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
recyclerView.post { adapter.setBottomLoading(true) }
}
val cb = object : Callback<List<Account>> {
override fun onResponse(call: Call<List<Account>>, response: Response<List<Account>>) {
val accountList = response.body()
if (response.isSuccessful && accountList != null) {
val linkHeader = response.headers().get("Link")
onFetchAccountsSuccess(accountList, linkHeader)
} else {
onFetchAccountsFailure(Exception(response.message()))
}
}
getFetchCallByListType(type, id)
.observeOn(AndroidSchedulers.mainThread())
.autoDisposable(from(this, Lifecycle.Event.ON_DESTROY))
.subscribe({ response ->
val accountList = response.body()
if (response.isSuccessful && accountList != null) {
val linkHeader = response.headers().get("Link")
onFetchAccountsSuccess(accountList, linkHeader)
} else {
onFetchAccountsFailure(Exception(response.message()))
}
}, {throwable ->
onFetchAccountsFailure(throwable)
})
override fun onFailure(call: Call<List<Account>>, t: Throwable) {
onFetchAccountsFailure(t as Exception)
}
}
val listCall = getFetchCallByListType(type, id)
callList.add(listCall)
listCall.enqueue(cb)
}
private fun onFetchAccountsSuccess(accounts: List<Account>, linkHeader: String?) {
@ -319,13 +323,13 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
}
}
private fun onFetchAccountsFailure(exception: Exception) {
private fun onFetchAccountsFailure(throwable: Throwable) {
fetching = false
Log.e(TAG, "Fetch failure", exception)
Log.e(TAG, "Fetch failure", throwable)
if (adapter.itemCount == 0) {
messageView.show()
if (exception is IOException) {
if (throwable is IOException) {
messageView.setup(R.drawable.elephant_offline, R.string.error_network) {
messageView.hide()
this.fetchAccounts(null)