Skip to content

Commit

Permalink
Merge branch 'develop' into feat-login-api-connection
Browse files Browse the repository at this point in the history
  • Loading branch information
jooyyoo committed Sep 18, 2023
2 parents c673d09 + 789cd9f commit 13941a2
Show file tree
Hide file tree
Showing 11 changed files with 82 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import androidx.lifecycle.lifecycleScope
import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.FragmentBakeryListBinding
import com.sopt.geonppang.presentation.detail.DetailActivity
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.SOURCE
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.VIEW_DETAIL_PAGE_AT
import com.sopt.geonppang.presentation.filterSetting.FilterSettingActivity
import com.sopt.geonppang.presentation.search.SearchActivity
import com.sopt.geonppang.presentation.type.BakerySortType
Expand Down Expand Up @@ -97,6 +99,7 @@ class BakeryListFragment :
}

private fun moveToDetail(bakeryId: Int) {
AmplitudeUtils.trackEventWithProperties(VIEW_DETAIL_PAGE_AT, SOURCE, LIST)
val intent = Intent(requireContext(), DetailActivity::class.java)
intent.putExtra(BAKERY_ID, bakeryId)
startActivity(intent)
Expand Down Expand Up @@ -142,5 +145,6 @@ class BakeryListFragment :
const val CLICK_PERSONAL_FILTER_APPLY_OFF = "click_filteroff"
const val CLICK_CATEGORY = "click_category"
const val CATEGORY = "category"
const val LIST = "LIST"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import com.sopt.geonppang.presentation.common.WebViewActivity
import com.sopt.geonppang.presentation.model.BakeryReviewWritingInfo
import com.sopt.geonppang.presentation.report.ReportActivity
import com.sopt.geonppang.presentation.reviewWriting.ReviewWritingActivity
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.ChipFactory
import com.sopt.geonppang.util.CustomSnackbar
import com.sopt.geonppang.util.UiState
Expand Down Expand Up @@ -79,6 +80,7 @@ class DetailActivity : BindingActivity<ActivityDetailBinding>(R.layout.activity_
}

binding.btnDetailCrateReview.setOnClickListener {
AmplitudeUtils.trackEvent(START_REVIEW_WRITING)
moveToReviewWriting(bakeryId, viewModel.getBakeryInfoForReview())
}

Expand All @@ -88,6 +90,7 @@ class DetailActivity : BindingActivity<ActivityDetailBinding>(R.layout.activity_

binding.ivDetailMap.setOnClickListener {
viewModel.bakeryInfo.value?.let { bakeryInfo ->
AmplitudeUtils.trackEvent(CLICK_NAVIGATION)
moveToWebBrowser(bakeryInfo.mapUrl)
}
}
Expand Down Expand Up @@ -128,6 +131,7 @@ class DetailActivity : BindingActivity<ActivityDetailBinding>(R.layout.activity_
viewModel.bookMarkState.flowWithLifecycle(lifecycle).onEach { uiState ->
when (uiState) {
is UiState.Success -> {
AmplitudeUtils.trackEvent(CLICK_MY_STORE)
viewModel.fetchDetailBakeryInfo(bakeryId)

if (uiState.data.isBookMarked) {
Expand Down Expand Up @@ -187,5 +191,10 @@ class DetailActivity : BindingActivity<ActivityDetailBinding>(R.layout.activity_
const val BAKERY_INFO = "bakeryInfo"
const val REVIEW_ID = "reviewId"
const val FIRST_POSITION = 0
const val VIEW_DETAIL_PAGE_AT = "view_detailpage_at"
const val SOURCE = "source"
const val CLICK_NAVIGATION = "click_navigation"
const val CLICK_MY_STORE = "click_mystore"
const val START_REVIEW_WRITING = "start_reviewwriting"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.sopt.geonppang.databinding.ItemDetailBakeryInfoBinding
import com.sopt.geonppang.domain.model.BakeryInfo
import com.sopt.geonppang.util.AmplitudeUtils

class DetailBakeryInfoAdapter(
private val moveToWebPage: (String) -> Unit
Expand All @@ -21,10 +22,12 @@ class DetailBakeryInfoAdapter(
binding.bakeryInfo = bakeryInfo

tvItemDetailBakeryInfoHomepage.setOnClickListener {
AmplitudeUtils.trackEvent(CLICK_WEBSITE)
moveToWebPage(bakeryInfo.homepageUrl)
}

tvItemDetailBakeryInfoInstagram.setOnClickListener {
AmplitudeUtils.trackEvent(CLICK_INSTAGRAM)
moveToWebPage(bakeryInfo.instagramUrl)
}
}
Expand All @@ -48,4 +51,9 @@ class DetailBakeryInfoAdapter(
bakeryInfoList.add(bakeryInfo)
notifyDataSetChanged()
}

companion object {
const val CLICK_WEBSITE = "click_website"
const val CLICK_INSTAGRAM = "click_instagram"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.chip.ChipGroup
import com.sopt.geonppang.databinding.ItemDetailReviewBinding
import com.sopt.geonppang.domain.model.DetailReview
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.ItemDiffCallback

class DetailReviewAdapter(
Expand Down Expand Up @@ -35,6 +36,7 @@ class DetailReviewAdapter(
}

binding.tvItemDetailReviewReport.setOnClickListener {
AmplitudeUtils.trackEvent(START_REVIEW_REPORT)
moveToReport(detailReview.reviewId)
}
}
Expand All @@ -49,4 +51,8 @@ class DetailReviewAdapter(
override fun onBindViewHolder(holder: DetailReviewViewHolder, position: Int) {
holder.onBind(getItem(position), initChip, moveToReport, position)
}

companion object {
const val START_REVIEW_REPORT = "start_reviewreport"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import androidx.lifecycle.lifecycleScope
import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.FragmentHomeBinding
import com.sopt.geonppang.presentation.detail.DetailActivity
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.SOURCE
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.VIEW_DETAIL_PAGE_AT
import com.sopt.geonppang.presentation.filterSetting.FilterSettingActivity
import com.sopt.geonppang.presentation.search.SearchActivity
import com.sopt.geonppang.presentation.type.FilterInfoType
Expand Down Expand Up @@ -102,6 +104,7 @@ class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home
}

private fun moveToDetail(bakeryId: Int) {
AmplitudeUtils.trackEventWithProperties(VIEW_DETAIL_PAGE_AT, SOURCE, HOME)
val intent = Intent(requireContext(), DetailActivity::class.java)
intent.putExtra(BAKERY_ID, bakeryId)
startActivity(intent)
Expand All @@ -121,5 +124,6 @@ class HomeFragment : BindingFragment<FragmentHomeBinding>(R.layout.fragment_home
const val HOME_TO_SEARCH = "homeToSearch"
const val CLICK_SEARCH_HOME = "click_search_home"
const val START_FILTER_HOME = "start_filter_home"
const val HOME = "HOME"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.ActivityMyBookmarksBinding
import com.sopt.geonppang.presentation.common.BakeryAdapter
import com.sopt.geonppang.presentation.detail.DetailActivity
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.SOURCE
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.VIEW_DETAIL_PAGE_AT
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.UiState
import com.sopt.geonppang.util.binding.BindingActivity
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -61,12 +64,14 @@ class MyBookMarksActivity :
}

private fun moveToDetail(bakeryId: Int) {
AmplitudeUtils.trackEventWithProperties(VIEW_DETAIL_PAGE_AT, SOURCE, MY_PAGE_MY_STORE)
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra(BAKERY_ID, bakeryId)
startActivity(intent)
}

companion object {
const val BAKERY_ID = "bakeryId"
const val MY_PAGE_MY_STORE = "MYPAGE_MYSTORE"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@ import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.ActivityMyReviewBinding
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.SOURCE
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.VIEW_DETAIL_PAGE_AT
import com.sopt.geonppang.presentation.model.MyReviewBakeryInfo
import com.sopt.geonppang.presentation.myReviewDetail.MyReviewDetailActivity
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.UiState
import com.sopt.geonppang.util.binding.BindingActivity
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -59,6 +62,7 @@ class MyReviewActivity : BindingActivity<ActivityMyReviewBinding>(R.layout.activ
}

private fun moveToReviewDetail(reviewId: Int, myReviewDetailInfo: MyReviewBakeryInfo) {
AmplitudeUtils.trackEventWithProperties(VIEW_DETAIL_PAGE_AT, SOURCE, MY_PAGE_MY_REVIEW)
val intent = Intent(this, MyReviewDetailActivity::class.java)
intent.putExtra(REVIEW_ID, reviewId)
intent.putExtra(BAKERY_INFO, myReviewDetailInfo)
Expand All @@ -68,5 +72,6 @@ class MyReviewActivity : BindingActivity<ActivityMyReviewBinding>(R.layout.activ
companion object {
const val REVIEW_ID = "reviewId"
const val BAKERY_INFO = "bakeryInfo"
const val MY_PAGE_MY_REVIEW = "MYPAGE_MYREVIEW"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.lifecycle.lifecycleScope
import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.ActivityReportBinding
import com.sopt.geonppang.presentation.detail.DetailActivity
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.UiState
import com.sopt.geonppang.util.binding.BindingActivity
import com.sopt.geonppang.util.extension.hideKeyboard
Expand Down Expand Up @@ -37,6 +38,7 @@ class ReportActivity : BindingActivity<ActivityReportBinding>(R.layout.activity_

binding.etReportContent.setOnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
AmplitudeUtils.trackEvent(CLICK_REVIEW_REPORT_TEXT)
binding.svReport.smoothScrollTo(0, binding.etReportContent.top)
}
}
Expand All @@ -46,24 +48,41 @@ class ReportActivity : BindingActivity<ActivityReportBinding>(R.layout.activity_
}

binding.includeReportToolbar.ivBack.setOnClickListener {
AmplitudeUtils.trackEvent(CLICK_REVIEW_REPORT_BACK)
finish()
}

binding.layoutReport.setOnClickListener {
binding.etReportContent.clearFocus()
hideKeyboard(it)
}
}

private fun collectData() {
viewModel.reportState.flowWithLifecycle(lifecycle).onEach {
when (it) {
viewModel.reportState.flowWithLifecycle(lifecycle).onEach { uiState ->
when (uiState) {
is UiState.Success -> {
AmplitudeUtils.trackEvent(CLICK_REVIEW_REPORT_COMPLETE)
AmplitudeUtils.trackEventWithMapProperties(
COMPLETE_REVIEW_REPORT,
mapOf(OPTION to uiState.data.reportCategory, TEXT to uiState.data.content)
)
showReportSuccessBottomDialog()
}

else -> {}
}
}.launchIn(lifecycleScope)

viewModel.reportCategory.flowWithLifecycle(lifecycle).onEach {
it?.let { reportCategoryType ->
AmplitudeUtils.trackEventWithProperties(
CLICK_REVIEW_REPORT_OPTION,
OPTION,
reportCategoryType.name
)
}
}.launchIn(lifecycleScope)
}

private fun showReportSuccessBottomDialog() {
Expand All @@ -72,5 +91,12 @@ class ReportActivity : BindingActivity<ActivityReportBinding>(R.layout.activity_

companion object {
const val REPORT_SUCCESS = "reportSuccessDialog"
const val CLICK_REVIEW_REPORT_OPTION = "click_reviewreport_option"
const val CLICK_REVIEW_REPORT_TEXT = "click_reviewreport_text"
const val CLICK_REVIEW_REPORT_BACK = "click_reviewreport_back"
const val CLICK_REVIEW_REPORT_COMPLETE = "click_reviewreport_complete"
const val COMPLETE_REVIEW_REPORT = "complete_reviewreport"
const val OPTION = "option"
const val TEXT = "text"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class ReportViewModel @Inject constructor(
private val _reportCategory = MutableStateFlow<ReportCategoryType?>(null)
val reportCategory get() = _reportCategory.asStateFlow()
val reportContent = MutableStateFlow("")
private val _reportState = MutableStateFlow<UiState<Boolean>>(UiState.Loading)
private val _reportState = MutableStateFlow<UiState<RequestReport>>(UiState.Loading)
val reportState get() = _reportState.asStateFlow()

fun setReportCategory(reportCategoryType: ReportCategoryType) {
Expand All @@ -30,11 +30,13 @@ class ReportViewModel @Inject constructor(
viewModelScope.launch {
reportContent.value.let { reportContent ->
reportCategory.value?.let { reportCategory ->
val requestReport =
RequestReport(content = reportContent, reportCategory = reportCategory.name)
reportRepository.reportReview(
reviewId,
RequestReport(content = reportContent, reportCategory = reportCategory.name)
requestReport
).onSuccess {
_reportState.value = UiState.Success(true)
_reportState.value = UiState.Success(requestReport)
}.onFailure { throwable ->
_reportState.value = UiState.Error(throwable.message)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.ActivitySearchBinding
import com.sopt.geonppang.presentation.common.BakeryAdapter
import com.sopt.geonppang.presentation.detail.DetailActivity
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.SOURCE
import com.sopt.geonppang.presentation.detail.DetailActivity.Companion.VIEW_DETAIL_PAGE_AT
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.UiState
import com.sopt.geonppang.util.binding.BindingActivity
Expand Down Expand Up @@ -79,6 +81,7 @@ class SearchActivity : BindingActivity<ActivitySearchBinding>(R.layout.activity_
}

private fun moveToDetail(bakeryId: Int) {
AmplitudeUtils.trackEventWithProperties(VIEW_DETAIL_PAGE_AT, SOURCE, SEARCH)
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra(BAKERY_ID, bakeryId)
startActivity(intent)
Expand Down Expand Up @@ -118,5 +121,6 @@ class SearchActivity : BindingActivity<ActivitySearchBinding>(R.layout.activity_
const val COMPLETE_SEARCH_HOME = "complete_search_home"
const val COMPLETE_SEARCH_LIST = "complete_search_list"
const val KEYWORD = "keyword"
const val SEARCH = "SEARCH"
}
}
4 changes: 4 additions & 0 deletions app/src/main/java/com/sopt/geonppang/util/AmplitudeUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,8 @@ object AmplitudeUtils {
fun <T> trackEventWithProperties(eventName: String, propertyName: String, propertyValue: T) {
amplitude.track(eventName, mapOf(propertyName to propertyValue))
}

fun trackEventWithMapProperties(eventName: String, properties: Map<String, Any>) {
amplitude.track(eventName, properties)
}
}

0 comments on commit 13941a2

Please sign in to comment.