WIP imagenes
This commit is contained in:
parent
401c7aadf1
commit
05962ff483
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
@ -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>>>
|
||||
}
|
||||
@ -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() {
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
@ -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}"
|
||||
}
|
||||
@ -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>
|
||||
Loading…
x
Reference in New Issue
Block a user