diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/language/LanguageSelectorScreen.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/language/LanguageSelectorScreen.kt index 432d9e40..ed4264c8 100644 --- a/app/src/main/java/com/eatssu/android/presentation/mypage/language/LanguageSelectorScreen.kt +++ b/app/src/main/java/com/eatssu/android/presentation/mypage/language/LanguageSelectorScreen.kt @@ -13,6 +13,8 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.eatssu.android.R +import com.eatssu.android.analytics.LocalAnalyticsTracker +import com.eatssu.common.analytics.ChangeLanguageEvent import com.eatssu.common.enums.AppLanguage import com.eatssu.design_system.component.EatSsuRadioCheckBoxGroup import com.eatssu.design_system.component.EatSsuTopBar @@ -25,11 +27,22 @@ fun LanguageSelectorScreen( onBack: () -> Unit = {} ) { val selectedLanguage by viewModel.selectedLanguage.collectAsStateWithLifecycle() + val analyticsTracker = LocalAnalyticsTracker.current LanguageSelectorContent( modifier = modifier, selectedLanguage = selectedLanguage, - onLanguageSelected = { viewModel.selectLanguage(it) }, + onLanguageSelected = { language -> + if (selectedLanguage != language) { + analyticsTracker.track( + ChangeLanguageEvent( + lang_from = selectedLanguage.code, + lang_to = language.code, + ), + ) + } + viewModel.selectLanguage(language) + }, onBack = onBack ) } diff --git a/app/src/test/java/com/eatssu/android/analytics/PostHogAnalyticsTrackerTest.kt b/app/src/test/java/com/eatssu/android/analytics/PostHogAnalyticsTrackerTest.kt index 3f392d03..59a99e1d 100644 --- a/app/src/test/java/com/eatssu/android/analytics/PostHogAnalyticsTrackerTest.kt +++ b/app/src/test/java/com/eatssu/android/analytics/PostHogAnalyticsTrackerTest.kt @@ -2,6 +2,7 @@ package com.eatssu.android.analytics import com.eatssu.common.analytics.AnalyticsIdentity import com.eatssu.common.analytics.AppAnalyticsEvent +import com.eatssu.common.analytics.ChangeLanguageEvent import com.eatssu.common.analytics.PopupEvent import com.eatssu.common.analytics.WidgetAnalyticsEvent import com.eatssu.common.enums.LaunchPath @@ -26,6 +27,23 @@ class PostHogAnalyticsTrackerTest { ) } + @Test + fun `change language payload keeps previous and next locale codes`() { + val payload = ChangeLanguageEvent( + lang_from = "ko", + lang_to = "en", + ).toPayload() + + assertEquals("change_language", payload.eventName) + assertEquals( + mapOf( + "lang_from" to "ko", + "lang_to" to "en", + ), + payload.properties, + ) + } + @Test fun `popup event payload keeps popup name and action`() { val payload = PopupEvent( diff --git a/core/common/src/main/java/com/eatssu/common/analytics/AnalyticsEvent.kt b/core/common/src/main/java/com/eatssu/common/analytics/AnalyticsEvent.kt index 396d2b76..1e2c50f4 100644 --- a/core/common/src/main/java/com/eatssu/common/analytics/AnalyticsEvent.kt +++ b/core/common/src/main/java/com/eatssu/common/analytics/AnalyticsEvent.kt @@ -251,7 +251,16 @@ data class PopupEvent( } } - +data class ChangeLanguageEvent( + val lang_from: String, + val lang_to: String, +) : AppAnalyticsEvent { + override val eventName = "change_language" + override val properties = buildMap { + put("lang_from", lang_from) + put("lang_to", lang_to) + } +} private fun String.toWeekdayCode() = when (this) { "SUNDAY" -> "sun"