fix crash in AccountListFragment (#1065)

* fix crash in AccountListFragment

* remove unnecessary subscribeOn
main
Konrad Pozniak 6 years ago committed by GitHub
parent e9ada19328
commit 0efd3347d2
  1. 46
      app/src/main/java/com/keylesspalace/tusky/fragment/AccountListFragment.kt
  2. 15
      app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.java

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

@ -38,6 +38,7 @@ import okhttp3.MultipartBody;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Response;
import retrofit2.http.DELETE; import retrofit2.http.DELETE;
import retrofit2.http.Field; import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded; import retrofit2.http.FormUrlEncoded;
@ -139,12 +140,12 @@ public interface MastodonApi {
Call<StatusContext> statusContext(@Path("id") String statusId); Call<StatusContext> statusContext(@Path("id") String statusId);
@GET("api/v1/statuses/{id}/reblogged_by") @GET("api/v1/statuses/{id}/reblogged_by")
Call<List<Account>> statusRebloggedBy( Single<Response<List<Account>>> statusRebloggedBy(
@Path("id") String statusId, @Path("id") String statusId,
@Query("max_id") String maxId); @Query("max_id") String maxId);
@GET("api/v1/statuses/{id}/favourited_by") @GET("api/v1/statuses/{id}/favourited_by")
Call<List<Account>> statusFavouritedBy( Single<Response<List<Account>>> statusFavouritedBy(
@Path("id") String statusId, @Path("id") String statusId,
@Query("max_id") String maxId); @Query("max_id") String maxId);
@ -223,12 +224,12 @@ public interface MastodonApi {
@Nullable @Query("pinned") Boolean pinned); @Nullable @Query("pinned") Boolean pinned);
@GET("api/v1/accounts/{id}/followers") @GET("api/v1/accounts/{id}/followers")
Call<List<Account>> accountFollowers( Single<Response<List<Account>>> accountFollowers(
@Path("id") String accountId, @Path("id") String accountId,
@Query("max_id") String maxId); @Query("max_id") String maxId);
@GET("api/v1/accounts/{id}/following") @GET("api/v1/accounts/{id}/following")
Call<List<Account>> accountFollowing( Single<Response<List<Account>>> accountFollowing(
@Path("id") String accountId, @Path("id") String accountId,
@Query("max_id") String maxId); @Query("max_id") String maxId);
@ -255,10 +256,10 @@ public interface MastodonApi {
Call<List<Relationship>> relationships(@Query("id[]") List<String> accountIds); Call<List<Relationship>> relationships(@Query("id[]") List<String> accountIds);
@GET("api/v1/blocks") @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") @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") @GET("api/v1/favourites")
Call<List<Status>> favourites( Call<List<Status>> favourites(
@ -267,7 +268,7 @@ public interface MastodonApi {
@Query("limit") Integer limit); @Query("limit") Integer limit);
@GET("api/v1/follow_requests") @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") @POST("api/v1/follow_requests/{id}/authorize")
Call<Relationship> authorizeFollowRequest(@Path("id") String accountId); Call<Relationship> authorizeFollowRequest(@Path("id") String accountId);

Loading…
Cancel
Save