diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 62227e08c..50f221b92 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -40,6 +40,11 @@
android:usesCleartextTraffic="true"
tools:targetApi="31">
+
+
+
diff --git a/app/src/main/java/com/eatssu/android/alarm/EatSsuFirebaseMessagingService.kt b/app/src/main/java/com/eatssu/android/alarm/EatSsuFirebaseMessagingService.kt
index ec4342b76..e973b2ea5 100644
--- a/app/src/main/java/com/eatssu/android/alarm/EatSsuFirebaseMessagingService.kt
+++ b/app/src/main/java/com/eatssu/android/alarm/EatSsuFirebaseMessagingService.kt
@@ -6,7 +6,7 @@ import android.app.PendingIntent
import android.content.Intent
import androidx.core.app.NotificationCompat
import com.eatssu.android.R
-import com.eatssu.android.presentation.login.IntroActivity
+import com.eatssu.android.presentation.intro.IntroActivity
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import timber.log.Timber
diff --git a/app/src/main/java/com/eatssu/android/alarm/NotificationReceiver.kt b/app/src/main/java/com/eatssu/android/alarm/NotificationReceiver.kt
index 9d53c0b4f..d153249fa 100644
--- a/app/src/main/java/com/eatssu/android/alarm/NotificationReceiver.kt
+++ b/app/src/main/java/com/eatssu/android/alarm/NotificationReceiver.kt
@@ -8,7 +8,7 @@ import android.content.Context
import android.content.Intent
import androidx.core.app.NotificationCompat
import com.eatssu.android.R
-import com.eatssu.android.presentation.login.IntroActivity
+import com.eatssu.android.presentation.intro.IntroActivity
import java.time.DayOfWeek
import java.time.LocalDateTime
diff --git a/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt b/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt
index 0578c9b6f..d5fab44bf 100644
--- a/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/MainActivity.kt
@@ -22,6 +22,7 @@ import com.eatssu.android.presentation.mypage.MyPageViewModel
import com.eatssu.android.presentation.mypage.userinfo.UserInfoActivity
import com.eatssu.android.presentation.util.showToast
import com.eatssu.android.presentation.util.startActivity
+import com.eatssu.common.enums.ScreenId
import com.google.android.material.bottomnavigation.BottomNavigationView
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
@@ -32,10 +33,14 @@ import javax.inject.Inject
@AndroidEntryPoint
-class MainActivity : BaseActivity(ActivityMainBinding::inflate){
+class MainActivity : BaseActivity(
+ ActivityMainBinding::inflate,
+ ScreenId.HOME_MAIN
+) {
+
@Inject
lateinit var workManager: WorkManager
-
+
private val mainViewModel: MainViewModel by viewModels()
private val myPageViewModel: MyPageViewModel by viewModels()
@@ -189,4 +194,6 @@ class MainActivity : BaseActivity(ActivityMainBinding::infl
}
}
+
+ override fun shouldLogScreenId() = false
}
\ No newline at end of file
diff --git a/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt b/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt
index 4b9ae03c4..107e433f8 100644
--- a/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt
@@ -1,7 +1,6 @@
package com.eatssu.android.presentation.base
import android.content.Intent
-import android.graphics.Color
import android.graphics.Rect
import android.os.Bundle
import android.view.LayoutInflater
@@ -27,13 +26,16 @@ import com.eatssu.android.presentation.common.NetworkConnection
import com.eatssu.android.presentation.common.VersionViewModel
import com.eatssu.android.presentation.common.VersionViewModelFactory
import com.eatssu.android.presentation.login.LoginActivity
+import com.eatssu.common.EventLogger
+import com.eatssu.common.enums.ScreenId
import com.google.android.material.card.MaterialCardView
import kotlinx.coroutines.launch
import timber.log.Timber
abstract class BaseActivity(
- val bindingFactory: (LayoutInflater, ViewGroup?, Boolean) -> B
+ val bindingFactory: (LayoutInflater, ViewGroup?, Boolean) -> B,
+ val screenId: ScreenId
) : AppCompatActivity() {
private var _binding: B? = null
@@ -168,4 +170,17 @@ abstract class BaseActivity(
Timber.d("BaseActivity", "공지사항: $message")
startActivity(intent)
}
+
+ override fun onResume() {
+ super.onResume()
+
+ if (shouldLogScreenId()) {
+ EventLogger.screenView(screenId)
+ Timber.d("screen view logging: $screenId")
+ }
+ }
+
+ open fun shouldLogScreenId(): Boolean {
+ return true
+ }
}
diff --git a/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt b/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt
index fe295088c..780f0db1a 100644
--- a/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt
@@ -6,8 +6,13 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewbinding.ViewBinding
+import com.eatssu.common.EventLogger
+import com.eatssu.common.enums.ScreenId
+import timber.log.Timber
-abstract class BaseFragment : Fragment() {
+abstract class BaseFragment(
+ val screenId: ScreenId
+) : Fragment() {
private var _binding: B? = null
val binding get() = _binding!!
@@ -27,4 +32,10 @@ abstract class BaseFragment : Fragment() {
super.onDestroyView()
_binding = null
}
+
+ override fun onResume() {
+ super.onResume()
+ EventLogger.screenView(screenId)
+ Timber.d("screen view logging: $screenId")
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/CafeteriaFragment.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/CafeteriaFragment.kt
index d91969059..f42e71665 100644
--- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/CafeteriaFragment.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/CafeteriaFragment.kt
@@ -17,6 +17,7 @@ import com.eatssu.android.presentation.util.CalendarUtil
import com.eatssu.android.presentation.util.CalendarUtil.daysInWeekArray
import com.eatssu.android.presentation.util.CalendarUtil.monthYearFromDate
import com.eatssu.common.EventLogger
+import com.eatssu.common.enums.ScreenId
import com.eatssu.common.enums.Time
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
@@ -24,7 +25,9 @@ import dagger.hilt.android.AndroidEntryPoint
import java.time.LocalDate
@AndroidEntryPoint
-class CafeteriaFragment : BaseFragment(), OnItemListener {
+class CafeteriaFragment : BaseFragment(
+ ScreenId.HOME_MAIN
+), OnItemListener {
private val mainViewModel by activityViewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/info/InfoBottomSheetFragment.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/info/InfoBottomSheetFragment.kt
index 8a5a02a29..4d880e24d 100644
--- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/info/InfoBottomSheetFragment.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/info/InfoBottomSheetFragment.kt
@@ -9,6 +9,7 @@ import com.bumptech.glide.Glide
import com.eatssu.android.databinding.FragmentBottomsheetInfoBinding
import com.eatssu.common.EventLogger
import com.eatssu.common.enums.Restaurant
+import com.eatssu.common.enums.ScreenId
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -58,6 +59,11 @@ class InfoBottomSheetFragment : BottomSheetDialogFragment() {
}
}
+ override fun onResume() {
+ super.onResume()
+ EventLogger.screenView(ScreenId.HOME_INFO)
+ }
+
companion object {
fun newInstance(data: String): InfoBottomSheetFragment {
val fragment = InfoBottomSheetFragment()
diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewActivity.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewActivity.kt
index 1bc349e9f..f6f6f38a5 100644
--- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewActivity.kt
@@ -17,6 +17,7 @@ import com.eatssu.android.presentation.common.MyReviewBottomSheetFragment
import com.eatssu.android.presentation.common.OthersBottomSheetFragment
import com.eatssu.common.EventLogger
import com.eatssu.common.enums.MenuType
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -25,7 +26,7 @@ import kotlin.properties.Delegates
@AndroidEntryPoint
class ReviewActivity :
- BaseActivity(ActivityReviewBinding::inflate),
+ BaseActivity(ActivityReviewBinding::inflate, ScreenId.REVIEW_V1_VIEW),
MyReviewBottomSheetFragment.OnReviewDeletedListener {
private val reviewViewModel: ReviewViewModel by viewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewActivity.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewActivity.kt
index 521c38a00..82c14586f 100644
--- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewActivity.kt
@@ -7,13 +7,17 @@ import com.eatssu.android.data.dto.request.ModifyReviewRequest
import com.eatssu.android.databinding.ActivityFixMenuBinding
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.util.showToast
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import timber.log.Timber
@AndroidEntryPoint
-class ModifyReviewActivity : BaseActivity(ActivityFixMenuBinding::inflate) {
+class ModifyReviewActivity : BaseActivity(
+ ActivityFixMenuBinding::inflate,
+ ScreenId.REVIEW_V1_MODIFY
+) {
private val modifyViewModel: ModifyViewModel by viewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/report/ReportActivity.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/report/ReportActivity.kt
index 128191ec6..dec710a88 100644
--- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/report/ReportActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/report/ReportActivity.kt
@@ -9,13 +9,17 @@ import com.eatssu.android.databinding.ActivityReportBinding
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.util.showToast
import com.eatssu.common.enums.ReportType
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@AndroidEntryPoint
-class ReportActivity : BaseActivity(ActivityReportBinding::inflate) {
+class ReportActivity : BaseActivity(
+ ActivityReportBinding::inflate,
+ ScreenId.REVIEW_REPORT
+) {
private val reportViewModel: ReportViewModel by viewModels()
private var reviewId = -1L
diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/ReviewWriteRateActivity.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/ReviewWriteRateActivity.kt
index f0d9286e5..53dc53a0b 100644
--- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/ReviewWriteRateActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/ReviewWriteRateActivity.kt
@@ -21,6 +21,7 @@ import com.eatssu.android.presentation.UiState
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.util.showToast
import com.eatssu.common.EventLogger
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import id.zelory.compressor.Compressor
import kotlinx.coroutines.launch
@@ -29,7 +30,10 @@ import java.io.File
@AndroidEntryPoint
class ReviewWriteRateActivity :
- BaseActivity(ActivityReviewWriteRateBinding::inflate) {
+ BaseActivity(
+ ActivityReviewWriteRateBinding::inflate,
+ ScreenId.REVIEW_V1_WRITE_RATE
+ ) {
private val viewModel: UploadReviewViewModel by viewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/menu/ReviewWriteMenuActivity.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/menu/ReviewWriteMenuActivity.kt
index 54609805b..a1267f073 100644
--- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/menu/ReviewWriteMenuActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/menu/ReviewWriteMenuActivity.kt
@@ -8,6 +8,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.eatssu.android.databinding.ActivityReviewWriteMenuBinding
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.cafeteria.review.write.ReviewWriteRateActivity
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -15,7 +16,10 @@ import timber.log.Timber
@AndroidEntryPoint
class ReviewWriteMenuActivity :
- BaseActivity(ActivityReviewWriteMenuBinding::inflate) {
+ BaseActivity(
+ ActivityReviewWriteMenuBinding::inflate,
+ ScreenId.REVIEW_V1_WRITE
+ ) {
private val viewModel: VariableMenuViewModel by viewModels()
private var mealId: Long = -1
diff --git a/app/src/main/java/com/eatssu/android/presentation/login/IntroActivity.kt b/app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt
similarity index 90%
rename from app/src/main/java/com/eatssu/android/presentation/login/IntroActivity.kt
rename to app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt
index 4f4fb2e36..e4d40fc4f 100644
--- a/app/src/main/java/com/eatssu/android/presentation/login/IntroActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt
@@ -1,4 +1,4 @@
-package com.eatssu.android.presentation.login
+package com.eatssu.android.presentation.intro
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
@@ -9,10 +9,12 @@ import com.eatssu.android.databinding.ActivityIntroBinding
import com.eatssu.android.presentation.MainActivity
import com.eatssu.android.presentation.UiEvent
import com.eatssu.android.presentation.UiState
+import com.eatssu.android.presentation.login.LoginActivity
import com.eatssu.android.presentation.util.showToast
import com.eatssu.android.presentation.util.startActivity
import com.eatssu.common.EventLogger
import com.eatssu.common.enums.LaunchPath
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@@ -69,4 +71,9 @@ class IntroActivity : AppCompatActivity() {
else -> EventLogger.appLaunch(LaunchPath.ICON)
}
}
+
+ override fun onResume() {
+ super.onResume()
+ EventLogger.screenView(ScreenId.LOGIN_SPLASH)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/eatssu/android/presentation/login/IntroViewModel.kt b/app/src/main/java/com/eatssu/android/presentation/intro/IntroViewModel.kt
similarity index 98%
rename from app/src/main/java/com/eatssu/android/presentation/login/IntroViewModel.kt
rename to app/src/main/java/com/eatssu/android/presentation/intro/IntroViewModel.kt
index dcbcdbc8b..86d9c80a8 100644
--- a/app/src/main/java/com/eatssu/android/presentation/login/IntroViewModel.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/intro/IntroViewModel.kt
@@ -1,4 +1,4 @@
-package com.eatssu.android.presentation.login
+package com.eatssu.android.presentation.intro
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
diff --git a/app/src/main/java/com/eatssu/android/presentation/login/LoginActivity.kt b/app/src/main/java/com/eatssu/android/presentation/login/LoginActivity.kt
index 5a7745365..3abc4e64b 100644
--- a/app/src/main/java/com/eatssu/android/presentation/login/LoginActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/login/LoginActivity.kt
@@ -8,12 +8,13 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.eatssu.android.R
import com.eatssu.android.databinding.ActivityLoginBinding
+import com.eatssu.android.presentation.MainActivity
import com.eatssu.android.presentation.UiEvent
import com.eatssu.android.presentation.UiState
import com.eatssu.android.presentation.base.BaseActivity
-import com.eatssu.android.presentation.MainActivity
import com.eatssu.android.presentation.util.showToast
import com.eatssu.android.presentation.util.startActivity
+import com.eatssu.common.enums.ScreenId
import com.kakao.sdk.common.model.ClientError
import com.kakao.sdk.common.model.ClientErrorCause
import com.kakao.sdk.user.UserApiClient
@@ -24,7 +25,10 @@ import timber.log.Timber
@AndroidEntryPoint
class LoginActivity :
- BaseActivity(ActivityLoginBinding::inflate) {
+ BaseActivity(
+ ActivityLoginBinding::inflate,
+ ScreenId.LOGIN_LOGIN
+ ) {
private val loginViewModel: LoginViewModel by viewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt b/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt
index 47b33f741..1cab2000d 100644
--- a/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/map/MapFragmentView.kt
@@ -54,7 +54,9 @@ import com.eatssu.android.presentation.map.component.MapRestaurantBottomSheet
import com.eatssu.android.presentation.map.component.PartnershipFilterToggle
import com.eatssu.android.presentation.map.model.PlaceType
import com.eatssu.android.presentation.mypage.userinfo.UserInfoActivity
+import com.eatssu.android.presentation.util.TrackScreenViewEvent
import com.eatssu.common.EventLogger
+import com.eatssu.common.enums.ScreenId
import com.eatssu.design_system.theme.Black
import com.eatssu.design_system.theme.EatssuTheme
import com.naver.maps.geometry.LatLng
@@ -190,6 +192,11 @@ fun MapFragmentComposeView(
}
}
+
+ // Screen View 기록
+ TrackScreenViewEvent(ScreenId.MAP_MAIN)
+
+
val lifecycleOwner = LocalLifecycleOwner.current
// onResume 시마다 학과 정보 반영
diff --git a/app/src/main/java/com/eatssu/android/presentation/map/component/DepartmentBottomSheet.kt b/app/src/main/java/com/eatssu/android/presentation/map/component/DepartmentBottomSheet.kt
index 48265cbf9..ec14a05ef 100644
--- a/app/src/main/java/com/eatssu/android/presentation/map/component/DepartmentBottomSheet.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/map/component/DepartmentBottomSheet.kt
@@ -25,6 +25,8 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.eatssu.android.R
+import com.eatssu.android.presentation.util.TrackScreenViewEvent
+import com.eatssu.common.enums.ScreenId
import com.eatssu.design_system.theme.EatssuTheme
import com.eatssu.design_system.theme.Gray400
import com.eatssu.design_system.theme.Primary
@@ -37,6 +39,8 @@ fun DepartmentBottomSheet(
onInputClick: () -> Unit = {},
sheetState: SheetState
) {
+ TrackScreenViewEvent(ScreenId.MAP_NO_DEPARTMENT)
+
ModalBottomSheet(
onDismissRequest = onDismiss,
containerColor = White,
diff --git a/app/src/main/java/com/eatssu/android/presentation/map/component/FavoritePartnershipBottomSheet.kt b/app/src/main/java/com/eatssu/android/presentation/map/component/FavoritePartnershipBottomSheet.kt
index 876b63128..978887464 100644
--- a/app/src/main/java/com/eatssu/android/presentation/map/component/FavoritePartnershipBottomSheet.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/map/component/FavoritePartnershipBottomSheet.kt
@@ -28,6 +28,8 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.eatssu.android.R
import com.eatssu.android.presentation.map.model.FavoritePartnership
+import com.eatssu.android.presentation.util.TrackScreenViewEvent
+import com.eatssu.common.enums.ScreenId
import com.eatssu.design_system.theme.EatssuTheme
import com.eatssu.design_system.theme.Gray200
import com.eatssu.design_system.theme.Gray400
@@ -50,6 +52,8 @@ fun FavoritePartnershipBottomSheet(
sheetState.show()
}
+ TrackScreenViewEvent(ScreenId.MAP_FAVORITE)
+
ModalBottomSheet(
onDismissRequest = onDismiss,
containerColor = White,
diff --git a/app/src/main/java/com/eatssu/android/presentation/map/component/MapRestaurantBottomSheet.kt b/app/src/main/java/com/eatssu/android/presentation/map/component/MapRestaurantBottomSheet.kt
index 1ba48e98f..8d4d978a3 100644
--- a/app/src/main/java/com/eatssu/android/presentation/map/component/MapRestaurantBottomSheet.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/map/component/MapRestaurantBottomSheet.kt
@@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -36,6 +35,8 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.eatssu.android.presentation.map.model.PlaceType
import com.eatssu.android.presentation.map.model.RestaurantInfo
+import com.eatssu.android.presentation.util.TrackScreenViewEvent
+import com.eatssu.common.enums.ScreenId
import com.eatssu.design_system.theme.EatssuTheme
import com.eatssu.design_system.theme.Gray200
import com.eatssu.design_system.theme.Gray400
@@ -57,6 +58,8 @@ fun MapRestaurantBottomSheet(
sheetState.show()
}
+ TrackScreenViewEvent(ScreenId.MAP_DETAIL)
+
ModalBottomSheet(
onDismissRequest = onDismiss,
containerColor = White,
@@ -174,7 +177,9 @@ fun MapRestaurantBottomSheet(
}
},
style = EatssuTheme.typography.body2,
- modifier = Modifier.fillMaxWidth().padding(top = 10.dp)
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(top = 10.dp)
)
Spacer(modifier = Modifier.height(4.dp))
diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/DeveloperActivity.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/DeveloperActivity.kt
index 3a49fe2a6..89c44c0e8 100644
--- a/app/src/main/java/com/eatssu/android/presentation/mypage/DeveloperActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/mypage/DeveloperActivity.kt
@@ -2,17 +2,21 @@ package com.eatssu.android.presentation.mypage
import android.content.Intent
import android.os.Bundle
+import androidx.core.graphics.drawable.toDrawable
+import androidx.core.graphics.toColorInt
import com.eatssu.android.R
import com.eatssu.android.databinding.ActivityDeveloperBinding
import com.eatssu.android.presentation.base.BaseActivity
-import dagger.hilt.android.AndroidEntryPoint
-import androidx.core.graphics.toColorInt
-import androidx.core.graphics.drawable.toDrawable
import com.eatssu.android.presentation.mypage.terms.WebViewActivity
+import com.eatssu.common.enums.ScreenId
+import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class DeveloperActivity :
- BaseActivity(ActivityDeveloperBinding::inflate) {
+ BaseActivity(
+ ActivityDeveloperBinding::inflate,
+ ScreenId.MYPAGE_DEVELOPER
+ ) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -30,6 +34,7 @@ class DeveloperActivity :
val intent = Intent(this, WebViewActivity::class.java).apply {
putExtra("TITLE", "Who’s next?")
putExtra("URL", getString(R.string.recruiting_url))
+ putExtra("SCREEN_ID", ScreenId.EXTERNAL_RECRUIT.name)
}
startActivity(intent)
}
diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt
index 5c9aa30ad..44fb9f2ae 100644
--- a/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/mypage/MyPageFragment.kt
@@ -25,6 +25,7 @@ import com.eatssu.android.presentation.login.LoginActivity
import com.eatssu.android.presentation.mypage.myreview.MyReviewListActivity
import com.eatssu.android.presentation.mypage.terms.WebViewActivity
import com.eatssu.android.presentation.mypage.userinfo.UserInfoActivity
+import com.eatssu.common.enums.ScreenId
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.AndroidEntryPoint
@@ -34,7 +35,7 @@ import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
@AndroidEntryPoint
-class MyPageFragment : BaseFragment() {
+class MyPageFragment : BaseFragment(ScreenId.MYPAGE_MAIN) {
private val myPageViewModel: MyPageViewModel by viewModels()
private val mainViewModel: MainViewModel by activityViewModels()
@@ -94,7 +95,11 @@ class MyPageFragment : BaseFragment() {
}
binding.llInquire.setOnClickListener {
- startWebView(getString(R.string.kakao_talk_channel_url), getString(R.string.contact))
+ startWebView(
+ getString(R.string.kakao_talk_channel_url),
+ getString(R.string.contact),
+ ScreenId.EXTERNAL_INQUIRE
+ )
}
binding.llMyReview.setOnClickListener {
@@ -125,11 +130,19 @@ class MyPageFragment : BaseFragment() {
}
binding.llServiceRule.setOnClickListener {
- startWebView(getString(R.string.terms_url), getString(R.string.terms))
+ startWebView(
+ getString(R.string.terms_url),
+ getString(R.string.terms),
+ ScreenId.EXTERNAL_TERMS
+ )
}
binding.llPrivateInformation.setOnClickListener {
- startWebView(getString(R.string.policy_url), getString(R.string.policy))
+ startWebView(
+ getString(R.string.policy_url),
+ getString(R.string.policy),
+ ScreenId.EXTERNAL_POLICY
+ )
}
}
@@ -197,10 +210,11 @@ class MyPageFragment : BaseFragment() {
Snackbar.make(binding.root, message, Snackbar.LENGTH_SHORT).show()
}
- private fun startWebView(url: String, title: String) {
+ private fun startWebView(url: String, title: String, screenId: ScreenId) {
val intent = Intent(requireContext(), WebViewActivity::class.java).apply {
putExtra("URL", url)
putExtra("TITLE", title)
+ putExtra("SCREEN_ID", screenId.name)
}
startActivity(intent)
}
diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/SignOutActivity.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/SignOutActivity.kt
index 3ad6edfd1..e2b56f8f6 100644
--- a/app/src/main/java/com/eatssu/android/presentation/mypage/SignOutActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/mypage/SignOutActivity.kt
@@ -11,13 +11,18 @@ import com.eatssu.android.presentation.UiState
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.login.LoginActivity
import com.eatssu.android.presentation.util.showToast
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@AndroidEntryPoint
class SignOutActivity :
- BaseActivity(ActivitySignOutBinding::inflate) {
+ BaseActivity(
+ ActivitySignOutBinding::inflate,
+ ScreenId.MYPAGE_SIGNOUT
+ ) {
+ //TODO 현재 dev서버 탈퇴하기 500
private val signOutViewModel: SignOutViewModel by viewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/myreview/MyReviewListActivity.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/myreview/MyReviewListActivity.kt
index 0bd9c5c2f..fa0e96307 100644
--- a/app/src/main/java/com/eatssu/android/presentation/mypage/myreview/MyReviewListActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/mypage/myreview/MyReviewListActivity.kt
@@ -11,14 +11,16 @@ import com.eatssu.android.databinding.ActivityMyReviewListBinding
import com.eatssu.android.domain.model.Review
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.common.MyReviewBottomSheetFragment
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@AndroidEntryPoint
-class MyReviewListActivity :
- BaseActivity(ActivityMyReviewListBinding::inflate),
- MyReviewBottomSheetFragment.OnReviewDeletedListener {
+class MyReviewListActivity : BaseActivity(
+ ActivityMyReviewListBinding::inflate,
+ ScreenId.MYPAGE_REVIEWS,
+), MyReviewBottomSheetFragment.OnReviewDeletedListener {
private val myReviewViewModel: MyReviewViewModel by viewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/terms/WebViewActivity.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/terms/WebViewActivity.kt
index 5273e7096..c049d92f3 100644
--- a/app/src/main/java/com/eatssu/android/presentation/mypage/terms/WebViewActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/mypage/terms/WebViewActivity.kt
@@ -4,10 +4,16 @@ import android.os.Bundle
import android.webkit.WebViewClient
import com.eatssu.android.databinding.ActivityWebviewBinding
import com.eatssu.android.presentation.base.BaseActivity
+import com.eatssu.common.EventLogger
+import com.eatssu.common.enums.ScreenId
import timber.log.Timber
-class WebViewActivity : BaseActivity(ActivityWebviewBinding::inflate) {
+class WebViewActivity :
+ BaseActivity(
+ ActivityWebviewBinding::inflate,
+ ScreenId.EXTERNAL_INQUIRE // shouldLogScreenId가 false라 미사용
+ ) {
private var URL = ""
@@ -52,4 +58,16 @@ class WebViewActivity : BaseActivity(ActivityWebviewBind
super.onSaveInstanceState(outState)
binding.webview.saveState(outState)
}
+
+ override fun onResume() {
+ super.onResume()
+
+ val screenIdString = intent.getStringExtra("SCREEN_ID") ?: return
+ val screenId = ScreenId.entries.find { it.name == screenIdString } ?: return
+
+ EventLogger.screenView(screenId)
+ Timber.d("WebViewActivity screen view logging: $screenId")
+ }
+
+ override fun shouldLogScreenId() = false
}
\ No newline at end of file
diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoActivity.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoActivity.kt
index 3f2f58b1d..e566ef731 100644
--- a/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoActivity.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoActivity.kt
@@ -17,13 +17,17 @@ import com.eatssu.android.R
import com.eatssu.android.databinding.ActivityUserInfoBinding
import com.eatssu.android.presentation.base.BaseActivity
import com.eatssu.android.presentation.util.showToast
+import com.eatssu.common.enums.ScreenId
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
@AndroidEntryPoint
class UserInfoActivity :
- BaseActivity(ActivityUserInfoBinding::inflate) {
+ BaseActivity(
+ ActivityUserInfoBinding::inflate,
+ ScreenId.MYPAGE_USERINFO
+ ) {
private val userInfoViewModel: UserInfoViewModel by viewModels()
diff --git a/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoViewModel.kt b/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoViewModel.kt
index e26bcdf7b..89834d930 100644
--- a/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoViewModel.kt
+++ b/app/src/main/java/com/eatssu/android/presentation/mypage/userinfo/UserInfoViewModel.kt
@@ -4,11 +4,11 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.eatssu.android.domain.model.College
import com.eatssu.android.domain.model.Department
+import com.eatssu.android.domain.repository.UserRepository
import com.eatssu.android.domain.usecase.user.GetUserCollegeDepartmentUseCase
+import com.eatssu.android.domain.usecase.user.SetUserCollegeDepartmentUseCase
import com.eatssu.android.domain.usecase.user.SetUserNicknameUseCase
import com.eatssu.android.domain.usecase.user.ValidateUserNameUseCase
-import com.eatssu.android.domain.repository.UserRepository
-import com.eatssu.android.domain.usecase.user.SetUserCollegeDepartmentUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
diff --git a/app/src/main/java/com/eatssu/android/presentation/util/AnalyticsUtil.kt b/app/src/main/java/com/eatssu/android/presentation/util/AnalyticsUtil.kt
new file mode 100644
index 000000000..e4ee00403
--- /dev/null
+++ b/app/src/main/java/com/eatssu/android/presentation/util/AnalyticsUtil.kt
@@ -0,0 +1,13 @@
+package com.eatssu.android.presentation.util
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import com.eatssu.common.EventLogger
+import com.eatssu.common.enums.ScreenId
+
+@Composable
+fun TrackScreenViewEvent(
+ screenId: ScreenId
+) = LaunchedEffect(Unit) {
+ EventLogger.screenView(screenId)
+}
diff --git a/app/src/main/res/layout/activity_intro.xml b/app/src/main/res/layout/activity_intro.xml
index 39dd3caff..51cc98c1d 100644
--- a/app/src/main/res/layout/activity_intro.xml
+++ b/app/src/main/res/layout/activity_intro.xml
@@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/primary"
- tools:context=".presentation.login.IntroActivity">
+ tools:context=".presentation.intro.IntroActivity">
diff --git a/app/src/main/res/layout/activity_user_info.xml b/app/src/main/res/layout/activity_user_info.xml
index b55c4fbf4..f13bdc4be 100644
--- a/app/src/main/res/layout/activity_user_info.xml
+++ b/app/src/main/res/layout/activity_user_info.xml
@@ -46,7 +46,7 @@
app:layout_constraintTop_toBottomOf="@+id/tv_ch_nickname" />