Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/Runnect/Runnect-Android
Browse files Browse the repository at this point in the history
…into feature/fix-update-course-scrap
  • Loading branch information
leeeha committed Feb 14, 2024
2 parents c7b1f90 + 1d95693 commit b3b728b
Show file tree
Hide file tree
Showing 30 changed files with 694 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.appcompat.app.AppCompatDelegate
import com.kakao.sdk.common.KakaoSdk
import com.runnect.runnect.BuildConfig
import com.runnect.runnect.R
import com.runnect.runnect.util.analytics.Analytics
import dagger.hilt.android.HiltAndroidApp
import timber.log.Timber

Expand All @@ -20,15 +21,20 @@ class ApplicationClass : Application() {
Timber.plant(Timber.DebugTree())
}
appContext = applicationContext
KakaoSdk.init(this,getString(R.string.kakao_native_app_key))
KakaoSdk.init(this, getString(R.string.kakao_native_app_key))
initApiMode()
initAnalytics()
}

private fun initApiMode() {
val currentApi = ApiMode.getCurrentApiMode(appContext)
PreferenceManager.setString(appContext, API_MODE, currentApi.name)
}

private fun initAnalytics() {
Analytics.initializeFirebaseAnalytics(applicationContext)
}

companion object {
lateinit var appContext: Context
const val API_MODE = "API_MODE"
Expand All @@ -39,7 +45,7 @@ class ApplicationClass : Application() {
!::appContext.isInitialized -> BuildConfig.RUNNECT_NODE_URL
else -> {
val mode = ApiMode.getCurrentApiMode(appContext)
when(mode) {
when (mode) {
ApiMode.JAVA -> BuildConfig.RUNNECT_PROD_URL
ApiMode.TEST -> BuildConfig.RUNNECT_DEV_URL
else -> BuildConfig.RUNNECT_NODE_URL
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/java/com/runnect/runnect/presentation/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ import com.runnect.runnect.presentation.discover.DiscoverFragment
import com.runnect.runnect.presentation.mypage.MyPageFragment
import com.runnect.runnect.presentation.storage.StorageMainFragment
import com.runnect.runnect.presentation.storage.StorageScrapFragment
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName
import com.runnect.runnect.util.analytics.EventName.EVENT_VIEW_HOME
import dagger.hilt.android.AndroidEntryPoint
import timber.log.Timber

Expand All @@ -31,6 +34,8 @@ class MainActivity : BindingActivity<ActivityMainBinding>(R.layout.activity_main

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Analytics.logClickedItemEvent(EVENT_VIEW_HOME)
initRemoteConfig()
checkVisitorMode()
checkIntentValue()
Expand Down Expand Up @@ -63,6 +68,7 @@ class MainActivity : BindingActivity<ActivityMainBinding>(R.layout.activity_main
}

private fun changeFragment(menuItemId: Int) {
logClickEvent(menuItemId)
supportFragmentManager.commit {
replace(
R.id.fl_main, when (menuItemId) {
Expand All @@ -76,6 +82,18 @@ class MainActivity : BindingActivity<ActivityMainBinding>(R.layout.activity_main
}
}

private fun logClickEvent(menuItemId: Int) {
with(EventName) {
when (menuItemId) {
R.id.menu_main_drawing -> if(isVisitorMode) EVENT_CLICK_JOIN_IN_COURSE_DRAWING else EVENT_CLICK_NAV_COURSE_DRAWING
R.id.menu_main_storage -> if(isVisitorMode) EVENT_CLICK_JOIN_IN_STORAGE else EVENT_CLICK_NAV_STORAGE
R.id.menu_main_discover -> if(isVisitorMode) EVENT_CLICK_JOIN_IN_COURSE_DISCOVERY else EVENT_CLICK_NAV_COURSE_DISCOVERY
R.id.menu_main_my_page -> if(isVisitorMode) EVENT_CLICK_JOIN_IN_MY_PAGE else EVENT_CLICK_NAV_MY_PAGE
else -> ""
}.let(Analytics::logClickedItemEvent)
}
}

private fun addListener() {
binding.btmNaviMain.setOnItemSelectedListener {
changeFragment(it.itemId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import com.runnect.runnect.R
import com.runnect.runnect.binding.BindingFragment
import com.runnect.runnect.databinding.FragmentCourseMainBinding
import com.runnect.runnect.presentation.search.SearchActivity
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_COURSE_DRAWING
import com.runnect.runnect.util.extension.PermissionUtil
import com.runnect.runnect.util.extension.showToast

Expand Down Expand Up @@ -95,6 +97,7 @@ class CourseMainFragment :

private fun initDrawCourseButtonClickListener() {
binding.btnDraw.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_COURSE_DRAWING)
val intent = Intent(activity, SearchActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
startActivity(intent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ import com.runnect.runnect.presentation.login.LoginActivity
import com.runnect.runnect.presentation.mypage.upload.MyUploadActivity
import com.runnect.runnect.presentation.profile.ProfileActivity
import com.runnect.runnect.presentation.state.UiStateV2
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_SHARE
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_USER_PROFILE
import com.runnect.runnect.util.analytics.EventName.VIEW_COURSE_DETAIL
import com.runnect.runnect.util.custom.dialog.CommonDialogFragment
import com.runnect.runnect.util.custom.dialog.CommonDialogText
import com.runnect.runnect.util.custom.dialog.RequireLoginDialogFragment
Expand Down Expand Up @@ -84,6 +88,8 @@ class CourseDetailActivity :
binding.vm = viewModel
binding.lifecycleOwner = this

Analytics.logClickedItemEvent(VIEW_COURSE_DETAIL)

initIntentExtraData()
updatePublicCourseIdFromDeepLink()
getCourseDetail()
Expand Down Expand Up @@ -142,6 +148,7 @@ class CourseDetailActivity :
startActivity(this)
}
applyScreenEnterAnimation()
Analytics.logClickedItemEvent(EVENT_CLICK_USER_PROFILE)
}

private fun handleBackButtonByCurrentScreenMode() {
Expand Down Expand Up @@ -238,6 +245,7 @@ class CourseDetailActivity :
desc = courseDetail.description,
image = courseDetail.image
)
Analytics.logClickedItemEvent(EVENT_CLICK_SHARE)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,23 @@ import com.runnect.runnect.R
import com.runnect.runnect.binding.BindingFragment
import com.runnect.runnect.databinding.FragmentDiscoverBinding
import com.runnect.runnect.domain.entity.DiscoverBanner
import com.runnect.runnect.presentation.discover.model.EditableDiscoverCourse
import com.runnect.runnect.presentation.MainActivity
import com.runnect.runnect.presentation.MainActivity.Companion.isVisitorMode
import com.runnect.runnect.presentation.detail.CourseDetailActivity
import com.runnect.runnect.presentation.detail.CourseDetailRootScreen
import com.runnect.runnect.presentation.discover.adapter.BannerAdapter
import com.runnect.runnect.presentation.discover.adapter.multiview.DiscoverMultiViewAdapter
import com.runnect.runnect.presentation.discover.adapter.multiview.DiscoverMultiViewType
import com.runnect.runnect.presentation.discover.model.EditableDiscoverCourse
import com.runnect.runnect.presentation.discover.pick.DiscoverPickActivity
import com.runnect.runnect.presentation.discover.search.DiscoverSearchActivity
import com.runnect.runnect.presentation.state.UiStateV2
import com.runnect.runnect.presentation.storage.StorageScrapFragment
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_DATE
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_SCRAP
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_TRY_BANNER
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_UPLOAD_BUTTON
import com.runnect.runnect.util.custom.toast.RunnectToast
import com.runnect.runnect.util.extension.applyScreenEnterAnimation
import com.runnect.runnect.util.extension.getCompatibleParcelableExtra
Expand All @@ -40,6 +45,7 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import timber.log.Timber

@AndroidEntryPoint
class DiscoverFragment : BindingFragment<FragmentDiscoverBinding>(R.layout.fragment_discover) {
Expand Down Expand Up @@ -98,12 +104,22 @@ class DiscoverFragment : BindingFragment<FragmentDiscoverBinding>(R.layout.fragm
},
onSortButtonClick = { criteria ->
viewModel.sortRecommendCourses(criteria)
Analytics.logClickedItemEvent(returnEventName(criteria))
}
).apply {
binding.rvDiscoverMultiView.adapter = this
}
}

private fun returnEventName(criteria: String): String {
var eventName = ""
when (criteria) {
"date" -> eventName = EVENT_CLICK_DATE
"scrap" -> eventName = EVENT_CLICK_SCRAP
}
return eventName
}

private fun navigateToDetailScreen(publicCourseId: Int) {
val context = context ?: return
Intent(context, CourseDetailActivity::class.java).apply {
Expand Down Expand Up @@ -139,6 +155,7 @@ class DiscoverFragment : BindingFragment<FragmentDiscoverBinding>(R.layout.fragm
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
Timber.d("viewpager position: $position")
updateBannerPosition(position)
updateBannerIndicatorPosition()
}
Expand Down Expand Up @@ -257,6 +274,7 @@ class DiscoverFragment : BindingFragment<FragmentDiscoverBinding>(R.layout.fragm
showCourseUploadWarningToast(context)
return
}
Analytics.logClickedItemEvent(EVENT_CLICK_UPLOAD_BUTTON)
startActivity(Intent(context, DiscoverPickActivity::class.java))
activity?.applyScreenEnterAnimation()
}
Expand Down Expand Up @@ -309,6 +327,7 @@ class DiscoverFragment : BindingFragment<FragmentDiscoverBinding>(R.layout.fragm
banners = banners,
onBannerItemClick = { url ->
showPromotionWebsite(url)
Analytics.logClickedItemEvent(EVENT_CLICK_TRY_BANNER)
}
).apply {
binding.vpDiscoverBanner.adapter = this
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@ import androidx.recyclerview.widget.GridLayoutManager
import com.runnect.runnect.R
import com.runnect.runnect.binding.BindingActivity
import com.runnect.runnect.databinding.ActivityDiscoverSearchBinding
import com.runnect.runnect.presentation.discover.model.EditableDiscoverCourse
import com.runnect.runnect.presentation.detail.CourseDetailActivity
import com.runnect.runnect.presentation.detail.CourseDetailRootScreen
import com.runnect.runnect.presentation.discover.DiscoverFragment.Companion.EXTRA_EDITABLE_DISCOVER_COURSE
import com.runnect.runnect.presentation.discover.model.EditableDiscoverCourse
import com.runnect.runnect.presentation.discover.search.adapter.DiscoverSearchAdapter
import com.runnect.runnect.presentation.state.UiStateV2
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_TRY_SEARCH_COURSE
import com.runnect.runnect.util.analytics.EventName.VIEW_COURSE_SEARCH
import com.runnect.runnect.util.custom.deco.GridSpacingItemDecoration
import com.runnect.runnect.util.extension.applyScreenEnterAnimation
import com.runnect.runnect.util.extension.getCompatibleParcelableExtra
Expand Down Expand Up @@ -53,7 +56,7 @@ class DiscoverSearchActivity :
super.onCreate(savedInstanceState)
binding.vm = viewModel
binding.lifecycleOwner = this@DiscoverSearchActivity

Analytics.logClickedItemEvent(VIEW_COURSE_SEARCH)
showSearchKeyboard()
initSearchAdapter()
initSearchRecyclerView()
Expand Down Expand Up @@ -130,6 +133,7 @@ class DiscoverSearchActivity :
if (actionId == IME_ACTION_SEARCH) {
val keyword = binding.etDiscoverSearchTitle.text
if (!keyword.isNullOrBlank()) {
Analytics.logClickedItemEvent(EVENT_CLICK_TRY_SEARCH_COURSE)
viewModel.getCourseSearch(keyword = keyword.toString())
hideKeyboard(binding.etDiscoverSearchTitle)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import com.runnect.runnect.binding.BindingActivity
import com.runnect.runnect.databinding.ActivityDiscoverUploadBinding
import com.runnect.runnect.presentation.MainActivity
import com.runnect.runnect.presentation.state.UiState
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_COURSE_UPLOAD
import com.runnect.runnect.util.analytics.EventName.VIEW_COURSE_UPLOAD
import com.runnect.runnect.util.extension.hideKeyboard
import com.runnect.runnect.util.extension.showToast
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -27,7 +30,7 @@ class DiscoverUploadActivity :
super.onCreate(savedInstanceState)
binding.vm = viewModel
binding.lifecycleOwner = this

Analytics.logClickedItemEvent(VIEW_COURSE_UPLOAD)
initLayout()
addListener()
addObserver()
Expand All @@ -54,6 +57,7 @@ class DiscoverUploadActivity :
if (it.isActivated) {
viewModel.postUploadMyCourse()
}
Analytics.logClickedItemEvent(EVENT_CLICK_COURSE_UPLOAD)
}
//키보드 이벤트에 따른 동작 정의
binding.root.viewTreeObserver.addOnGlobalLayoutListener {
Expand Down Expand Up @@ -84,6 +88,7 @@ class DiscoverUploadActivity :
UiState.Success -> {
handleReturnToDiscover()
}

UiState.Failure -> {
binding.indeterminateBar.isVisible = false
Timber.tag(ContentValues.TAG)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ import com.runnect.runnect.presentation.MainActivity
import com.runnect.runnect.presentation.countdown.CountDownActivity
import com.runnect.runnect.presentation.state.UiState
import com.runnect.runnect.util.DepartureSetMode
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName
import com.runnect.runnect.util.custom.dialog.RequireLoginDialogFragment
import com.runnect.runnect.util.extension.PermissionUtil
import com.runnect.runnect.util.extension.hideKeyboard
Expand Down Expand Up @@ -509,6 +511,7 @@ class DrawActivity : BindingActivity<ActivityDrawBinding>(R.layout.activity_draw

with(dialogLayout) {
this.btn_run.setOnClickListener {
Analytics.logClickedItemEvent(EventName.EVENT_CLICK_RUN_AFTER_COURSE_COMPLETE)
if (isCustomLocationMode) departureLatLng = customDepartureLatLng

val courseData = CourseData(
Expand Down Expand Up @@ -537,6 +540,7 @@ class DrawActivity : BindingActivity<ActivityDrawBinding>(R.layout.activity_draw
}

this.btn_storage.setOnClickListener {
Analytics.logClickedItemEvent(EventName.EVENT_CLICK_STORED_AFTER_COURSE_COMPLETE)
val intent = Intent(this@DrawActivity, MainActivity::class.java).apply {
putExtra(EXTRA_FRAGMENT_REPLACEMENT_DIRECTION, "fromDrawCourse")
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ import com.runnect.runnect.data.dto.request.RequestPostRunningHistory
import com.runnect.runnect.databinding.ActivityEndRunBinding
import com.runnect.runnect.presentation.MainActivity
import com.runnect.runnect.presentation.state.UiState
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_BACK_RUNNING_TRACKING
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_STORE_RUNNING_TRACKING
import com.runnect.runnect.util.custom.toast.RunnectToast
import com.runnect.runnect.util.extension.hideKeyboard
import com.runnect.runnect.util.extension.round
Expand Down Expand Up @@ -67,6 +70,7 @@ class EndRunActivity: BindingActivity<ActivityEndRunBinding>(R.layout.activity_e

private fun backBtn() {
binding.imgBtnBack.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_BACK_RUNNING_TRACKING)
val intent = Intent(this, MainActivity::class.java).apply {
putExtra(EXTRA_FRAGMENT_REPLACEMENT_DIRECTION, viewModel.dataFrom.value)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
Expand Down Expand Up @@ -152,6 +156,7 @@ class EndRunActivity: BindingActivity<ActivityEndRunBinding>(R.layout.activity_e

private fun saveRecord() {
binding.btnEndRunSave.setOnClickListener {
Analytics.logClickedItemEvent(EVENT_CLICK_STORE_RUNNING_TRACKING)
viewModel.postRecord(
RequestPostRunningHistory(
courseId = viewModel.courseId.value!!,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import com.google.android.gms.common.api.ApiException
import com.google.android.gms.tasks.Task
import com.runnect.runnect.BuildConfig
import com.runnect.runnect.data.dto.request.RequestPostLogin
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_GOOGLE_LOGIN
import timber.log.Timber
import java.lang.ref.WeakReference

Expand Down Expand Up @@ -60,7 +62,9 @@ class GoogleLogin(activity: LoginActivity, viewModel: LoginViewModel) : SocialLo
token = socialToken,
provider = LoginActivity.GOOGLE_SIGN
)
)
) {
Analytics.logClickedItemEvent(EVENT_CLICK_GOOGLE_LOGIN)
}
} catch (e: ApiException) {
Timber.tag("failed").w("signInResult:failed code=%s", e.statusCode)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import com.kakao.sdk.common.model.ClientError
import com.kakao.sdk.common.model.ClientErrorCause
import com.kakao.sdk.user.UserApiClient.Companion.instance
import com.runnect.runnect.data.dto.request.RequestPostLogin
import com.runnect.runnect.util.analytics.Analytics
import com.runnect.runnect.util.analytics.EventName.EVENT_CLICK_KAKAO_LOGIN
import timber.log.Timber
import java.lang.ref.WeakReference

Expand All @@ -23,7 +25,9 @@ class KakaoLogin(context: Context, viewModel: LoginViewModel) : SocialLogin {
RequestPostLogin(
token.accessToken, LoginActivity.KAKAO_SIGN
)
)
) {
Analytics.logClickedItemEvent(EVENT_CLICK_KAKAO_LOGIN)
}
}
}

Expand Down
Loading

0 comments on commit b3b728b

Please sign in to comment.