diff --git a/app/build.gradle b/app/build.gradle index a414e0e8..54f141aa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,4 +41,6 @@ dependencies { implementation 'com.google.android.material:material:1.11.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'com.squareup.picasso:picasso:2.71828' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7' + implementation 'androidx.fragment:fragment-ktx:1.8.5' } \ No newline at end of file diff --git a/app/src/main/java/otus/homework/coroutines/Cat.kt b/app/src/main/java/otus/homework/coroutines/Cat.kt new file mode 100644 index 00000000..994faafe --- /dev/null +++ b/app/src/main/java/otus/homework/coroutines/Cat.kt @@ -0,0 +1,6 @@ +package otus.homework.coroutines + +data class Cat( + val fact: Fact, + val picture: CatPicture +) diff --git a/app/src/main/java/otus/homework/coroutines/CatPicture.kt b/app/src/main/java/otus/homework/coroutines/CatPicture.kt new file mode 100644 index 00000000..0f475754 --- /dev/null +++ b/app/src/main/java/otus/homework/coroutines/CatPicture.kt @@ -0,0 +1,8 @@ +package otus.homework.coroutines + +data class CatPicture( + val id: String, + val url: String, + val width: Int, + val height: Int +) diff --git a/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt b/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt index e4b05120..3289a804 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt @@ -1,28 +1,32 @@ package otus.homework.coroutines -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response +import android.content.Context +import android.util.Log +import android.widget.Toast +import java.net.SocketTimeoutException -class CatsPresenter( - private val catsService: CatsService -) { +class CatsPresenter { private var _catsView: ICatsView? = null - fun onInitComplete() { - catsService.getCatFact().enqueue(object : Callback { + fun showCatFactAndPicture(cat: Cat) { + _catsView?.populate(cat) + } + + fun showOrLogError(exception: Throwable, context: Context) { + if (exception is SocketTimeoutException) { + Toast.makeText(context, context.getString(R.string.could_not_get_response_from_server), + Toast.LENGTH_SHORT).show() + } + } - override fun onResponse(call: Call, response: Response) { - if (response.isSuccessful && response.body() != null) { - _catsView?.populate(response.body()!!) - } - } + fun showLoading() { + _catsView?.showLoading() + } - override fun onFailure(call: Call, t: Throwable) { - CrashMonitor.trackWarning() - } - }) + fun setOnClickListener(onClick: () -> Unit) { + Log.d("CatsPresenter.setOnClickListener", "onClick = '$onClick'") + _catsView?.setButtonOnClickListener(onClick) } fun attachView(catsView: ICatsView) { @@ -32,4 +36,4 @@ class CatsPresenter( fun detachView() { _catsView = null } -} \ No newline at end of file +} diff --git a/app/src/main/java/otus/homework/coroutines/CatsService.kt b/app/src/main/java/otus/homework/coroutines/CatsService.kt index 479b2cfb..4f4ff549 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 -} \ No newline at end of file + suspend fun getCatFact(): Fact +} diff --git a/app/src/main/java/otus/homework/coroutines/CatsView.kt b/app/src/main/java/otus/homework/coroutines/CatsView.kt index be04b2a8..c5f9db78 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsView.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsView.kt @@ -2,9 +2,13 @@ package otus.homework.coroutines import android.content.Context import android.util.AttributeSet +import android.util.Log import android.widget.Button +import android.widget.ImageView +import android.widget.ProgressBar import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout +import com.squareup.picasso.Picasso class CatsView @JvmOverloads constructor( context: Context, @@ -12,21 +16,37 @@ class CatsView @JvmOverloads constructor( defStyleAttr: Int = 0 ) : ConstraintLayout(context, attrs, defStyleAttr), ICatsView { - var presenter :CatsPresenter? = null + var presenter: CatsPresenter? = null + var onButtonClick: (() -> Unit)? = null override fun onFinishInflate() { super.onFinishInflate() findViewById