diff --git a/app/build.gradle b/app/build.gradle index a414e0e8..54c1337f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,4 +41,7 @@ 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.4.0" + implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0" } \ No newline at end of file diff --git a/app/src/main/java/otus/homework/coroutines/CatImage.kt b/app/src/main/java/otus/homework/coroutines/CatImage.kt new file mode 100644 index 00000000..bf902810 --- /dev/null +++ b/app/src/main/java/otus/homework/coroutines/CatImage.kt @@ -0,0 +1,14 @@ +package otus.homework.coroutines + +import com.google.gson.annotations.SerializedName + +data class CatImage( + @field:SerializedName("id") + val id: String, + @field:SerializedName("url") + val url: String, + @field:SerializedName("width") + val width: String, + @field:SerializedName("height") + val height: String +) \ No newline at end of file diff --git a/app/src/main/java/otus/homework/coroutines/CatPresentationModel.kt b/app/src/main/java/otus/homework/coroutines/CatPresentationModel.kt new file mode 100644 index 00000000..f46594d9 --- /dev/null +++ b/app/src/main/java/otus/homework/coroutines/CatPresentationModel.kt @@ -0,0 +1,6 @@ +package otus.homework.coroutines + +data class CatPresentationModel( + val fact: String, + val imageUrl: String +) diff --git a/app/src/main/java/otus/homework/coroutines/CatsImagesService.kt b/app/src/main/java/otus/homework/coroutines/CatsImagesService.kt new file mode 100644 index 00000000..0cb75d5b --- /dev/null +++ b/app/src/main/java/otus/homework/coroutines/CatsImagesService.kt @@ -0,0 +1,8 @@ +package otus.homework.coroutines + +import retrofit2.http.GET + +interface CatImagesService { + @GET("v1/images/search/") + suspend fun getCatImage(): List +} \ No newline at end of file diff --git a/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt b/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt index e4b05120..f10f8edf 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsPresenter.kt @@ -1,35 +1,19 @@ 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 kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.net.SocketTimeoutException class CatsPresenter( - private val catsService: CatsService + private val catsService: CatsService, + private val catImagesService: CatImagesService, + private val context: Context ) { - 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() - } - }) - } - - fun attachView(catsView: ICatsView) { - _catsView = catsView - } - - 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..94c1ae9d 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsService.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsService.kt @@ -1,10 +1,8 @@ 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..afe8ca92 100644 --- a/app/src/main/java/otus/homework/coroutines/CatsView.kt +++ b/app/src/main/java/otus/homework/coroutines/CatsView.kt @@ -3,30 +3,45 @@ package otus.homework.coroutines import android.content.Context import android.util.AttributeSet import android.widget.Button +import android.widget.ImageView import android.widget.TextView +import android.widget.Toast import androidx.constraintlayout.widget.ConstraintLayout +import com.squareup.picasso.Picasso class CatsView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : ConstraintLayout(context, attrs, defStyleAttr), ICatsView { +) : ConstraintLayout(context, attrs, defStyleAttr) { - var presenter :CatsPresenter? = null + private lateinit var viewModel: CatsViewModel override fun onFinishInflate() { super.onFinishInflate() findViewById