From 0d962c7cc12ce1ec90efabb6348bae79a0d36b78 Mon Sep 17 00:00:00 2001
From: Nik Clayton <nik@ngo.org.uk>
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 dfa36168..6665981c 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 0c370222..69439803 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<Status> {
+    suspend fun getStatus(statusId: String): NetworkResult<Status> {
         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 42652a12..9ddda4ba 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<Status>
 
     @GET("api/v1/statuses/{id}")
-    fun status(
+    suspend fun status(
         @Path("id") statusId: String
-    ): Single<Status>
+    ): NetworkResult<Status>
 
     @GET("api/v1/statuses/{id}")
     suspend fun statusAsync(