From 8b1d1b85eba7ebd1176f04cbdd3436337576d623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A2=85=EC=88=98?= Date: Sat, 23 May 2026 23:06:13 +0900 Subject: [PATCH] =?UTF-8?q?[feat]=20change=5Flanguage=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=84=A4=EA=B3=84=20(=EC=95=B1=20=EB=82=B4=20?= =?UTF-8?q?=EC=96=B8=EC=96=B4=20=EC=84=A4=EC=A0=95=EC=9D=B4=20=EB=B0=94?= =?UTF-8?q?=EB=80=90=20=EA=B2=BD=EC=9A=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mypage/language/LanguageSelectorScreen.kt | 15 ++++++++++++++- .../analytics/PostHogAnalyticsTrackerTest.kt | 18 ++++++++++++++++++ .../eatssu/common/analytics/AnalyticsEvent.kt | 11 ++++++++++- 3 files changed, 42 insertions(+), 2 deletions(-) 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"