Skip to content

Commit b0a8a06

Browse files
authored
feat: Replace UserAvatar module with Avatar and remove it altogether (#461)
2 parents 97529b9 + 89c7e48 commit b0a8a06

File tree

19 files changed

+49
-425
lines changed

19 files changed

+49
-425
lines changed

Coil/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ android {
4343
}
4444

4545
dependencies {
46-
implementation(project(":Core:Auth"))
46+
api(project(":Core:Auth"))
4747
implementation(project(":Core:Avatar"))
4848
implementation(project(":Core:Network"))
4949

CrossAppLoginUI/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,12 @@ android {
4343
dependencies {
4444

4545
implementation(project(":Core"))
46+
implementation(project(":Core:Avatar"))
47+
implementation(project(":Core:Coil"))
4648
implementation(project(":Core:Compose:Basics"))
4749
implementation(project(":Core:Compose:Margin"))
4850
implementation(project(":Core:Compose:MaterialThemeFromXml"))
4951
implementation(project(":Core:CrossAppLogin"))
50-
implementation(project(":Core:UserAvatar"))
5152

5253
implementation(core.androidx.core.ktx)
5354
implementation(core.material)

CrossAppLoginUI/src/main/kotlin/com/infomaniak/core/crossloginui/components/Avatar.kt renamed to CrossAppLoginUI/src/main/kotlin/com/infomaniak/core/crossloginui/components/CrossLoginAvatar.kt

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,61 @@
1818
package com.infomaniak.core.crossloginui.components
1919

2020
import androidx.compose.foundation.BorderStroke
21+
import androidx.compose.foundation.isSystemInDarkTheme
2122
import androidx.compose.material3.MaterialTheme
2223
import androidx.compose.material3.Surface
2324
import androidx.compose.runtime.Composable
25+
import androidx.compose.runtime.remember
2426
import androidx.compose.ui.Modifier
2527
import androidx.compose.ui.graphics.Color
28+
import androidx.compose.ui.platform.LocalContext
2629
import androidx.compose.ui.tooling.preview.Preview
2730
import androidx.compose.ui.tooling.preview.PreviewParameter
2831
import androidx.compose.ui.unit.dp
32+
import com.infomaniak.core.avatar.components.Avatar
33+
import com.infomaniak.core.avatar.getBackgroundColorResBasedOnId
34+
import com.infomaniak.core.avatar.models.AvatarColors
35+
import com.infomaniak.core.avatar.models.AvatarType
36+
import com.infomaniak.core.avatar.models.AvatarUrlData
37+
import com.infomaniak.core.coil.ImageLoaderProvider
2938
import com.infomaniak.core.crossloginui.data.CrossLoginDefaults
3039
import com.infomaniak.core.crossloginui.previews.AccountsPreviewParameter
3140
import com.infomaniak.core.login.crossapp.ExternalAccount
32-
import com.infomaniak.core.useravatar.AvatarData
33-
import com.infomaniak.core.useravatar.exposed.UserAvatar
3441

3542
@Composable
36-
internal fun Avatar(modifier: Modifier = Modifier, account: ExternalAccount, strokeColor: Color? = null) {
37-
UserAvatar(
43+
internal fun CrossLoginAvatar(modifier: Modifier = Modifier, account: ExternalAccount, strokeColor: Color? = null) {
44+
val context = LocalContext.current
45+
val unauthenticatedImageLoader = remember(context) { ImageLoaderProvider.newImageLoader(context) }
46+
47+
Avatar(
48+
avatarType = AvatarType.getUrlOrInitials(
49+
account.avatarUrl?.let { AvatarUrlData(it, unauthenticatedImageLoader) },
50+
initials = account.initials,
51+
colors = AvatarColors(
52+
// TODO: Adapt colors correctly for each app
53+
containerColor = Color(context.getBackgroundColorResBasedOnId(account.id.toInt())),
54+
// TODO: Adapt colors correctly for each app
55+
contentColor = getDefaultIconColor(),
56+
),
57+
),
3858
modifier = modifier,
39-
avatarData = AvatarData(id = account.id.toString(), uri = account.avatarUrl, userInitials = account.initials),
4059
border = strokeColor?.let { BorderStroke(width = 1.dp, color = it) },
4160
)
4261
}
4362

63+
// Copied from old UserAvatar module to keep old behavior
64+
// TODO: Remove this when using CoreUi
65+
private const val iconColorDark = 0xFF333333
66+
67+
@Composable
68+
private fun getDefaultIconColor() = if (isSystemInDarkTheme()) Color(iconColorDark) else Color.White
69+
4470
@Preview
4571
@Composable
4672
private fun Preview(@PreviewParameter(AccountsPreviewParameter::class) accounts: List<ExternalAccount>) {
4773
MaterialTheme {
4874
Surface {
49-
Avatar(
75+
CrossLoginAvatar(
5076
account = accounts.first(),
5177
strokeColor = CrossLoginDefaults.colors().avatarStrokeColor,
5278
)

CrossAppLoginUI/src/main/kotlin/com/infomaniak/core/crossloginui/components/SingleAccount.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ internal fun SingleAccount(
5252
modifier = modifier,
5353
verticalAlignment = Alignment.CenterVertically,
5454
) {
55-
Avatar(
55+
CrossLoginAvatar(
5656
modifier = Modifier
5757
.size(Dimens.bigAvatarSize)
5858
.clip(CircleShape),

CrossAppLoginUI/src/main/kotlin/com/infomaniak/core/crossloginui/components/ThreeAccountsView.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ internal fun ThreeAccountsView(
4444

4545
Row {
4646
// Left
47-
Avatar(
47+
CrossLoginAvatar(
4848
modifier = Modifier.size(Dimens.iconSize),
4949
account = accounts[1],
5050
strokeColor = avatarStrokeColor,
@@ -53,15 +53,15 @@ internal fun ThreeAccountsView(
5353
Spacer(Modifier.width(width = Dimens.avatarsBoxWidth - (Dimens.iconSize + Dimens.iconSize)))
5454

5555
// Right
56-
Avatar(
56+
CrossLoginAvatar(
5757
modifier = Modifier.size(Dimens.iconSize),
5858
account = accounts[2],
5959
strokeColor = avatarStrokeColor,
6060
)
6161
}
6262

6363
// Center
64-
Avatar(
64+
CrossLoginAvatar(
6565
modifier = Modifier.size(Dimens.avatarsBoxHeight),
6666
account = accounts[0],
6767
strokeColor = avatarStrokeColor,

CrossAppLoginUI/src/main/kotlin/com/infomaniak/core/crossloginui/components/TwoAccountsView.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ internal fun TwoAccountsView(
4545
) {
4646

4747
// Right
48-
Avatar(
48+
CrossLoginAvatar(
4949
modifier = Modifier
5050
.size(Dimens.avatarsBoxHeight)
5151
.align(Alignment.CenterEnd),
@@ -54,7 +54,7 @@ internal fun TwoAccountsView(
5454
)
5555

5656
// Left
57-
Avatar(
57+
CrossLoginAvatar(
5858
modifier = Modifier
5959
.size(Dimens.avatarsBoxHeight)
6060
.align(Alignment.CenterStart),

MyKSuite/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ dependencies {
5050

5151
implementation(project(":Core"))
5252
implementation(project(":Core:Avatar"))
53+
implementation(project(":Core:Coil"))
5354
implementation(project(":Core:Compose:Basics"))
5455
implementation(project(":Core:Compose:Margin"))
5556
implementation(project(":Core:Compose:MaterialThemeFromXml"))

MyKSuite/src/main/java/com/infomaniak/core/myksuite/ui/data/AvatarData.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ package com.infomaniak.core.myksuite.ui.data
2020
import android.os.Parcelable
2121
import androidx.annotation.ColorInt
2222
import androidx.compose.runtime.Composable
23+
import androidx.compose.runtime.remember
2324
import androidx.compose.ui.graphics.Color
24-
import coil3.SingletonImageLoader
25-
import coil3.compose.LocalPlatformContext
25+
import androidx.compose.ui.platform.LocalContext
2626
import com.infomaniak.core.avatar.models.AvatarColors
2727
import com.infomaniak.core.avatar.models.AvatarType
2828
import com.infomaniak.core.avatar.models.AvatarUrlData
29+
import com.infomaniak.core.coil.ImageLoaderProvider
2930
import kotlinx.parcelize.Parcelize
3031

3132
@Parcelize
@@ -38,8 +39,11 @@ data class AvatarData(
3839
) : Parcelable {
3940
@Composable
4041
fun toAvatarType(): AvatarType {
42+
val context = LocalContext.current
43+
val unauthenticatedImageLoader = remember(context) { ImageLoaderProvider.newImageLoader(context) }
44+
4145
return AvatarType.getUrlOrInitials(
42-
avatarUrlData = uri?.let { AvatarUrlData(it, SingletonImageLoader.get(LocalPlatformContext.current)) },
46+
avatarUrlData = uri?.let { AvatarUrlData(it, unauthenticatedImageLoader) },
4347
initials = userInitials,
4448
colors = AvatarColors(
4549
containerColor = Color(backgroundColor),

UserAvatar/build.gradle.kts

Lines changed: 0 additions & 52 deletions
This file was deleted.

UserAvatar/consumer-rules.pro

Whitespace-only changes.

0 commit comments

Comments
 (0)