From efd627d2fab1c26155c1cfd8446b5bf24b5c69a2 Mon Sep 17 00:00:00 2001 From: "adil.ziganshin" Date: Mon, 20 Jan 2025 22:46:35 +0300 Subject: [PATCH 1/3] homework part 1 --- .../otus/homework/coroutines/CatsPresenter.kt | 29 +++++++++---------- .../otus/homework/coroutines/CatsService.kt | 3 +- .../java/otus/homework/coroutines/CatsView.kt | 11 ++++++- .../otus/homework/coroutines/MainActivity.kt | 10 +++++-- .../homework/coroutines/PresenterScope.kt | 16 ++++++++++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 app/src/main/java/otus/homework/coroutines/PresenterScope.kt diff --git a/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt b/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt index e4b05120..e3d693b9 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt @@ -1,8 +1,8 @@ package otus.homework.coroutines -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response +import android.content.Context +import android.widget.Toast +import java.net.SocketTimeoutException class CatsPresenter( private val catsService: CatsService @@ -10,19 +10,16 @@ class CatsPresenter( private var _catsView: ICatsView? = null - fun onInitComplete() { - catsService.getCatFact().enqueue(object : Callback { - - override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful && response.body() != null) { - _catsView?.populate(response.body()!!) - } - } - - override fun onFailure(call: Call, t: Throwable) { - CrashMonitor.trackWarning() - } - }) + suspend fun onInitComplete(context: Context) { + try { + val response = catsService.getCatFact() + _catsView?.populate(response) + } catch (exception: SocketTimeoutException) { + Toast.makeText(context, context.getString(R.string.could_not_get_response_from_server), + Toast.LENGTH_SHORT).show() + } catch (exception: Exception) { + CrashMonitor.trackWarning() + } } fun attachView(catsView: ICatsView) { diff --git a/app/src/main/java/otus/homework/coroutines/CatsService.kt b/app/src/main/java/otus/homework/coroutines/CatsService.kt index 479b2cfb..829b930c 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsService.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsService.kt @@ -1,10 +1,9 @@ package otus.homework.coroutines -import retrofit2.Call import retrofit2.http.GET interface CatsService { @GET("fact") - fun getCatFact() : Call + suspend fun getCatFact(): Fact } \ No newline at end of file diff --git a/app/src/main/java/otus/homework/coroutines/CatsView.kt b/app/src/main/java/otus/homework/coroutines/CatsView.kt index be04b2a8..5b578ad4 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsView.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsView.kt @@ -5,6 +5,7 @@ import android.util.AttributeSet import android.widget.Button import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout +import kotlinx.coroutines.launch class CatsView @JvmOverloads constructor( context: Context, @@ -13,14 +14,22 @@ class CatsView @JvmOverloads constructor( ) : ConstraintLayout(context, attrs, defStyleAttr), ICatsView { var presenter :CatsPresenter? = null + private val scope = PresenterScope() override fun onFinishInflate() { super.onFinishInflate() findViewById