fix crash in AccountListFragment (#1065)
* fix crash in AccountListFragment * remove unnecessary subscribeOn
This commit is contained in:
parent
7f99f936d1
commit
1621c1e689
2 changed files with 33 additions and 28 deletions
|
@ -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>>) {
|
||||
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)
|
||||
|
|
|
@ -38,6 +38,7 @@ import okhttp3.MultipartBody;
|
|||
import okhttp3.RequestBody;
|
||||
import okhttp3.ResponseBody;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Response;
|
||||
import retrofit2.http.DELETE;
|
||||
import retrofit2.http.Field;
|
||||
import retrofit2.http.FormUrlEncoded;
|
||||
|
@ -139,12 +140,12 @@ public interface MastodonApi {
|
|||
Call<StatusContext> statusContext(@Path("id") String statusId);
|
||||
|
||||
@GET("api/v1/statuses/{id}/reblogged_by")
|
||||
Call<List<Account>> statusRebloggedBy(
|
||||
Single<Response<List<Account>>> statusRebloggedBy(
|
||||
@Path("id") String statusId,
|
||||
@Query("max_id") String maxId);
|
||||
|
||||
@GET("api/v1/statuses/{id}/favourited_by")
|
||||
Call<List<Account>> statusFavouritedBy(
|
||||
Single<Response<List<Account>>> statusFavouritedBy(
|
||||
@Path("id") String statusId,
|
||||
@Query("max_id") String maxId);
|
||||
|
||||
|
@ -223,12 +224,12 @@ public interface MastodonApi {
|
|||
@Nullable @Query("pinned") Boolean pinned);
|
||||
|
||||
@GET("api/v1/accounts/{id}/followers")
|
||||
Call<List<Account>> accountFollowers(
|
||||
Single<Response<List<Account>>> accountFollowers(
|
||||
@Path("id") String accountId,
|
||||
@Query("max_id") String maxId);
|
||||
|
||||
@GET("api/v1/accounts/{id}/following")
|
||||
Call<List<Account>> accountFollowing(
|
||||
Single<Response<List<Account>>> accountFollowing(
|
||||
@Path("id") String accountId,
|
||||
@Query("max_id") String maxId);
|
||||
|
||||
|
@ -255,10 +256,10 @@ public interface MastodonApi {
|
|||
Call<List<Relationship>> relationships(@Query("id[]") List<String> accountIds);
|
||||
|
||||
@GET("api/v1/blocks")
|
||||
Call<List<Account>> blocks(@Query("max_id") String maxId);
|
||||
Single<Response<List<Account>>> blocks(@Query("max_id") String maxId);
|
||||
|
||||
@GET("api/v1/mutes")
|
||||
Call<List<Account>> mutes(@Query("max_id") String maxId);
|
||||
Single<Response<List<Account>>> mutes(@Query("max_id") String maxId);
|
||||
|
||||
@GET("api/v1/favourites")
|
||||
Call<List<Status>> favourites(
|
||||
|
@ -267,7 +268,7 @@ public interface MastodonApi {
|
|||
@Query("limit") Integer limit);
|
||||
|
||||
@GET("api/v1/follow_requests")
|
||||
Call<List<Account>> followRequests(@Query("max_id") String maxId);
|
||||
Single<Response<List<Account>>> followRequests(@Query("max_id") String maxId);
|
||||
|
||||
@POST("api/v1/follow_requests/{id}/authorize")
|
||||
Call<Relationship> authorizeFollowRequest(@Path("id") String accountId);
|
||||
|
|
Loading…
Reference in a new issue