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" />