From 588d8aa450159a241563651a7deec792e0541a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?He=CC=81ctor=20Abraham?= Date: Wed, 30 Jul 2025 18:58:11 +0200 Subject: [PATCH 1/3] Implement Share vCard feature --- ...components.ShareHeaderTest.shareHeader.png | Bin 82244 -> 84345 bytes .../app/homeUi/GravatarFileProvider.kt | 9 +++ .../gravatar/app/homeUi/di/HomeUiModule.kt | 2 + .../app/homeUi/presentation/DrawableUtils.kt | 55 +++++++++++++ .../app/homeUi/presentation/FileUtils.kt | 11 +++ .../presentation/home/share/ShareAction.kt | 7 ++ .../presentation/home/share/ShareEvent.kt | 1 + .../presentation/home/share/ShareScreen.kt | 45 ++++++++++- .../presentation/home/share/ShareUiState.kt | 3 + .../presentation/home/share/ShareViewModel.kt | 34 +++++++++ .../home/share/components/ShareHeader.kt | 16 +++- .../presentation/home/share/model/VCard.kt | 20 ++++- homeUi/src/main/res/drawable/share_button.xml | 13 ++++ .../src/main/res/xml/gravatar_filepaths.xml | 3 + .../home/share/ShareViewModelTest.kt | 37 ++++++++- .../home/share/model/VCardTest.kt | 72 ++++++++++++++++++ 16 files changed, 323 insertions(+), 5 deletions(-) create mode 100644 homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/DrawableUtils.kt create mode 100644 homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt create mode 100644 homeUi/src/main/res/drawable/share_button.xml diff --git a/homeUi/screenshotTests/roborazzi/com.gravatar.app.homeUi.presentation.home.share.components.ShareHeaderTest.shareHeader.png b/homeUi/screenshotTests/roborazzi/com.gravatar.app.homeUi.presentation.home.share.components.ShareHeaderTest.shareHeader.png index ac24211e4c7839cdca29d53f7c36ce2ac4d397a2..c04b5c169f75212048d90bda028ca93265121337 100644 GIT binary patch literal 84345 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 literal 82244 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 { ImageDownloader(androidContext()) } factoryOf(::FileUtils) + factoryOf(::DrawableUtils) viewModelOf(::ProfileViewModel) viewModelOf(::GravatarViewModel) viewModelOf(::TopBarPickerPopupViewModel) diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/DrawableUtils.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/DrawableUtils.kt new file mode 100644 index 00000000..f8ce1edd --- /dev/null +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/DrawableUtils.kt @@ -0,0 +1,55 @@ +package com.gravatar.app.homeUi.presentation + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import androidx.core.graphics.drawable.toBitmap +import coil.ImageLoader +import coil.request.ImageRequest +import java.io.ByteArrayOutputStream +import kotlin.io.encoding.Base64 +import kotlin.io.encoding.ExperimentalEncodingApi + +internal class DrawableUtils(private val context: Context) { + + private val imageLoader = ImageLoader(context) + + suspend fun downloadDrawable(url: String): Drawable? { + return try { + val request = ImageRequest.Builder(context) + .data(url) + .build() + imageLoader.execute(request).drawable + } catch (_: Exception) { + null + } + } +} + +/** + * Converts a Drawable to a Base64 encoded string. + * + * @param drawable The Drawable to convert. + * @param format The desired image format (Bitmap.CompressFormat.PNG or Bitmap.CompressFormat.JPEG). + * @param quality The quality for JPEG compression (0-100). + * @return The Base64 encoded string representation of the image, or null if conversion fails. + */ +@OptIn(ExperimentalEncodingApi::class) +@Suppress("TooGenericExceptionCaught") +internal fun drawableToBase64( + drawable: Drawable, + format: Bitmap.CompressFormat = Bitmap.CompressFormat.JPEG, + quality: Int = 30 +): Result { + val bitmap = drawable.toBitmap() + + return try { + val base64String = ByteArrayOutputStream().use { outputStream -> + bitmap.compress(format, quality, outputStream) + Base64.encode(outputStream.toByteArray()) + } + Result.success(base64String) + } catch (e: Exception) { + Result.failure(e) + } +} diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/FileUtils.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/FileUtils.kt index 07e63ba8..b94fca73 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/FileUtils.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/FileUtils.kt @@ -8,6 +8,17 @@ import java.io.File internal class FileUtils( private val context: Context, ) { + fun createVCardFile(fileNameWithoutExtension: String, content: String): File { + val directory = File(context.cacheDir, "vcard") + directory.mkdirs() + return File( + directory, + "${fileNameWithoutExtension.ifEmpty { "vcard_${System.currentTimeMillis()}" }}.vcf" + ).apply { + writeText(content) + } + } + fun createCroppedAvatarFile(): File { return File(context.cacheDir, "cropped_avatar_${System.currentTimeMillis()}.jpg") } diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt new file mode 100644 index 00000000..a4fbc9c2 --- /dev/null +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt @@ -0,0 +1,7 @@ +package com.gravatar.app.homeUi.presentation.home.share + +import java.io.File + +sealed class ShareAction { + data class ShareVCard(val vCardFile: File) : ShareAction() +} diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareEvent.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareEvent.kt index dc472791..adb4ef6c 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareEvent.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareEvent.kt @@ -8,4 +8,5 @@ internal sealed class ShareEvent { data object OnDismissAboutAppDialog : ShareEvent() data object OnPrivateInformationClicked : ShareEvent() data object OnDismissPrivateInformationDialog : ShareEvent() + data object OnShareClick : ShareEvent() } diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareScreen.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareScreen.kt index 60304bab..ce2929d9 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareScreen.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareScreen.kt @@ -1,5 +1,7 @@ package com.gravatar.app.homeUi.presentation.home.share +import android.content.Context +import android.content.Intent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -10,13 +12,19 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.SnackbarHostState 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.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.lifecycle.Lifecycle import androidx.lifecycle.ViewModelStoreOwner +import androidx.lifecycle.compose.LocalLifecycleOwner +import androidx.lifecycle.repeatOnLifecycle import com.gravatar.app.design.theme.GravatarAppTheme +import com.gravatar.app.homeUi.GravatarFileProvider import com.gravatar.app.homeUi.presentation.home.components.topbar.components.AboutAppDialog import com.gravatar.app.homeUi.presentation.home.share.components.ItemDivider import com.gravatar.app.homeUi.presentation.home.share.components.PrivateInformationDialog @@ -24,7 +32,10 @@ import com.gravatar.app.homeUi.presentation.home.share.components.ShareHeader import com.gravatar.app.homeUi.presentation.home.share.components.SharePrivateContactInfo import com.gravatar.app.homeUi.presentation.home.share.components.SharePublicContactInfo import com.gravatar.extensions.defaultProfile +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.koin.androidx.compose.koinViewModel +import java.io.File @Suppress("UnusedParameter") @Composable @@ -33,8 +44,24 @@ internal fun ShareScreen( viewModel: ShareViewModel = koinViewModel(viewModelStoreOwner = viewModelStoreOwner), snackbarHostState: SnackbarHostState ) { + val context = LocalContext.current + val lifecycle = LocalLifecycleOwner.current val uiState by viewModel.uiState.collectAsState() + LaunchedEffect(Unit) { + withContext(Dispatchers.Main.immediate) { + lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.actions.collect { action -> + when (action) { + is ShareAction.ShareVCard -> { + shareVCardFile(action.vCardFile, context) + } + } + } + } + } + } + ShareScreen( uiState = uiState, onEvent = { event -> @@ -57,7 +84,8 @@ internal fun ShareScreen(uiState: ShareUiState, onEvent: (ShareEvent) -> Unit) { onAboutAppClicked = { onEvent(ShareEvent.OnAboutAppClicked) }, - vCardQrCodeData = uiState.vCardQrCodeData.toString(), + vCardQrCodeData = uiState.vCardQrCodeData.exportToString(withPhoto = false), + onShareClick = { onEvent(ShareEvent.OnShareClick) }, modifier = Modifier .fillMaxWidth(), ) @@ -107,6 +135,21 @@ internal fun ShareScreen(uiState: ShareUiState, onEvent: (ShareEvent) -> Unit) { } } +private fun shareVCardFile( + vCardFile: File, + context: Context, +) { + val vCardFileUri = GravatarFileProvider.getFileUri(context, vCardFile) + + val intentShareFile = Intent(Intent.ACTION_SEND) + + // Use the correct MIME type for vCard files + intentShareFile.type = "text/vcard" + intentShareFile.putExtra(Intent.EXTRA_STREAM, vCardFileUri) + + context.startActivity(Intent.createChooser(intentShareFile, null)) +} + @Preview @Composable private fun ShareScreenPreview() { diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareUiState.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareUiState.kt index 5588754f..50a2757c 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareUiState.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareUiState.kt @@ -1,5 +1,6 @@ package com.gravatar.app.homeUi.presentation.home.share +import android.graphics.drawable.Drawable import com.gravatar.app.homeUi.presentation.home.share.model.VCard import com.gravatar.app.usercomponent.domain.model.PrivateContactInfo import com.gravatar.app.usercomponent.domain.model.UserSharePreferences @@ -12,6 +13,7 @@ internal data class ShareUiState( val privateContactInfo: PrivateContactInfo = PrivateContactInfo.Default, val userSharePreferences: UserSharePreferences = UserSharePreferences.Default, val isPrivateInformationDialogVisible: Boolean = false, + private val avatarDrawable: Drawable? = null, ) { val privateContactState = PrivateContactState( emailValue = privateContactInfo.privateEmail, @@ -45,6 +47,7 @@ internal data class ShareUiState( .note(profile?.description.takeIf { userSharePreferences.description }) .phoneNumber(privateContactState.phoneValue.takeIf { privateContactState.isPhoneShared }) .email(privateContactState.emailValue.takeIf { privateContactState.isEmailShared }) + .photo(avatarDrawable) .build() } diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt index 4d42ea0c..5180a619 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt @@ -2,6 +2,8 @@ package com.gravatar.app.homeUi.presentation.home.share import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.gravatar.app.homeUi.presentation.DrawableUtils +import com.gravatar.app.homeUi.presentation.FileUtils import com.gravatar.app.usercomponent.domain.repository.UserRepository import com.gravatar.app.usercomponent.domain.usecase.GetAvatarUrl import com.gravatar.app.usercomponent.domain.usecase.GetPrivateContactInfo @@ -9,15 +11,18 @@ import com.gravatar.app.usercomponent.domain.usecase.GetUserSharePreferences import com.gravatar.app.usercomponent.domain.usecase.UpdatePrivateContactInfo import com.gravatar.app.usercomponent.domain.usecase.UpdateUserSharePreferences import kotlinx.coroutines.Job +import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +@Suppress("LongParameterList") internal class ShareViewModel( private val userRepository: UserRepository, private val getAvatarUrl: GetAvatarUrl, @@ -25,6 +30,8 @@ internal class ShareViewModel( private val updateUserSharePreferences: UpdateUserSharePreferences, private val getPrivateContactInfo: GetPrivateContactInfo, private val updatePrivateContactInfo: UpdatePrivateContactInfo, + private val drawableUtils: DrawableUtils, + private val fileUtils: FileUtils, ) : ViewModel() { private val _uiState = MutableStateFlow(ShareUiState()) @@ -33,6 +40,9 @@ internal class ShareViewModel( private var saveContactInfoJob: Job? = null private val debounceDelay = 500L // 500ms debounce delay + private val _actions = Channel(Channel.BUFFERED) + val actions = _actions.receiveAsFlow() + init { collectProfile() collectAvatarUrl() @@ -69,6 +79,16 @@ internal class ShareViewModel( is ShareEvent.OnUserSharePreferencesChanged -> handleUserSharePreferencesChange(shareEvent.shareFieldType) is ShareEvent.OnPrivateInformationClicked -> showPrivateInformationDialog() is ShareEvent.OnDismissPrivateInformationDialog -> hidePrivateInformationDialog() + ShareEvent.OnShareClick -> shareVCard() + } + } + + private fun shareVCard() { + viewModelScope.launch { + val vCardContent = uiState.value.vCardQrCodeData.exportToString(withPhoto = true) + val vCardFile = fileUtils.createVCardFile(uiState.value.profile?.displayName.orEmpty(), vCardContent) + + _actions.send(ShareAction.ShareVCard(vCardFile)) } } @@ -121,6 +141,7 @@ internal class ShareViewModel( private fun collectAvatarUrl() { getAvatarUrl() .onEach { avatarUrl -> + loadDrawable(avatarUrl?.toString()) _uiState.update { currentState -> currentState.copy( avatarUrl = avatarUrl?.toString(), @@ -130,6 +151,19 @@ internal class ShareViewModel( .launchIn(viewModelScope) } + private fun loadDrawable(avatarUrl: String?) { + viewModelScope.launch { + avatarUrl?.let { + val drawableAvatar = drawableUtils.downloadDrawable(avatarUrl) + _uiState.update { currentState -> + currentState.copy( + avatarDrawable = drawableAvatar, + ) + } + } + } + } + private fun collectProfile() { userRepository.getProfile() .onEach { profile -> diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/components/ShareHeader.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/components/ShareHeader.kt index 8becf8b0..37c140f1 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/components/ShareHeader.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/components/ShareHeader.kt @@ -45,6 +45,7 @@ internal fun ShareHeader( avatarUrl: String, vCardQrCodeData: String, modifier: Modifier = Modifier, + onShareClick: () -> Unit = {}, onAboutAppClicked: () -> Unit = {}, ) { var topBarMenuVisible by remember { mutableStateOf(false) } @@ -91,7 +92,7 @@ internal fun ShareHeader( color = Color.White, ) } - Column { + Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { Box { IconButton( onClick = { @@ -117,6 +118,18 @@ internal fun ShareHeader( ) } } + IconButton( + onClick = { + onShareClick() + }, + modifier = Modifier + .size(MENU_BUTTON_SIZE) + ) { + Image( + painter = painterResource(id = R.drawable.share_button), + contentDescription = null + ) + } } } } @@ -129,6 +142,7 @@ private fun ShareHeaderPreview() { ShareHeader( avatarUrl = "url", vCardQrCodeData = "BEGIN:VCARD\nVERSION:3.0\nFN:Preview User\nEND:VCARD", + onShareClick = { }, modifier = Modifier .fillMaxWidth() ) diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt index f9c8ebf2..d9d1a0ed 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt @@ -1,5 +1,8 @@ package com.gravatar.app.homeUi.presentation.home.share.model +import android.graphics.drawable.Drawable +import com.gravatar.app.homeUi.presentation.drawableToBase64 + internal class VCard private constructor( val firstName: String? = null, val lastName: String? = null, @@ -10,9 +13,10 @@ internal class VCard private constructor( val note: String? = null, val phoneNumber: String? = null, val email: String? = null, + val photo: Drawable? = null, // Base64 encoded photo data ) { - override fun toString(): String { + fun exportToString(withPhoto: Boolean = true): String { val contentBuilder = StringBuilder().append("BEGIN:VCARD\n") .append("VERSION:3.0\n") .append("PRODID:Gravatar Android\n") @@ -40,11 +44,20 @@ internal class VCard private constructor( note?.takeIf { it.isNotEmpty() }?.let { contentBuilder.append("NOTE:${it.escaped()}\n") } phoneNumber?.takeIf { it.isNotEmpty() }?.let { contentBuilder.append("TEL;TYPE=cell:${it.escaped()}\n") } email?.takeIf { it.isNotEmpty() }?.let { contentBuilder.append("EMAIL:${it.escaped()}\n") } + if (withPhoto) { + photo?.let { + drawableToBase64(it).onSuccess { photoBase64 -> + contentBuilder.append("PHOTO;ENCODING=b;TYPE=JPEG:$photoBase64\n") + } + } + } contentBuilder.append("END:VCARD") return contentBuilder.toString() } + override fun toString() = exportToString() + // We've seen issues with newlines in the vCard content causing problems when importing the contact so removing them private fun String.escaped() = this.replace("\n", " ") @@ -58,6 +71,7 @@ internal class VCard private constructor( private var note: String? = null, private var phoneNumber: String? = null, private var email: String? = null, + private var photo: Drawable? = null, ) { fun firstName(firstName: String?) = apply { this.firstName = firstName } fun lastName(lastName: String?) = apply { this.lastName = lastName } @@ -68,6 +82,7 @@ internal class VCard private constructor( fun note(description: String?) = apply { this.note = description } fun phoneNumber(phone: String?) = apply { this.phoneNumber = phone } fun email(email: String?) = apply { this.email = email } + fun photo(photo: Drawable?) = apply { this.photo = photo } fun build() = VCard( firstName = firstName, @@ -78,7 +93,8 @@ internal class VCard private constructor( profileUrl = profileUrl, note = note, phoneNumber = phoneNumber, - email = email + email = email, + photo = photo, ) } } diff --git a/homeUi/src/main/res/drawable/share_button.xml b/homeUi/src/main/res/drawable/share_button.xml new file mode 100644 index 00000000..2d16992d --- /dev/null +++ b/homeUi/src/main/res/drawable/share_button.xml @@ -0,0 +1,13 @@ + + + + diff --git a/homeUi/src/main/res/xml/gravatar_filepaths.xml b/homeUi/src/main/res/xml/gravatar_filepaths.xml index d3e5e1e2..8588aac7 100644 --- a/homeUi/src/main/res/xml/gravatar_filepaths.xml +++ b/homeUi/src/main/res/xml/gravatar_filepaths.xml @@ -3,4 +3,7 @@ + diff --git a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt index 6102ff8e..543d7da4 100644 --- a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt +++ b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt @@ -1,6 +1,8 @@ package com.gravatar.app.homeUi.presentation.home.share import app.cash.turbine.test +import com.gravatar.app.homeUi.presentation.DrawableUtils +import com.gravatar.app.homeUi.presentation.FileUtils import com.gravatar.app.testUtils.CoroutineTestRule import com.gravatar.app.usercomponent.domain.model.PrivateContactInfo import com.gravatar.app.usercomponent.domain.model.UserSharePreferences @@ -12,8 +14,10 @@ import com.gravatar.app.usercomponent.domain.usecase.UpdatePrivateContactInfo import com.gravatar.app.usercomponent.domain.usecase.UpdateUserSharePreferences import com.gravatar.restapi.models.Profile import com.gravatar.restapi.models.ProfileContactInfo +import io.mockk.coEvery import io.mockk.every import io.mockk.mockk +import io.mockk.verify import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.test.StandardTestDispatcher @@ -26,6 +30,7 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule import org.junit.Test +import java.io.File import java.net.URI import java.net.URL @@ -56,6 +61,9 @@ class ShareViewModelTest { } } private val userRepository = mockk() + private val fileUtils = mockk() + private val drawableUtils = mockk() + private val testVCardFile = mockk() private lateinit var viewModel: ShareViewModel @@ -67,13 +75,18 @@ class ShareViewModelTest { @Before fun setup() { every { userRepository.getProfile() } returns profileFlow + coEvery { fileUtils.createVCardFile(any(), any()) } returns testVCardFile + coEvery { drawableUtils.downloadDrawable(any()) } returns null + viewModel = ShareViewModel( userRepository, getAvatarUrl, getUserSharePreferences, updateUserSharePreferences, getPrivateContactInfo, - updatePrivateContactInfo + updatePrivateContactInfo, + drawableUtils, + fileUtils, ) } @@ -514,4 +527,26 @@ class ShareViewModelTest { email = "test@example.com" } } + + @Test + fun `when OnShareClick event is triggered then ShareVCard action is sent`() = runTest { + // Given + val testProfile = createTestProfile() + profileFlow.emit(testProfile) + advanceUntilIdle() + + // When + viewModel.actions.test { + viewModel.onEvent(ShareEvent.OnShareClick) + advanceUntilIdle() + + // Then + val action = awaitItem() + assertTrue(action is ShareAction.ShareVCard) + assertEquals(testVCardFile, (action as ShareAction.ShareVCard).vCardFile) + + // Verify that createVCardFile was called with the correct parameters + verify { fileUtils.createVCardFile(eq(testProfile.displayName), any()) } + } + } } diff --git a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCardTest.kt b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCardTest.kt index 06d5de93..4d32a7de 100644 --- a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCardTest.kt +++ b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCardTest.kt @@ -1,11 +1,35 @@ package com.gravatar.app.homeUi.presentation.home.share.model +import android.graphics.drawable.Drawable +import com.gravatar.app.homeUi.presentation.drawableToBase64 +import io.mockk.every +import io.mockk.mockk +import io.mockk.mockkStatic +import io.mockk.unmockkStatic +import org.junit.After import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue +import org.junit.Before import org.junit.Test class VCardTest { + private lateinit var mockDrawable: Drawable + private val testBase64String = "TestBase64EncodedPhotoData" + + @Before + fun setup() { + mockDrawable = mockk() + mockkStatic(::drawableToBase64) + every { drawableToBase64(mockDrawable, any(), any()) } returns Result.success(testBase64String) + } + + @After + fun tearDown() { + unmockkStatic(::drawableToBase64) + } + @Test fun `builder creates VCard with all fields correctly`() { val vCard = VCard.Builder() @@ -174,4 +198,52 @@ class VCardTest { assertTrue(vCardString.contains("EMAIL:john.doe@example.com")) assertTrue(vCardString.endsWith("END:VCARD")) } + + @Test + fun `when photo is available and withPhoto is true, photo is included in vCard`() { + // Given + val vCard = VCard.Builder() + .firstName("John") + .lastName("Doe") + .photo(mockDrawable) + .build() + + // When + val vCardString = vCard.exportToString(withPhoto = true) + + // Then + assertTrue(vCardString.contains("PHOTO;ENCODING=b;TYPE=JPEG:$testBase64String")) + } + + @Test + fun `when photo is available and withPhoto is false, photo is not included in vCard`() { + // Given + val vCard = VCard.Builder() + .firstName("John") + .lastName("Doe") + .photo(mockDrawable) + .build() + + // When + val vCardString = vCard.exportToString(withPhoto = false) + + // Then + assertFalse(vCardString.contains("PHOTO;ENCODING=b;TYPE=JPEG:")) + } + + @Test + fun `when photo is null and withPhoto is true, photo is not included in vCard`() { + // Given + val vCard = VCard.Builder() + .firstName("John") + .lastName("Doe") + .photo(null) + .build() + + // When + val vCardString = vCard.exportToString(withPhoto = true) + + // Then + assertFalse(vCardString.contains("PHOTO;ENCODING=b;TYPE=JPEG:")) + } } From f4ea25d9626f0c4fcb67d14dcc0a2b041c834bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?He=CC=81ctor=20Abraham?= Date: Thu, 31 Jul 2025 09:36:05 +0200 Subject: [PATCH 2/3] Apply Copilot suggetions --- .../gravatar/app/homeUi/presentation/home/share/ShareAction.kt | 2 +- .../gravatar/app/homeUi/presentation/home/share/model/VCard.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt index a4fbc9c2..71edbc67 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareAction.kt @@ -2,6 +2,6 @@ package com.gravatar.app.homeUi.presentation.home.share import java.io.File -sealed class ShareAction { +internal sealed class ShareAction { data class ShareVCard(val vCardFile: File) : ShareAction() } diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt index d9d1a0ed..57e8271d 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/model/VCard.kt @@ -13,7 +13,7 @@ internal class VCard private constructor( val note: String? = null, val phoneNumber: String? = null, val email: String? = null, - val photo: Drawable? = null, // Base64 encoded photo data + val photo: Drawable? = null, ) { fun exportToString(withPhoto: Boolean = true): String { From e4c89563b282df4810d98a13d08412f800563954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?He=CC=81ctor=20Abraham?= Date: Thu, 31 Jul 2025 10:53:24 +0200 Subject: [PATCH 3/3] Create Facades for PrivateContactInfo and UserSharePreferences usecases --- .../presentation/home/share/ShareViewModel.kt | 21 ++++------ .../home/share/ShareViewModelTest.kt | 20 ++++++++-- .../usercomponent/di/UserComponentModule.kt | 6 +++ .../facade/PrivateContactInfoOperations.kt | 40 +++++++++++++++++++ .../facade/UserSharePreferencesOperations.kt | 40 +++++++++++++++++++ 5 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/PrivateContactInfoOperations.kt create mode 100644 userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/UserSharePreferencesOperations.kt diff --git a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt index 5180a619..beae6590 100644 --- a/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt +++ b/homeUi/src/main/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModel.kt @@ -4,12 +4,10 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.gravatar.app.homeUi.presentation.DrawableUtils import com.gravatar.app.homeUi.presentation.FileUtils +import com.gravatar.app.usercomponent.domain.facade.PrivateContactInfoFacade +import com.gravatar.app.usercomponent.domain.facade.UserSharePreferencesFacade import com.gravatar.app.usercomponent.domain.repository.UserRepository import com.gravatar.app.usercomponent.domain.usecase.GetAvatarUrl -import com.gravatar.app.usercomponent.domain.usecase.GetPrivateContactInfo -import com.gravatar.app.usercomponent.domain.usecase.GetUserSharePreferences -import com.gravatar.app.usercomponent.domain.usecase.UpdatePrivateContactInfo -import com.gravatar.app.usercomponent.domain.usecase.UpdateUserSharePreferences import kotlinx.coroutines.Job import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay @@ -22,14 +20,11 @@ import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -@Suppress("LongParameterList") internal class ShareViewModel( private val userRepository: UserRepository, private val getAvatarUrl: GetAvatarUrl, - private val getUserSharePreferences: GetUserSharePreferences, - private val updateUserSharePreferences: UpdateUserSharePreferences, - private val getPrivateContactInfo: GetPrivateContactInfo, - private val updatePrivateContactInfo: UpdatePrivateContactInfo, + private val sharePreferencesFacade: UserSharePreferencesFacade, + private val privateContactInfoFacade: PrivateContactInfoFacade, private val drawableUtils: DrawableUtils, private val fileUtils: FileUtils, ) : ViewModel() { @@ -98,7 +93,7 @@ internal class ShareViewModel( _uiState.value = this // Save the updated preferences viewModelScope.launch { - updateUserSharePreferences(this@with.userSharePreferences) + sharePreferencesFacade.updatePreferences(this@with.userSharePreferences) } } } @@ -110,7 +105,7 @@ internal class ShareViewModel( // Create a new job with debounce saveContactInfoJob = viewModelScope.launch { delay(debounceDelay) // Wait for the debounce period - updatePrivateContactInfo(_uiState.value.privateContactInfo) + privateContactInfoFacade.updateContactInfo(_uiState.value.privateContactInfo) } } @@ -177,7 +172,7 @@ internal class ShareViewModel( } private fun collectUserSharePreferences() { - getUserSharePreferences() + sharePreferencesFacade.getPreferences() .onEach { preferences -> _uiState.update { currentState -> currentState.copy( @@ -189,7 +184,7 @@ internal class ShareViewModel( } private fun collectPrivateContactInfo() { - getPrivateContactInfo() + privateContactInfoFacade.getContactInfo() .onEach { privateContactInfo -> _uiState.update { currentState -> currentState.copy( diff --git a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt index 543d7da4..ad2f48f7 100644 --- a/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt +++ b/homeUi/src/test/kotlin/com/gravatar/app/homeUi/presentation/home/share/ShareViewModelTest.kt @@ -4,6 +4,8 @@ import app.cash.turbine.test import com.gravatar.app.homeUi.presentation.DrawableUtils import com.gravatar.app.homeUi.presentation.FileUtils import com.gravatar.app.testUtils.CoroutineTestRule +import com.gravatar.app.usercomponent.domain.facade.PrivateContactInfoFacade +import com.gravatar.app.usercomponent.domain.facade.UserSharePreferencesFacade import com.gravatar.app.usercomponent.domain.model.PrivateContactInfo import com.gravatar.app.usercomponent.domain.model.UserSharePreferences import com.gravatar.app.usercomponent.domain.repository.UserRepository @@ -60,6 +62,18 @@ class ShareViewModelTest { privateContactInfoFlow.emit(privateContactInfo) } } + + private val userSharePreferencesFacade = object : UserSharePreferencesFacade { + override fun getPreferences() = getUserSharePreferences() + override suspend fun updatePreferences(preferences: UserSharePreferences) = + updateUserSharePreferences(preferences) + } + + private val privateContactInfoFacade = object : PrivateContactInfoFacade { + override fun getContactInfo() = getPrivateContactInfo() + override suspend fun updateContactInfo(info: PrivateContactInfo) = + updatePrivateContactInfo(info) + } private val userRepository = mockk() private val fileUtils = mockk() private val drawableUtils = mockk() @@ -81,10 +95,8 @@ class ShareViewModelTest { viewModel = ShareViewModel( userRepository, getAvatarUrl, - getUserSharePreferences, - updateUserSharePreferences, - getPrivateContactInfo, - updatePrivateContactInfo, + userSharePreferencesFacade, + privateContactInfoFacade, drawableUtils, fileUtils, ) diff --git a/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/di/UserComponentModule.kt b/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/di/UserComponentModule.kt index d630dedb..3fa2bba9 100644 --- a/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/di/UserComponentModule.kt +++ b/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/di/UserComponentModule.kt @@ -6,6 +6,10 @@ import com.gravatar.app.usercomponent.data.RealProfileRepository import com.gravatar.app.usercomponent.data.RealUserRepository import com.gravatar.app.usercomponent.data.UserSessionPersistence import com.gravatar.app.usercomponent.data.WordPressClient +import com.gravatar.app.usercomponent.domain.facade.PrivateContactInfoFacade +import com.gravatar.app.usercomponent.domain.facade.PrivateContactInfoOperations +import com.gravatar.app.usercomponent.domain.facade.UserSharePreferencesFacade +import com.gravatar.app.usercomponent.domain.facade.UserSharePreferencesOperations import com.gravatar.app.usercomponent.domain.repository.AuthRepository import com.gravatar.app.usercomponent.domain.repository.ProfileRepository import com.gravatar.app.usercomponent.domain.repository.UserRepository @@ -54,6 +58,8 @@ val userComponentModule = module { factoryOf(::UpdateUserSharePreferencesUseCase) { bind() } factoryOf(::GetPrivateContactInfoUseCase) { bind() } factoryOf(::UpdatePrivateContactInfoUseCase) { bind() } + factoryOf(::UserSharePreferencesOperations) { bind() } + factoryOf(::PrivateContactInfoOperations) { bind() } factoryOf(::WordPressClient) singleOf(::InMemoryUserSessionPersistence) { bind() } includes(httpClientModule) diff --git a/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/PrivateContactInfoOperations.kt b/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/PrivateContactInfoOperations.kt new file mode 100644 index 00000000..b855ab7f --- /dev/null +++ b/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/PrivateContactInfoOperations.kt @@ -0,0 +1,40 @@ +package com.gravatar.app.usercomponent.domain.facade + +import com.gravatar.app.usercomponent.domain.model.PrivateContactInfo +import com.gravatar.app.usercomponent.domain.usecase.GetPrivateContactInfo +import com.gravatar.app.usercomponent.domain.usecase.UpdatePrivateContactInfo +import kotlinx.coroutines.flow.Flow + +/** + * Facade implementation that combines contact information-related use cases. + */ +internal class PrivateContactInfoOperations( + private val getPrivateContactInfo: GetPrivateContactInfo, + private val updatePrivateContactInfo: UpdatePrivateContactInfo +) : PrivateContactInfoFacade { + /** + * Get private contact information as a Flow. + */ + override fun getContactInfo(): Flow = getPrivateContactInfo() + + /** + * Update private contact information. + */ + override suspend fun updateContactInfo(info: PrivateContactInfo) = + updatePrivateContactInfo(info) +} + +/** + * Facade that combines contact information-related use cases. + */ +interface PrivateContactInfoFacade { + /** + * Get private contact information as a Flow. + */ + fun getContactInfo(): Flow + + /** + * Update private contact information. + */ + suspend fun updateContactInfo(info: PrivateContactInfo) +} diff --git a/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/UserSharePreferencesOperations.kt b/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/UserSharePreferencesOperations.kt new file mode 100644 index 00000000..7c632b98 --- /dev/null +++ b/userComponent/src/main/kotlin/com/gravatar/app/usercomponent/domain/facade/UserSharePreferencesOperations.kt @@ -0,0 +1,40 @@ +package com.gravatar.app.usercomponent.domain.facade + +import com.gravatar.app.usercomponent.domain.model.UserSharePreferences +import com.gravatar.app.usercomponent.domain.usecase.GetUserSharePreferences +import com.gravatar.app.usercomponent.domain.usecase.UpdateUserSharePreferences +import kotlinx.coroutines.flow.Flow + +/** + * Facade implementation that combines user preferences-related use cases. + */ +internal class UserSharePreferencesOperations( + private val getUserSharePreferences: GetUserSharePreferences, + private val updateUserSharePreferences: UpdateUserSharePreferences +) : UserSharePreferencesFacade { + /** + * Get user share preferences as a Flow. + */ + override fun getPreferences(): Flow = getUserSharePreferences() + + /** + * Update user share preferences. + */ + override suspend fun updatePreferences(preferences: UserSharePreferences) = + updateUserSharePreferences(preferences) +} + +/** + * Facade that combines user preferences-related use cases. + */ +interface UserSharePreferencesFacade { + /** + * Get user share preferences as a Flow. + */ + fun getPreferences(): Flow + + /** + * Update user share preferences. + */ + suspend fun updatePreferences(preferences: UserSharePreferences) +}