WIP imagenes

This commit is contained in:
erik 2023-11-19 22:24:19 -06:00
parent 401c7aadf1
commit 05962ff483
7 changed files with 76 additions and 4 deletions

View File

@ -0,0 +1,29 @@
package com.isolaatti.images.image_list.data.repository
import com.isolaatti.images.image_list.data.remote.ImagesApi
import com.isolaatti.images.image_list.domain.entity.Image
import com.isolaatti.images.image_list.domain.repository.ImagesRepository
import com.isolaatti.utils.Resource
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import retrofit2.awaitResponse
import javax.inject.Inject
class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi) : ImagesRepository {
override fun getImagesOfUser(userId: Int, lastId: String?): Flow<Resource<List<Image>>> = flow {
try {
val response = imagesApi.getImagesOfUser(userId, lastId).awaitResponse()
if(response.isSuccessful) {
val imagesDto = response.body()
val images = imagesDto?.map { Image.fromDto(it) }
emit(Resource.Success(images))
} else {
emit(Resource.Error(Resource.Error.mapErrorCode(response.code())))
}
} catch(_: Exception) {
emit(Resource.Error(Resource.Error.ErrorType.NetworkError))
}
}
}

View File

@ -0,0 +1,18 @@
package com.isolaatti.images.image_list.domain.entity
import com.isolaatti.images.image_list.data.remote.ImageDto
import com.isolaatti.utils.UrlGen
data class Image(
val id: String,
val userId: Int,
val name: String
) {
val imageUrl: String get() = UrlGen.imageUrl(id)
val smallImageUrl : String get() = UrlGen.imageUrl(id, UrlGen.IMAGE_MODE_SMALL)
val reducedImageUrl: String get() = UrlGen.imageUrl(id, UrlGen.IMAGE_MODE_REDUCED)
companion object {
fun fromDto(imageDto: ImageDto) = Image(imageDto.id, imageDto.userId, imageDto.name)
}
}

View File

@ -1,5 +1,9 @@
package com.isolaatti.images.image_list.domain.repository
interface ImagesRepository {
import com.isolaatti.images.image_list.domain.entity.Image
import com.isolaatti.utils.Resource
import kotlinx.coroutines.flow.Flow
interface ImagesRepository {
fun getImagesOfUser(userId: Int, lastId: String? = null): Flow<Resource<List<Image>>>
}

View File

@ -1,6 +1,12 @@
package com.isolaatti.images.image_list.presentation
import androidx.lifecycle.ViewModel
import com.isolaatti.images.image_list.domain.repository.ImagesRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class ImageListViewModel @Inject constructor(private val imagesRepository: ImagesRepository) : ViewModel() {
class ImageListViewModel : ViewModel() {
}

View File

@ -6,8 +6,10 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.isolaatti.databinding.FragmentImagesBinding
import dagger.hilt.android.AndroidEntryPoint
import dagger.hilt.android.lifecycle.HiltViewModel
@AndroidEntryPoint
class ImagesFragment : Fragment() {
lateinit var viewBinding: FragmentImagesBinding
@ -15,9 +17,13 @@ class ImagesFragment : Fragment() {
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
): View {
viewBinding = FragmentImagesBinding.inflate(inflater)
return viewBinding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}

View File

@ -3,7 +3,10 @@ package com.isolaatti.utils
import com.isolaatti.connectivity.RetrofitClient.Companion.BASE_URL
object UrlGen {
const val IMAGE_MODE_SMALL = "small"
const val IMAGE_MODE_REDUCED = "reduced"
const val IMAGE_MODE_ORIGINAL = "original"
fun userProfileImage(userId: Int) = "${BASE_URL}images/profile_image/of_user/$userId?mode=small"
fun userProfileImageFullQuality(userId: Int) = "${BASE_URL}images/profile_image/of_user/$userId?mode=original"
fun imageUrl(imageId: String) = "${BASE_URL}images/image/${imageId}"
fun imageUrl(imageId: String, mode: String? = IMAGE_MODE_ORIGINAL) = "${BASE_URL}images/image/${imageId}?mode=${mode}"
}

View File

@ -15,4 +15,10 @@
app:navigationIconTint="@color/on_surface"
app:titleCentered="true"/>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>