Skip to content

Commit

Permalink
Loading avatar picture also on HomeTopBar
Browse files Browse the repository at this point in the history
  • Loading branch information
gongracr committed Mar 9, 2022

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 00c60eb commit 5e71b17
Showing 6 changed files with 33 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -51,11 +51,12 @@ fun UserProfileAvatar(
Image(
painter = rememberAsyncImagePainter(model = avatarResource),
contentDescription = stringResource(R.string.content_description_user_avatar),
contentScale = ContentScale.Crop,
modifier = Modifier
.padding(dimensions().userAvatarStatusBorderSize)
.background(Color.Companion.Black, CircleShape)
.size(size)
.clip(CircleShape),
contentScale = ContentScale.FillBounds,
)
UserStatusIndicator(
status = status,
@@ -67,5 +68,5 @@ fun UserProfileAvatar(
@Preview
@Composable
fun UserProfileAvatarPreview() {
UserProfileAvatar(avatarAssetByteArray = null, status = UserStatus.BUSY) {}
UserProfileAvatar(status = UserStatus.BUSY) {}
}
12 changes: 7 additions & 5 deletions app/src/main/kotlin/com/wire/android/ui/home/HomeTopBar.kt
Original file line number Diff line number Diff line change
@@ -11,10 +11,10 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource
@@ -42,9 +42,11 @@ fun HomeTopBar(
val scrollDownState = viewModel.scrollDownFlow.collectAsState(false)
val firstLineElevation = if (!isSearchable || scrollDownState.value) dimensions().topBarElevationHeight else 0.dp

Box(
Modifier.background(Color.Transparent)
) {
LaunchedEffect(viewModel) {
viewModel.loadUserAvatar()
}

Box {
if (isSearchable) {
val searchFieldFullHeightPx = LocalDensity.current.run {
(dimensions().topBarSearchFieldHeight + dimensions().topBarElevationHeight).toPx()
@@ -71,7 +73,7 @@ fun HomeTopBar(
navigationIconType = NavigationIconType.Menu,
onNavigationPressed = { scope.launch { drawerState.open() } },
actions = {
UserProfileAvatar(isEnabled = true, status = UserStatus.AVAILABLE) {
UserProfileAvatar(avatarAssetByteArray = viewModel.userAvatar, isEnabled = true, status = UserStatus.AVAILABLE) {
scope.launch { viewModel.navigateToUserProfile() }
}
},
20 changes: 20 additions & 0 deletions app/src/main/kotlin/com/wire/android/ui/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
package com.wire.android.ui.home

import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wire.android.datastore.UserDataStore
import com.wire.android.navigation.NavigationCommand
import com.wire.android.navigation.NavigationItem
import com.wire.android.navigation.NavigationManager
import com.wire.kalium.logic.feature.asset.GetPublicAssetUseCase
import com.wire.kalium.logic.feature.asset.PublicAssetResult
import com.wire.kalium.logic.sync.ListenToEventsUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject

@@ -18,9 +25,14 @@ class HomeViewModel
@Inject constructor(
private val navigationManager: NavigationManager,
private val listenToEvents: ListenToEventsUseCase,
private val dataStore: UserDataStore,
private val getPublicAssetUseCase: GetPublicAssetUseCase,
private val commonManager: HomeCommonManager
) : ViewModel() {

var userAvatar by mutableStateOf<ByteArray?>(null)
private set

init {
commonManager.onViewModelInit()
}
@@ -36,6 +48,14 @@ class HomeViewModel

suspend fun navigateToUserProfile() = navigateTo(NavigationItem.UserProfile, MY_USER_PROFILE_SUBROUTE)

fun loadUserAvatar() {
viewModelScope.launch {
dataStore.avatarAssetId.first()?.let {
userAvatar = (getPublicAssetUseCase(it) as PublicAssetResult.Success).asset
}
}
}

suspend fun navigateTo(item: NavigationItem, extraRouteId: String = "") {
navigationManager.navigate(NavigationCommand(destination = item.getRouteWithArgs(listOf(extraRouteId))))
}
Original file line number Diff line number Diff line change
@@ -398,7 +398,7 @@ private fun OtherAccountItem(
modifier = Modifier
.fillMaxWidth()
.height(dimensions().userProfileOtherAccItemHeight)
.padding(bottom = 1.dp)
.padding(start = dimensions().spacing8x, bottom = 1.dp)
.background(MaterialTheme.colorScheme.surface)
.selectableBackground(true) { onClick(account.id) }
) {
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.wire.android.ui.userprofile

import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.currentRecomposeScope
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
@@ -18,12 +17,9 @@ import com.wire.kalium.logic.feature.asset.GetPublicAssetUseCase
import com.wire.kalium.logic.feature.asset.PublicAssetResult
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject

// Suppress for now after removing mockMethodForAvatar it should not complain
@@ -33,7 +29,7 @@ import javax.inject.Inject
class UserProfileViewModel @Inject constructor(
private val navigationManager: NavigationManager,
private val dataStore: UserDataStore,
private val getUserAvatar: GetPublicAssetUseCase,
private val getPublicAssetUseCase: GetPublicAssetUseCase,
private val getSelf: GetSelfUserUseCase
) : ViewModel() {

@@ -91,7 +87,7 @@ class UserProfileViewModel @Inject constructor(

private suspend fun getAvatarAsByteArrayOrNull(avatarAssetId: UserAssetId): ByteArray? =
try {
(getUserAvatar(avatarAssetId) as PublicAssetResult.Success).asset
(getPublicAssetUseCase(avatarAssetId) as PublicAssetResult.Success).asset
} catch (e: Exception) {
null
}
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.core.content.MimeTypeFilter
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wire.android.datastore.UserDataStore

0 comments on commit 5e71b17

Please sign in to comment.