Skip to content

Commit 96b90c9

Browse files
authored
[feat] Posthog 이벤트 수정 및 신규 생성 (#527)
* [feat] Posthog 이벤트 수정 및 신규 생성 * [fix] 리뷰 이벤트 식당 파라미터 전달 * [bugfix] Github Action에서 Test에 실패하던 문제 수정 * Merge로 인한 Build 에러 수정
1 parent c44e1c4 commit 96b90c9

24 files changed

Lines changed: 502 additions & 75 deletions

app/src/main/java/com/eatssu/android/presentation/MainActivity.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,9 @@ import com.google.android.material.bottomnavigation.BottomNavigationView
3232
import dagger.hilt.android.AndroidEntryPoint
3333
import kotlinx.coroutines.flow.collectLatest
3434
import kotlinx.coroutines.launch
35-
import java.text.SimpleDateFormat
36-
import java.util.Locale
37-
import javax.inject.Inject
3835
import java.time.LocalDateTime
3936
import java.time.format.DateTimeFormatter
37+
import javax.inject.Inject
4038

4139

4240
@AndroidEntryPoint
@@ -95,6 +93,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(
9593
}
9694

9795
R.id.anyone_but_me_menu -> {
96+
mainViewModel.analyticsPlzNotMe()
9897
anyoneButMeEventPopupController.openAnyoneButMePage()
9998
false
10099
}

app/src/main/java/com/eatssu/android/presentation/MainViewModel.kt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import com.eatssu.android.domain.usecase.user.SetUserCollegeDepartmentUseCase
1616
import com.eatssu.common.UiEvent
1717
import com.eatssu.common.UiState
1818
import com.eatssu.common.UiText
19+
import com.eatssu.common.analytics.AnalyticsTracker
20+
import com.eatssu.common.analytics.ClickMyPageMenuEvent
21+
import com.eatssu.common.analytics.ClickPlzNotMeEvent
1922
import com.eatssu.common.enums.ToastType
2023
import dagger.hilt.android.lifecycle.HiltViewModel
2124
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -38,6 +41,7 @@ class MainViewModel @Inject constructor(
3841
private val getUserCollegeDepartmentUseCase: GetUserCollegeDepartmentUseCase,
3942
private val getUserEmailUseCase: GetUserEmailUseCase,
4043
private val analyticsIdentityManager: AnalyticsIdentityManager,
44+
private val analyticsTracker: AnalyticsTracker,
4145
private val settingDataStore: SettingDataStore,
4246
) : ViewModel() {
4347

@@ -67,6 +71,35 @@ class MainViewModel @Inject constructor(
6771
}
6872
}
6973

74+
fun analyticsPlzNotMe() {
75+
viewModelScope.launch {
76+
val userCollegeDepartment = getUserCollegeDepartmentUseCase()
77+
val newDepartmentId = userCollegeDepartment.userDepartment.departmentId.toLong()
78+
val newCollegeId = userCollegeDepartment.userCollege.collegeId.toLong()
79+
80+
analyticsTracker.track(
81+
ClickPlzNotMeEvent(
82+
college = newDepartmentId,
83+
major = newCollegeId,
84+
),
85+
)
86+
87+
}
88+
}
89+
90+
fun trackMyPageMenu(menu: String) {
91+
viewModelScope.launch {
92+
val userCollegeDepartment = getUserCollegeDepartmentUseCase()
93+
analyticsTracker.track(
94+
ClickMyPageMenuEvent(
95+
college = userCollegeDepartment.userCollege.collegeId.toLong(),
96+
major = userCollegeDepartment.userDepartment.departmentId.toLong(),
97+
menu = menu,
98+
),
99+
)
100+
}
101+
}
102+
70103
fun refreshUserDepartmentFromServer() {
71104
viewModelScope.launch {
72105
loadUserDepartmentFromServer()

app/src/main/java/com/eatssu/android/presentation/cafeteria/menu/MenuSubAdapter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class MenuSubAdapter(
4343

4444
val item = dataList[position]
4545
val intent = Intent(binding.root.context, ReviewComposeActivity::class.java)
46+
intent.putExtra("restaurant", restaurant.name)
4647

4748
when (restaurant.menuType) {
4849
MenuType.FIXED -> {

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewComposeActivity.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import androidx.navigation.compose.rememberNavController
2222
import com.eatssu.android.analytics.ProvideAnalyticsTracker
2323
import com.eatssu.common.analytics.AnalyticsTracker
2424
import com.eatssu.common.enums.MenuType
25+
import com.eatssu.common.enums.Restaurant
2526
import com.eatssu.design_system.theme.EatssuTheme
2627
import com.google.firebase.crashlytics.FirebaseCrashlytics
2728
import dagger.hilt.android.AndroidEntryPoint
@@ -36,6 +37,7 @@ class ReviewComposeActivity : ComponentActivity() {
3637
lateinit var analyticsTracker: AnalyticsTracker
3738

3839
private var menuType: String? = null
40+
private var restaurant: String? = null
3941
private var itemId by Delegates.notNull<Long>()
4042
private lateinit var itemName: String
4143

@@ -48,17 +50,19 @@ class ReviewComposeActivity : ComponentActivity() {
4850
EatssuTheme {
4951
val navHostController = rememberNavController()
5052
val parsedMenuType = MenuType.entries.find { it.name == menuType }
53+
val parsedRestaurant = Restaurant.entries.find { it.name == restaurant }
5154

52-
parsedMenuType?.let { type ->
55+
if (parsedMenuType != null && parsedRestaurant != null) {
5356
ReviewNav(
5457
navHostController = navHostController,
55-
menuType = type,
58+
menuType = parsedMenuType,
59+
restaurant = parsedRestaurant,
5660
menuName = itemName,
5761
id = itemId,
5862
onExit = { finish() }
5963
)
60-
} ?: run {
61-
Timber.e("Invalid or null MenuType received: $menuType")
64+
} else {
65+
Timber.e("Invalid review parameters received: menuType=$menuType, restaurant=$restaurant")
6266
ErrorScreen(
6367
onBackClick = { finish() }
6468
)
@@ -70,6 +74,7 @@ class ReviewComposeActivity : ComponentActivity() {
7074

7175
private fun getIntents() { //todo 추후 변경
7276
menuType = intent.getStringExtra("menuType")
77+
restaurant = intent.getStringExtra("restaurant")
7378
itemId = intent.getLongExtra("itemId", 0)
7479
itemName = intent.getStringExtra("itemName").toString().replace(Regex("[\\[\\]]"), "")
7580

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/ReviewNav.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.eatssu.android.presentation.cafeteria.review.list.ReviewListScreen
1313
import com.eatssu.android.presentation.cafeteria.review.modify.ModifyReviewScreen
1414
import com.eatssu.android.presentation.cafeteria.review.write.WriteReviewScreen
1515
import com.eatssu.common.enums.MenuType
16+
import com.eatssu.common.enums.Restaurant
1617

1718
object ReviewNav {
1819
const val List = "list"
@@ -27,6 +28,7 @@ fun ReviewNav(
2728
navHostController: NavHostController = rememberNavController(),
2829
menuName: String,
2930
menuType: MenuType,
31+
restaurant: Restaurant,
3032
id: Long,
3133
onExit: () -> Unit = {}
3234
) {
@@ -44,6 +46,7 @@ fun ReviewNav(
4446
ReviewListScreen(
4547
menuName = menuName,
4648
menuType = menuType,
49+
restaurant = restaurant,
4750
id = id,
4851
refreshNonce = refreshNonce,
4952
onBack = { onExit() },
@@ -76,6 +79,7 @@ fun ReviewNav(
7679
composable(ReviewNav.Write) { backStackEntry ->
7780
WriteReviewScreen(
7881
menuType = menuType,
82+
restaurant = restaurant,
7983
menuName = menuName,
8084
id = id,
8185
onBack = {

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import com.eatssu.common.UiState
5959
import com.eatssu.common.UiText
6060
import com.eatssu.common.analytics.ReviewAnalyticsEvent
6161
import com.eatssu.common.enums.MenuType
62+
import com.eatssu.common.enums.Restaurant
6263
import com.eatssu.common.enums.ScreenId
6364
import com.eatssu.common.enums.ToastType
6465
import com.eatssu.design_system.component.DelayedLoadingIndicator
@@ -76,6 +77,7 @@ fun ReviewListScreen(
7677
modifier: Modifier = Modifier,
7778
viewModel: ReviewListViewModel = hiltViewModel(),
7879
menuType: MenuType,
80+
restaurant: Restaurant,
7981
menuName: String,
8082
id: Long,
8183
refreshNonce: Long = 0L,
@@ -125,6 +127,7 @@ fun ReviewListScreen(
125127
reviewPagingItems = reviewPagingItems,
126128
modifier = modifier,
127129
menuName = menuName,
130+
restaurant = restaurant,
128131
onBack = onBack,
129132
onReviewWriteButtonClick = onWriteButtonClick,
130133
onModifyClick = onModifyClick,
@@ -138,6 +141,7 @@ internal fun ReviewListScreen(
138141
reviewPagingItems: LazyPagingItems<Review>,
139142
modifier: Modifier = Modifier,
140143
menuName: String,
144+
restaurant: Restaurant,
141145
onBack: () -> Unit = {},
142146
onReviewWriteButtonClick: () -> Unit,
143147
onModifyClick: (Review) -> Unit,
@@ -192,7 +196,7 @@ internal fun ReviewListScreen(
192196
text = stringResource(R.string.review_write),
193197
onClick = {
194198
onReviewWriteButtonClick()
195-
analyticsTracker.track(ReviewAnalyticsEvent.WriteClicked)
199+
analyticsTracker.track(ReviewAnalyticsEvent.WriteClicked(restaurant))
196200
},
197201
modifier = Modifier
198202
.padding(24.dp)
@@ -628,6 +632,7 @@ fun ReviewListPreview() {
628632
EatssuTheme {
629633
ReviewListScreen(
630634
menuName = "소고기+닭고기+돼지고기+양고기+오리고기",
635+
restaurant = Restaurant.HAKSIK,
631636
onReviewWriteButtonClick = {},
632637
onModifyClick = {},
633638
onDeleteClick = {},
@@ -663,6 +668,7 @@ fun ReviewListLoadingPreview() {
663668
EatssuTheme {
664669
ReviewListScreen(
665670
menuName = "소고기+닭고기+돼지고기+양고기+오리고기",
671+
restaurant = Restaurant.HAKSIK,
666672
onReviewWriteButtonClick = {},
667673
onModifyClick = {},
668674
onDeleteClick = {},
@@ -698,6 +704,7 @@ fun ReviewListEmptyPreview() {
698704
EatssuTheme {
699705
ReviewListScreen(
700706
menuName = "소고기+닭고기+돼지고기+양고기+오리고기+닭고기+돼지고기+양고기",
707+
restaurant = Restaurant.HAKSIK,
701708
onReviewWriteButtonClick = {},
702709
onModifyClick = {},
703710
onDeleteClick = {},
@@ -733,6 +740,7 @@ fun ReviewListErrorPreview() {
733740
EatssuTheme {
734741
ReviewListScreen(
735742
menuName = "소고기+닭고기+돼지고기+양고기+오리고기",
743+
restaurant = Restaurant.HAKSIK,
736744
onReviewWriteButtonClick = {},
737745
onModifyClick = {},
738746
onDeleteClick = {},

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewScreen.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import com.eatssu.android.presentation.util.showToast
5050
import com.eatssu.common.UiEvent
5151
import com.eatssu.common.UiState
5252
import com.eatssu.common.enums.MenuType
53+
import com.eatssu.common.enums.Restaurant
5354
import com.eatssu.common.enums.ScreenId
5455
import com.eatssu.design_system.component.CloseTopBar
5556
import com.eatssu.design_system.component.EatSsuButton
@@ -72,6 +73,7 @@ fun WriteReviewScreen(
7273
viewModel: WriteReviewViewModel = hiltViewModel(),
7374
menuName: String,
7475
menuType: MenuType,
76+
restaurant: Restaurant,
7577
id: Long,
7678
onBack: () -> Unit,
7779
) {
@@ -121,7 +123,7 @@ fun WriteReviewScreen(
121123
onToggleLike = viewModel::toggleLike,
122124
onImageSelect = { galleryLauncher.launch("image/*") },
123125
onImageDelete = { viewModel.setSelectedImage(null) },
124-
onSubmit = { viewModel.postReview(menuType, id, context) }
126+
onSubmit = { viewModel.postReview(menuType, restaurant, id, context) }
125127
)
126128
}
127129

app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.eatssu.common.UiState
1515
import com.eatssu.common.UiText
1616
import com.eatssu.common.analytics.ReviewAnalyticsEvent
1717
import com.eatssu.common.enums.MenuType
18+
import com.eatssu.common.enums.Restaurant
1819
import com.eatssu.common.enums.ToastType
1920
import dagger.hilt.android.lifecycle.HiltViewModel
2021
import id.zelory.compressor.Compressor
@@ -88,6 +89,7 @@ class WriteReviewViewModel @Inject constructor(
8889

8990
fun postReview(
9091
menuType: MenuType,
92+
restaurant: Restaurant,
9193
itemId: Long,
9294
context: Context,
9395
) {
@@ -167,6 +169,7 @@ class WriteReviewViewModel @Inject constructor(
167169
rating = editing.rating.toLong(),
168170
likes = editing.likedMenuIds.size.toLong(),
169171
photoAttached = editing.selectedImageUri != null,
172+
restaurant = restaurant,
170173
),
171174
)
172175

app/src/main/java/com/eatssu/android/presentation/event/AnyoneButMeEventPopupController.kt

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import com.eatssu.android.R
1010
import com.eatssu.android.data.local.AppFeatureDataStore
1111
import com.eatssu.android.presentation.mypage.terms.WebViewActivity
1212
import com.eatssu.android.presentation.util.openInBrowser
13+
import com.eatssu.common.analytics.AnalyticsTracker
14+
import com.eatssu.common.analytics.PopupEvent
1315
import com.eatssu.common.enums.ScreenId
1416
import com.eatssu.design_system.theme.EatssuTheme
1517
import dagger.hilt.android.qualifiers.ActivityContext
@@ -22,7 +24,16 @@ import javax.inject.Inject
2224
class AnyoneButMeEventPopupController @Inject constructor(
2325
@ActivityContext private val context: Context,
2426
private val appFeatureDataStore: AppFeatureDataStore,
27+
private val analyticsTracker: AnalyticsTracker,
2528
) {
29+
private companion object {
30+
const val POPUP_NAME_PLZ_NOT_ME = "plz_not_me"
31+
const val ACTION_CLICK_POPUP_IMAGE = "click_popup_image"
32+
const val ACTION_GO_INSTA = "go_insta"
33+
const val ACTION_NOT_SHOW_AGAIN = "not_show_again"
34+
const val ACTION_CLOSE = "close"
35+
}
36+
2637
private lateinit var composeView: ComposeView
2738
private lateinit var lifecycleScope: LifecycleCoroutineScope
2839
private var canAutoShowOnLaunch = false
@@ -49,10 +60,10 @@ class AnyoneButMeEventPopupController @Inject constructor(
4960
EatssuTheme {
5061
if (isPopupVisible.value) {
5162
AnyoneButMeEventDialog(
52-
onDismiss = ::hide,
63+
onDismiss = ::closePopup,
5364
onDismissForever = ::dismissForever,
54-
onInstagramClick = ::openInstagram,
55-
onAnyoneButMeClick = ::openAnyoneButMePage
65+
onInstagramClick = ::openInstagramFromPopup,
66+
onAnyoneButMeClick = ::openAnyoneButMePageFromPopup
5667
)
5768
}
5869
}
@@ -71,12 +82,23 @@ class AnyoneButMeEventPopupController @Inject constructor(
7182
}
7283

7384
private fun dismissForever() {
85+
trackPopupAction(ACTION_NOT_SHOW_AGAIN)
7486
hide()
7587
lifecycleScope.launch {
7688
appFeatureDataStore.setAnyoneButMeEventPopupDismissed(true)
7789
}
7890
}
7991

92+
private fun closePopup() {
93+
trackPopupAction(ACTION_CLOSE)
94+
hide()
95+
}
96+
97+
private fun openAnyoneButMePageFromPopup() {
98+
trackPopupAction(ACTION_CLICK_POPUP_IMAGE)
99+
openAnyoneButMePage()
100+
}
101+
80102
fun openAnyoneButMePage() {
81103
hide()
82104
context.startActivity(
@@ -92,11 +114,21 @@ class AnyoneButMeEventPopupController @Inject constructor(
92114
)
93115
}
94116

95-
private fun openInstagram() {
117+
private fun openInstagramFromPopup() {
118+
trackPopupAction(ACTION_GO_INSTA)
96119
hide()
97120
context.openInBrowser(context.getString(R.string.eatssu_event_instagram_url))
98121
}
99122

123+
private fun trackPopupAction(action: String) {
124+
analyticsTracker.track(
125+
PopupEvent(
126+
popupName = POPUP_NAME_PLZ_NOT_ME,
127+
popupAction = action,
128+
),
129+
)
130+
}
131+
100132
private fun hide() {
101133
canAutoShowOnLaunch = false
102134
isPopupVisible.value = false

0 commit comments

Comments
 (0)