diff --git a/app/src/main/java/org/sopt/official/feature/home/HomeActivity.kt b/app/src/main/java/org/sopt/official/feature/home/HomeActivity.kt index e21da2b00..c7ffab5be 100644 --- a/app/src/main/java/org/sopt/official/feature/home/HomeActivity.kt +++ b/app/src/main/java/org/sopt/official/feature/home/HomeActivity.kt @@ -49,8 +49,8 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import org.sopt.official.R -import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.Tracker import org.sopt.official.auth.model.UserActiveState import org.sopt.official.auth.model.UserStatus import org.sopt.official.common.navigator.DeepLinkType @@ -90,7 +90,7 @@ class HomeActivity : AppCompatActivity() { private val args by serializableExtra(StartArgs(UserStatus.UNAUTHENTICATED)) @Inject - lateinit var tracker: AmplitudeTracker + lateinit var tracker: Tracker private val smallBlockAdapter: SmallBlockAdapter? get() = binding.smallBlockList.adapter as? SmallBlockAdapter diff --git a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/FortuneActivity.kt b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/FortuneActivity.kt index 15ee8be72..fedcc6ecb 100644 --- a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/FortuneActivity.kt +++ b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/FortuneActivity.kt @@ -29,11 +29,10 @@ import android.content.Intent import android.os.Bundle import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.staticCompositionLocalOf import com.airbnb.deeplinkdispatch.DeepLink import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.EntryPointAccessors +import org.sopt.official.analytics.compose.ProvideTracker import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.common.context.appContext import org.sopt.official.common.navigator.NavigatorEntryPoint @@ -47,10 +46,6 @@ private val navigator by lazy { ).navigatorProvider() } -internal val LocalAmplitudeTracker = staticCompositionLocalOf { - error("No AmplitudeTracker provided") -} - @AndroidEntryPoint @DeepLink("sopt://fortune") class FortuneActivity : AppCompatActivity() { @@ -62,7 +57,7 @@ class FortuneActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContent { SoptTheme { - CompositionLocalProvider(LocalAmplitudeTracker provides amplitudeTracker) { + ProvideTracker(amplitudeTracker) { FoundationScreen( onClickLeadingIcon = ::finish, navigateToHome = { diff --git a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/component/FortuneTopBar.kt b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/component/FortuneTopBar.kt index 3c69e5cb9..449bdd3e5 100644 --- a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/component/FortuneTopBar.kt +++ b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/component/FortuneTopBar.kt @@ -36,9 +36,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.compose.LocalTracker import org.sopt.official.designsystem.SoptTheme import org.sopt.official.designsystem.SoptTheme.colors -import org.sopt.official.feature.fortune.LocalAmplitudeTracker @Composable fun FortuneTopBar( @@ -46,7 +46,7 @@ fun FortuneTopBar( modifier: Modifier = Modifier, isEnabled: Boolean = true, ) { - val amplitudeTracker = LocalAmplitudeTracker.current + val amplitudeTracker = LocalTracker.current Box(modifier = modifier.fillMaxWidth()) { Icon( diff --git a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneAmulet/FortuneAmuletScreen.kt b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneAmulet/FortuneAmuletScreen.kt index 37c8dc7bf..b0d6cb75f 100644 --- a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneAmulet/FortuneAmuletScreen.kt +++ b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneAmulet/FortuneAmuletScreen.kt @@ -46,8 +46,8 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.compose.LocalTracker import org.sopt.official.designsystem.SoptTheme -import org.sopt.official.feature.fortune.LocalAmplitudeTracker import org.sopt.official.feature.fortune.component.CircleShapeBorderButton import org.sopt.official.feature.fortune.component.UrlImage @@ -56,7 +56,7 @@ internal fun FortuneAmuletRoute( onHomeClick: () -> Unit, viewModel: FortuneAmuletViewModel = hiltViewModel(), ) { - val amplitudeTracker = LocalAmplitudeTracker.current + val amplitudeTracker = LocalTracker.current val state by viewModel.state.collectAsStateWithLifecycle() when { diff --git a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneDetail/FortuneDetailRoute.kt b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneDetail/FortuneDetailRoute.kt index 204d2d789..1ec13d43e 100644 --- a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneDetail/FortuneDetailRoute.kt +++ b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/fortuneDetail/FortuneDetailRoute.kt @@ -47,8 +47,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.coroutines.launch import org.sopt.official.analytics.EventType.CLICK import org.sopt.official.analytics.EventType.VIEW +import org.sopt.official.analytics.compose.LocalTracker import org.sopt.official.designsystem.SoptTheme.colors -import org.sopt.official.feature.fortune.LocalAmplitudeTracker import org.sopt.official.feature.fortune.feature.fortuneDetail.component.PokeMessageBottomSheetScreen import org.sopt.official.feature.fortune.feature.fortuneDetail.model.FortuneDetailUiState.Success import org.sopt.official.feature.fortune.feature.fortuneDetail.model.SnackBarUiState @@ -73,7 +73,7 @@ internal fun FortuneDetailRoute( var selectedIndex by remember { mutableIntStateOf(DEFAULT_ID) } val bottomSheetState = rememberModalBottomSheetState(initialValue = Hidden) val scope = rememberCoroutineScope() - val amplitudeTracker = LocalAmplitudeTracker.current + val amplitudeTracker = LocalTracker.current LaunchedEffect(key1 = uiState) { if (uiState is Success) { diff --git a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/home/HomeScreen.kt b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/home/HomeScreen.kt index 2eaceea6a..728a6710d 100644 --- a/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/home/HomeScreen.kt +++ b/feature/fortune/src/main/java/org/sopt/official/feature/fortune/feature/home/HomeScreen.kt @@ -41,8 +41,8 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.compose.LocalTracker import org.sopt.official.designsystem.SoptTheme -import org.sopt.official.feature.fortune.LocalAmplitudeTracker import org.sopt.official.feature.fortune.R import org.sopt.official.feature.fortune.component.FortuneButton import java.time.LocalDate @@ -55,7 +55,7 @@ internal fun HomeRoute( onFortuneDetailClick: (String) -> Unit, ) { val date = rememberSaveable { getToday() } - val amplitudeTracker = LocalAmplitudeTracker.current.also { + val amplitudeTracker = LocalTracker.current.also { it.track( type = EventType.VIEW, name = "view_soptmadi_title", diff --git a/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/detail/FriendListDetailBottomSheetFragment.kt b/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/detail/FriendListDetailBottomSheetFragment.kt index eec900cb2..a42064a55 100644 --- a/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/detail/FriendListDetailBottomSheetFragment.kt +++ b/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/detail/FriendListDetailBottomSheetFragment.kt @@ -40,13 +40,12 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject import kotlinx.coroutines.delay import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.Tracker import org.sopt.official.common.util.colorOf import org.sopt.official.common.util.dp import org.sopt.official.common.util.ui.setVisible @@ -66,6 +65,7 @@ import org.sopt.official.feature.poke.user.PokeUserListItemViewType import org.sopt.official.feature.poke.util.addOnAnimationEndListener import org.sopt.official.feature.poke.util.setRelationStrokeColor import org.sopt.official.feature.poke.util.showPokeToast +import javax.inject.Inject @AndroidEntryPoint class FriendListDetailBottomSheetFragment : BottomSheetDialogFragment() { @@ -73,7 +73,7 @@ class FriendListDetailBottomSheetFragment : BottomSheetDialogFragment() { private lateinit var viewModel: FriendListDetailViewModel @Inject - lateinit var tracker: AmplitudeTracker + lateinit var tracker: Tracker private var messageListBottomSheet: MessageListBottomSheetFragment? = null diff --git a/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/summary/FriendListSummaryActivity.kt b/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/summary/FriendListSummaryActivity.kt index dc7e45338..7563b81be 100644 --- a/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/summary/FriendListSummaryActivity.kt +++ b/feature/poke/src/main/java/org/sopt/official/feature/poke/friend/summary/FriendListSummaryActivity.kt @@ -35,14 +35,12 @@ import androidx.lifecycle.lifecycleScope import coil.load import coil.transform.CircleCropTransformation import dagger.hilt.android.AndroidEntryPoint -import java.io.Serializable -import javax.inject.Inject import kotlinx.coroutines.delay import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.Tracker import org.sopt.official.auth.model.UserStatus import org.sopt.official.common.util.colorOf import org.sopt.official.common.util.dp @@ -66,6 +64,8 @@ import org.sopt.official.feature.poke.user.PokeUserListItemViewType import org.sopt.official.feature.poke.util.addOnAnimationEndListener import org.sopt.official.feature.poke.util.setRelationStrokeColor import org.sopt.official.feature.poke.util.showPokeToast +import java.io.Serializable +import javax.inject.Inject @AndroidEntryPoint class FriendListSummaryActivity : AppCompatActivity() { @@ -76,7 +76,7 @@ class FriendListSummaryActivity : AppCompatActivity() { private var messageListBottomSheet: MessageListBottomSheetFragment? = null @Inject - lateinit var tracker: AmplitudeTracker + lateinit var tracker: Tracker private val newFriendListAdapter get() = binding.includeFriendListBlockNewFriend.recyclerView.adapter as PokeUserListAdapter? diff --git a/feature/poke/src/main/java/org/sopt/official/feature/poke/main/PokeMainActivity.kt b/feature/poke/src/main/java/org/sopt/official/feature/poke/main/PokeMainActivity.kt index 81dd91679..c93af04f8 100644 --- a/feature/poke/src/main/java/org/sopt/official/feature/poke/main/PokeMainActivity.kt +++ b/feature/poke/src/main/java/org/sopt/official/feature/poke/main/PokeMainActivity.kt @@ -39,8 +39,8 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.Tracker import org.sopt.official.auth.model.UserStatus import org.sopt.official.common.util.serializableExtra import org.sopt.official.common.util.ui.setVisible @@ -74,7 +74,7 @@ class PokeMainActivity : AppCompatActivity() { get() = binding.recyclerViewPokeMain.adapter as PokeMainListAdapter? @Inject - lateinit var tracker: AmplitudeTracker + lateinit var tracker: Tracker override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/feature/poke/src/main/java/org/sopt/official/feature/poke/notification/PokeNotificationActivity.kt b/feature/poke/src/main/java/org/sopt/official/feature/poke/notification/PokeNotificationActivity.kt index f2c116b34..a9573d2c6 100644 --- a/feature/poke/src/main/java/org/sopt/official/feature/poke/notification/PokeNotificationActivity.kt +++ b/feature/poke/src/main/java/org/sopt/official/feature/poke/notification/PokeNotificationActivity.kt @@ -42,8 +42,8 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.Tracker import org.sopt.official.common.util.serializableExtra import org.sopt.official.common.util.viewBinding import org.sopt.official.domain.poke.entity.PokeUser @@ -68,7 +68,7 @@ class PokeNotificationActivity : AppCompatActivity() { private val args by serializableExtra(Argument("")) @Inject - lateinit var tracker: AmplitudeTracker + lateinit var tracker: Tracker private val pokeNotificationAdapter get() = binding.recyclerviewPokeNotification.adapter as PokeNotificationAdapter diff --git a/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingActivity.kt b/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingActivity.kt index 0566cea99..ba86ba13d 100644 --- a/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingActivity.kt +++ b/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingActivity.kt @@ -33,12 +33,10 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import dagger.hilt.android.AndroidEntryPoint -import java.io.Serializable -import javax.inject.Inject import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.Tracker import org.sopt.official.common.util.serializableExtra import org.sopt.official.common.util.viewBinding import org.sopt.official.domain.poke.entity.PokeRandomUserList @@ -48,6 +46,8 @@ import org.sopt.official.feature.poke.databinding.ActivityOnboardingBinding import org.sopt.official.feature.poke.main.PokeMainActivity import org.sopt.official.feature.poke.util.addOnAnimationEndListener import org.sopt.official.feature.poke.util.showPokeToast +import java.io.Serializable +import javax.inject.Inject @AndroidEntryPoint class OnboardingActivity : AppCompatActivity() { @@ -59,7 +59,7 @@ class OnboardingActivity : AppCompatActivity() { private var onboardingBottomSheet: OnboardingBottomSheetFragment? = null @Inject - lateinit var tracker: AmplitudeTracker + lateinit var tracker: Tracker override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingPokeUserFragment.kt b/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingPokeUserFragment.kt index bcb479684..34cc8c361 100644 --- a/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingPokeUserFragment.kt +++ b/feature/poke/src/main/java/org/sopt/official/feature/poke/onboarding/OnboardingPokeUserFragment.kt @@ -35,11 +35,10 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import org.sopt.official.analytics.impl.AmplitudeTracker import org.sopt.official.analytics.EventType +import org.sopt.official.analytics.Tracker import org.sopt.official.common.util.serializableArgs import org.sopt.official.domain.poke.entity.PokeRandomUserList import org.sopt.official.domain.poke.entity.PokeUser @@ -54,6 +53,7 @@ import org.sopt.official.feature.poke.user.PokeUserListAdapter import org.sopt.official.feature.poke.user.PokeUserListClickListener import org.sopt.official.feature.poke.user.PokeUserListItemViewType import org.sopt.official.feature.poke.util.showPokeToast +import javax.inject.Inject @AndroidEntryPoint class OnboardingPokeUserFragment : Fragment() { @@ -66,7 +66,7 @@ class OnboardingPokeUserFragment : Fragment() { private val args by serializableArgs() @Inject - lateinit var tracker: AmplitudeTracker + lateinit var tracker: Tracker private var messageListBottomSheet: MessageListBottomSheetFragment? = null private val pokeUserListAdapter diff --git a/feature/soptamp/src/main/java/org/sopt/official/stamp/SoptampActivity.kt b/feature/soptamp/src/main/java/org/sopt/official/stamp/SoptampActivity.kt index 6f14dd165..f45831cdb 100644 --- a/feature/soptamp/src/main/java/org/sopt/official/stamp/SoptampActivity.kt +++ b/feature/soptamp/src/main/java/org/sopt/official/stamp/SoptampActivity.kt @@ -30,46 +30,40 @@ import android.graphics.Color import android.os.Bundle import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity -import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.SideEffect -import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat import com.ramcosta.composedestinations.DestinationsNavHost import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject -import org.sopt.official.analytics.impl.AmplitudeTracker +import org.sopt.official.analytics.Tracker +import org.sopt.official.analytics.compose.ProvideTracker import org.sopt.official.stamp.feature.NavGraphs - -val LocalTracker = staticCompositionLocalOf { - error("No AmplitudeTracker provided") -} +import javax.inject.Inject @AndroidEntryPoint class SoptampActivity : AppCompatActivity() { - @Inject - lateinit var tracker: AmplitudeTracker + @Inject + lateinit var tracker: Tracker - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - window.statusBarColor = Color.WHITE - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = true + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + window.statusBarColor = Color.WHITE + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = true + } + } + ProvideTracker(tracker) { + DestinationsNavHost(navGraph = NavGraphs.root) + } } - } - - CompositionLocalProvider(LocalTracker provides tracker) { - DestinationsNavHost(navGraph = NavGraphs.root) - } } - } - companion object { - fun getIntent(context: Context): Intent { - return Intent(context, SoptampActivity::class.java) + companion object { + fun getIntent(context: Context): Intent { + return Intent(context, SoptampActivity::class.java) + } } - } } diff --git a/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/part/PartRankingScreen.kt b/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/part/PartRankingScreen.kt index 84023ea45..89bfcfb28 100644 --- a/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/part/PartRankingScreen.kt +++ b/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/part/PartRankingScreen.kt @@ -47,7 +47,6 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -61,7 +60,7 @@ import com.ramcosta.composedestinations.result.ResultBackNavigator import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import org.sopt.official.analytics.EventType -import org.sopt.official.stamp.LocalTracker +import org.sopt.official.analytics.compose.LocalTracker import org.sopt.official.stamp.config.navigation.MissionNavGraph import org.sopt.official.stamp.designsystem.component.dialog.SingleOptionDialog import org.sopt.official.stamp.designsystem.component.layout.LoadingScreen diff --git a/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/rank/RankingScreen.kt b/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/rank/RankingScreen.kt index e07634077..72c8047bc 100644 --- a/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/rank/RankingScreen.kt +++ b/feature/soptamp/src/main/java/org/sopt/official/stamp/feature/ranking/rank/RankingScreen.kt @@ -42,7 +42,6 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment @@ -59,7 +58,7 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.result.ResultBackNavigator import kotlinx.coroutines.launch import org.sopt.official.analytics.EventType -import org.sopt.official.stamp.LocalTracker +import org.sopt.official.analytics.compose.LocalTracker import org.sopt.official.stamp.R import org.sopt.official.stamp.config.navigation.MissionNavGraph import org.sopt.official.stamp.designsystem.component.button.SoptampFloatingButton