From 0d962c7cc12ce1ec90efabb6348bae79a0d36b78 Mon Sep 17 00:00:00 2001 From: Nik Clayton Date: Tue, 6 Dec 2022 20:23:48 +0100 Subject: [PATCH] Implement status() without rxjava (#2999) * Implement status() without rxjava * Use lambda param named `throwable` * Update DraftsActivity.kt --- .../tusky/components/drafts/DraftsActivity.kt | 23 +++++++++---------- .../components/drafts/DraftsViewModel.kt | 4 ++-- .../tusky/network/MastodonApi.kt | 4 ++-- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsActivity.kt index dfa361684..6665981cb 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsActivity.kt @@ -25,8 +25,7 @@ import androidx.activity.viewModels import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager -import autodispose2.androidx.lifecycle.AndroidLifecycleScopeProvider.from -import autodispose2.autoDispose +import at.connyduck.calladapter.networkresult.fold import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.snackbar.Snackbar import com.keylesspalace.tusky.BaseActivity @@ -37,7 +36,6 @@ import com.keylesspalace.tusky.db.DraftEntity import com.keylesspalace.tusky.di.ViewModelFactory import com.keylesspalace.tusky.util.parseAsMastodonHtml import com.keylesspalace.tusky.util.visible -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import retrofit2.HttpException @@ -88,13 +86,17 @@ class DraftsActivity : BaseActivity(), DraftActionListener { } override fun onOpenDraft(draft: DraftEntity) { + if (draft.inReplyToId == null) { + openDraftWithoutReply(draft) + return + } - if (draft.inReplyToId != null) { + val context = this as Context + + lifecycleScope.launch { bottomSheet.state = BottomSheetBehavior.STATE_COLLAPSED viewModel.getStatus(draft.inReplyToId) - .observeOn(AndroidSchedulers.mainThread()) - .autoDispose(from(this)) - .subscribe( + .fold( { status -> val composeOptions = ComposeActivity.ComposeOptions( draftId = draft.id, @@ -113,10 +115,9 @@ class DraftsActivity : BaseActivity(), DraftActionListener { bottomSheet.state = BottomSheetBehavior.STATE_HIDDEN - startActivity(ComposeActivity.startIntent(this, composeOptions)) + startActivity(ComposeActivity.startIntent(context, composeOptions)) }, { throwable -> - bottomSheet.state = BottomSheetBehavior.STATE_HIDDEN Log.w(TAG, "failed loading reply information", throwable) @@ -124,7 +125,7 @@ class DraftsActivity : BaseActivity(), DraftActionListener { if (throwable is HttpException && throwable.code() == 404) { // the original status to which a reply was drafted has been deleted // let's open the ComposeActivity without reply information - Toast.makeText(this, getString(R.string.drafts_post_reply_removed), Toast.LENGTH_LONG).show() + Toast.makeText(context, getString(R.string.drafts_post_reply_removed), Toast.LENGTH_LONG).show() openDraftWithoutReply(draft) } else { Snackbar.make(binding.root, getString(R.string.drafts_failed_loading_reply), Snackbar.LENGTH_SHORT) @@ -132,8 +133,6 @@ class DraftsActivity : BaseActivity(), DraftActionListener { } } ) - } else { - openDraftWithoutReply(draft) } } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsViewModel.kt index 0c370222f..694398033 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/drafts/DraftsViewModel.kt @@ -20,12 +20,12 @@ import androidx.lifecycle.viewModelScope import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.cachedIn +import at.connyduck.calladapter.networkresult.NetworkResult import com.keylesspalace.tusky.db.AccountManager import com.keylesspalace.tusky.db.AppDatabase import com.keylesspalace.tusky.db.DraftEntity import com.keylesspalace.tusky.entity.Status import com.keylesspalace.tusky.network.MastodonApi -import io.reactivex.rxjava3.core.Single import kotlinx.coroutines.launch import javax.inject.Inject @@ -60,7 +60,7 @@ class DraftsViewModel @Inject constructor( } } - fun getStatus(statusId: String): Single { + suspend fun getStatus(statusId: String): NetworkResult { return api.status(statusId) } diff --git a/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt b/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt index 42652a122..9ddda4ba1 100644 --- a/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt +++ b/app/src/main/java/com/keylesspalace/tusky/network/MastodonApi.kt @@ -165,9 +165,9 @@ interface MastodonApi { ): NetworkResult @GET("api/v1/statuses/{id}") - fun status( + suspend fun status( @Path("id") statusId: String - ): Single + ): NetworkResult @GET("api/v1/statuses/{id}") suspend fun statusAsync(