From 7da14338f955ec1fcc808d81fb8bcda4dcd07bda Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Thu, 8 Oct 2020 00:51:59 +0530 Subject: [PATCH] app: add user avatars to items Uses Chris Banes' amazing Accompanist library to interface with Coil and load images with minimum hassle. The resultant UI has been made to loosely resemble https://lobste.rs since our end goal is to fully match the website. Signed-off-by: Harsh Shandilya --- app/build.gradle | 1 + .../dev/msfjarvis/lobsters/di/ApiModule.kt | 3 ++- .../dev/msfjarvis/lobsters/ui/LobstersItem.kt | 26 ++++++++++++++++--- build.gradle | 1 + 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index cdfee333..0c6a3524 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,6 +84,7 @@ dependencies { implementation "androidx.ui:ui-tooling:$compose_version" implementation "com.google.android.material:material:$material_version" implementation "com.google.dagger:hilt-android:$hilt_dagger_version" + implementation "dev.chrisbanes.accompanist:accompanist-coil:$accompanist_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" implementation "saschpe.android:customtabs:$customtabs_version" androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_dagger_version" diff --git a/app/src/main/java/dev/msfjarvis/lobsters/di/ApiModule.kt b/app/src/main/java/dev/msfjarvis/lobsters/di/ApiModule.kt index bbfcf5ac..dfa1042a 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/di/ApiModule.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/di/ApiModule.kt @@ -10,8 +10,9 @@ import dev.msfjarvis.lobsters.api.LobstersApi @InstallIn(ActivityComponent::class) @Module object ApiModule { + const val LOBSTERS_URL = "https://lobste.rs" @Provides fun provideLobstersApi(): LobstersApi { - return ApiClient.getClient("https://lobste.rs") + return ApiClient.getClient(LOBSTERS_URL) } } diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/LobstersItem.kt b/app/src/main/java/dev/msfjarvis/lobsters/ui/LobstersItem.kt index 374a1e3b..4dcf72a4 100644 --- a/app/src/main/java/dev/msfjarvis/lobsters/ui/LobstersItem.kt +++ b/app/src/main/java/dev/msfjarvis/lobsters/ui/LobstersItem.kt @@ -9,15 +9,21 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumnFor import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.ui.tooling.preview.Preview +import coil.transform.CircleCropTransformation +import dev.chrisbanes.accompanist.coil.CoilImage +import dev.msfjarvis.lobsters.di.ApiModule import dev.msfjarvis.lobsters.model.LobstersPost import dev.msfjarvis.lobsters.model.Submitter @@ -57,10 +63,22 @@ fun LazyItemScope.LobstersItem( ) } } - Text( - text = "submitted by ${post.submitterUser.username}", - modifier = Modifier.padding(bottom = 4.dp), - ) + Row( + modifier = Modifier.wrapContentHeight(), + ) { + CoilImage( + data = "${ApiModule.LOBSTERS_URL}/${post.submitterUser.avatarUrl}", + fadeIn = true, + requestBuilder = { + transformations(CircleCropTransformation()) + }, + modifier = Modifier.width(30.dp).padding(4.dp).align(Alignment.CenterVertically), + ) + Text( + text = "submitted by ${post.submitterUser.username}", + modifier = Modifier.padding(bottom = 4.dp).align(Alignment.CenterVertically), + ) + } } } diff --git a/build.gradle b/build.gradle index a1dfa757..e776bfde 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { + accompanist_version = "0.3.0" activity_version = "1.2.0-beta01" agp_version = "4.2.0-alpha13" appcompat_version = "1.3.0-alpha02"