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
|
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
|
package com.isolaatti.images.image_list.presentation
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
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 android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.isolaatti.databinding.FragmentImagesBinding
|
import com.isolaatti.databinding.FragmentImagesBinding
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
class ImagesFragment : Fragment() {
|
class ImagesFragment : Fragment() {
|
||||||
lateinit var viewBinding: FragmentImagesBinding
|
lateinit var viewBinding: FragmentImagesBinding
|
||||||
|
|
||||||
@ -15,9 +17,13 @@ class ImagesFragment : Fragment() {
|
|||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View {
|
||||||
viewBinding = FragmentImagesBinding.inflate(inflater)
|
viewBinding = FragmentImagesBinding.inflate(inflater)
|
||||||
|
|
||||||
return viewBinding.root
|
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
|
import com.isolaatti.connectivity.RetrofitClient.Companion.BASE_URL
|
||||||
|
|
||||||
object UrlGen {
|
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 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 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:navigationIconTint="@color/on_surface"
|
||||||
app:titleCentered="true"/>
|
app:titleCentered="true"/>
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</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>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
Loading…
x
Reference in New Issue
Block a user