Skip to content

Commit

Permalink
Merge branch 'develop' into mod-2nd-qa-jooyoung
Browse files Browse the repository at this point in the history
  • Loading branch information
jooyyoo committed Sep 28, 2023
2 parents 1452979 + 9a39ef2 commit 590d76a
Show file tree
Hide file tree
Showing 14 changed files with 108 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,5 @@ class GPDataSource @Inject constructor(@ApplicationContext context: Context) {
const val ACCESS_TOKEN = "AccessToken"
const val REFRESH_TOKEN = "RefreshToken"
const val IS_LOGIN = "IsLogin"
const val NICKNAME = "nickname"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import com.sopt.geonppang.presentation.MainActivity
import com.sopt.geonppang.presentation.login.LoginActivity
import com.sopt.geonppang.presentation.type.AuthRoleType
import com.sopt.geonppang.presentation.type.PlatformType
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.binding.BindingActivity
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
Expand All @@ -34,12 +35,14 @@ class SignActivity :
private fun addListeners() {
binding.btnStartKakao.setOnClickListener {
kakaoAuthService.startKakaoLogin(authViewModel::signUp)
AmplitudeUtils.trackEventWithProperties(START_SIGNUP, SIGNUP_TYPE, KAKAO)
}
binding.tvLoginWithEmail.setOnClickListener {
moveToLogin()
}
binding.tvSignupWithEmail.setOnClickListener {
moveToSignUp()
AmplitudeUtils.trackEventWithProperties(START_SIGNUP, SIGNUP_TYPE, EMAIL)
}
}

Expand Down Expand Up @@ -80,4 +83,11 @@ class SignActivity :
Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
}

companion object {
const val START_SIGNUP = "start_signup"
const val SIGNUP_TYPE = "signup_type"
const val EMAIL = "email"
const val KAKAO = "kakao"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.ActivitySignupBinding
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 @@ -43,6 +44,7 @@ class SignUpActivity :
}
binding.btnNext.setOnClickListener {
moveToNickname()
AmplitudeUtils.trackEvent(COMPLETE_SIGNUP)
}
binding.toolbar.ivBack.setOnClickListener {
finish()
Expand Down Expand Up @@ -124,5 +126,6 @@ class SignUpActivity :
companion object {
const val EMAIL = "email"
const val PASSWORD = "password"
const val COMPLETE_SIGNUP = "complete_signup"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.ActivityWelcomeBinding
import com.sopt.geonppang.presentation.filterSetting.FilterSettingActivity
import com.sopt.geonppang.presentation.type.FilterInfoType
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.binding.BindingActivity
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
Expand All @@ -22,6 +23,7 @@ class WelcomeActivity : BindingActivity<ActivityWelcomeBinding>(R.layout.activit
private fun initLayout() {
val nickName = intent.getStringExtra(NICKNAME)
binding.tvStartWelcomeTitle.text = this.getString(R.string.welcome_to_geonppang, nickName)
AmplitudeUtils.trackEventWithProperties(COMPLETE_NICKNAME, NICKNAME, nickName)
}

private fun loadWelcomeScreen() {
Expand All @@ -43,5 +45,6 @@ class WelcomeActivity : BindingActivity<ActivityWelcomeBinding>(R.layout.activit
companion object {
const val NICKNAME = "nickName"
const val FILTER_INFO = "filterInfo"
const val COMPLETE_NICKNAME = "complete_nickname"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.sopt.geonppang.util.ChipFactory
import com.sopt.geonppang.util.CustomSnackbar
import com.sopt.geonppang.util.UiState
import com.sopt.geonppang.util.binding.BindingActivity
import com.sopt.geonppang.util.extension.setOnSingleClickListener
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
Expand Down Expand Up @@ -94,7 +95,7 @@ class DetailActivity : BindingActivity<ActivityDetailBinding>(R.layout.activity_
}
}

binding.ivDetailBottomAppBarBookmark.setOnClickListener {
binding.ivDetailBottomAppBarBookmark.setOnSingleClickListener {
viewModel.bakeryInfo.value?.isBooked?.let { isBookMarked ->
viewModel.doBookMark(bakeryId, !isBookMarked)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ import androidx.viewpager2.widget.ViewPager2
import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.ActivityFilterBinding
import com.sopt.geonppang.presentation.MainActivity
import com.sopt.geonppang.presentation.auth.SignActivity
import com.sopt.geonppang.presentation.type.BreadFilterType
import com.sopt.geonppang.presentation.type.FilterInfoType
import com.sopt.geonppang.presentation.type.NutrientFilterType
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.UiState
import com.sopt.geonppang.util.binding.BindingActivity
Expand Down Expand Up @@ -49,6 +50,7 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac
}
})
setPreviousActivity()
AmplitudeUtils.trackEvent(START_FILTER_ONBOARDING)
}

private fun addListeners() {
Expand All @@ -67,13 +69,22 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac

binding.btnFilterNext.setOnSingleClickListener {
when (binding.vpFilterContainer.currentItem) {
2 -> {
viewModel.setUserFilter()
0 -> {
AmplitudeUtils.trackEvent(FILTER_SETTING_FIRST_PAGE)
binding.vpFilterContainer.currentItem++
}

else -> {
1 -> {
AmplitudeUtils.trackEvent(FILTER_SETTING_SECOND_PAGE)
binding.vpFilterContainer.currentItem++
}

2 -> {
viewModel.setUserFilter()
AmplitudeUtils.trackEvent(FILTER_SETTING_LAST_PAGE)
}

else -> {}
}
}
}
Expand All @@ -97,10 +108,9 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac
}
}.launchIn(lifecycleScope)

viewModel.isFilterBtnEnabled.flowWithLifecycle(lifecycle)
.onEach { isFilterBtnEnabled ->
binding.btnFilterNext.isEnabled = isFilterBtnEnabled
}.launchIn(lifecycleScope)
viewModel.isFilterBtnEnabled.flowWithLifecycle(lifecycle).onEach { isFilterBtnEnabled ->
binding.btnFilterNext.isEnabled = isFilterBtnEnabled
}.launchIn(lifecycleScope)

viewModel.selectedFilterState.flowWithLifecycle(lifecycle).onEach {
when (it) {
Expand All @@ -123,6 +133,16 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac

FilterInfoType.ONBOARDING -> {
moveOnBoardingToMain()
it.data.mainPurposeType?.let { mainPurposeType ->
AmplitudeUtils.trackEventWithMapProperties(
COMPLETE_FILTER_ONBOARDING,
mapOf(
MAIN_PURPOSE to mainPurposeType,
BREAD_TYPE to getStringBreadType(it.data.breadType),
INGREDIENTS_TYPE to getStringIngredientType(it.data.ingredientType)
)
)
}
}

else -> {}
Expand All @@ -137,8 +157,7 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac

private fun moveOnBoardingToMain() {
val intent = Intent(this, MainActivity::class.java)
intent.flags =
Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
}

Expand All @@ -151,13 +170,6 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac
startActivity(intent)
}

private fun moveToSign() {
val intent = Intent(this, SignActivity::class.java)
intent.flags =
Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
}

private fun setPreviousActivity() {
intent.getStringExtra(FILTER_INFO)?.let { filterInfoType ->
viewModel.setPreviousActivity(FilterInfoType.valueOf(filterInfoType))
Expand Down Expand Up @@ -186,6 +198,14 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac
}
}

private fun getStringBreadType(breadType: Map<BreadFilterType, Boolean>): List<String> {
return breadType.entries.filter { it.value }.map { it.key.name }
}

private fun getStringIngredientType(ingredientType: Map<NutrientFilterType, Boolean>): List<String> {
return ingredientType.entries.filter { it.value }.map { it.key.name }
}

companion object {
const val FILTER_INFO = "filterInfo"
const val MY_PAGE_FRAGMENT = "MyPageFragment"
Expand All @@ -197,5 +217,13 @@ class FilterSettingActivity : BindingActivity<ActivityFilterBinding>(R.layout.ac
const val COMPLETE_FILTER_HOME = "complete_filter_home"
const val COMPLETE_FILTER_LIST = "complete_filter_list"
const val COMPLETE_FILTER_MY = "complete_filter_mypage"
const val START_FILTER_ONBOARDING = "start_filter_onboarding"
const val COMPLETE_FILTER_ONBOARDING = "complete_filter_onboarding"
const val MAIN_PURPOSE = "main purpose"
const val BREAD_TYPE = "breadtype"
const val INGREDIENTS_TYPE = "ingredients type"
const val FILTER_SETTING_FIRST_PAGE = "click_mainpurpose"
const val FILTER_SETTING_SECOND_PAGE = "click_breadtype"
const val FILTER_SETTING_LAST_PAGE = "click_ingredients type"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.sopt.geonppang.data.datasource.local.GPDataSource
import com.sopt.geonppang.data.model.request.RequestSettingFilter
import com.sopt.geonppang.domain.model.SelectedFilter
import com.sopt.geonppang.domain.repository.FilterSettingRepository
import com.sopt.geonppang.presentation.model.AmplitudeFilterSettingInfo
import com.sopt.geonppang.presentation.type.BreadFilterType
import com.sopt.geonppang.presentation.type.FilterInfoType
import com.sopt.geonppang.presentation.type.MainPurposeType
Expand All @@ -26,7 +26,8 @@ class FilterSettingViewModel @Inject constructor(
gpDataSource: GPDataSource,
private val filterRepository: FilterSettingRepository
) : ViewModel() {
private val _selectedFilterState = MutableStateFlow<UiState<SelectedFilter>>(UiState.Loading)
private val _selectedFilterState =
MutableStateFlow<UiState<AmplitudeFilterSettingInfo>>(UiState.Loading)
val selectedFilterState get() = _selectedFilterState.asStateFlow()
private val _previousActivity = MutableStateFlow<FilterInfoType?>(null)
val previousActivity get() = _previousActivity.asStateFlow()
Expand Down Expand Up @@ -112,8 +113,14 @@ class FilterSettingViewModel @Inject constructor(
filterRepository.setUserFilter(
it
)
.onSuccess { selectedFilter ->
_selectedFilterState.value = UiState.Success(selectedFilter)
.onSuccess {
_selectedFilterState.value = UiState.Success(
AmplitudeFilterSettingInfo(
mainPurposeType = _mainPurposeType.value,
breadType = breadFilterType.value,
ingredientType = nutrientFilterType.value,
)
)
}
.onFailure { throwable ->
_selectedFilterState.value = UiState.Error(throwable.message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import androidx.fragment.app.activityViewModels
import com.sopt.geonppang.R
import com.sopt.geonppang.databinding.FragmentMainPurposeFilterBinding
import com.sopt.geonppang.presentation.MainActivity
import com.sopt.geonppang.presentation.auth.SignActivity
import com.sopt.geonppang.util.AmplitudeUtils
import com.sopt.geonppang.util.binding.BindingFragment

class MainPurposeFilterFragment :
Expand All @@ -27,6 +27,10 @@ class MainPurposeFilterFragment :
binding.layoutMainPurposeSkip.setOnClickListener {
moveToMain()
}

binding.tvMainPurposeSkip.setOnClickListener {
AmplitudeUtils.trackEvent(CLICK_SKIP)
}
}

private fun moveToMain() {
Expand All @@ -36,10 +40,7 @@ class MainPurposeFilterFragment :
startActivity(intent)
}

private fun moveToSign() {
val intent = Intent(requireContext(), SignActivity::class.java)
intent.flags =
Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
companion object {
const val CLICK_SKIP = "click_skip"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.sopt.geonppang.presentation.model

import com.sopt.geonppang.presentation.type.BreadFilterType
import com.sopt.geonppang.presentation.type.MainPurposeType
import com.sopt.geonppang.presentation.type.NutrientFilterType

data class AmplitudeFilterSettingInfo(
val mainPurposeType: MainPurposeType?,
val breadType: Map<BreadFilterType, Boolean>,
val ingredientType: Map<NutrientFilterType, Boolean>
)
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class ReviewCancelBottomDialogFragment :
}

companion object {
const val CLICK_REVIEW_WRITING_STOP = "click_reviewwrting_stop"
const val CLICK_REVIEW_WRITING_CONTINUE = "click_reviewwrting_continue"
const val CLICK_REVIEW_WRITING_STOP = "click_reviewwriting_stop"
const val CLICK_REVIEW_WRITING_CONTINUE = "click_reviewwriting_continue"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ class ReviewWritingActivity :
const val BAD = "아쉬웠어요"
const val CLICK_REVIEW_WRITING_OPTION = "click_reviewwriting_option"
const val CLICK_RECOMMEND_KEYWORD = "click_recommend_keyword"
const val CLICK_REVIEW_WRITING_TEXT = "click_reviewwritng_text"
const val CLICK_REVIEW_WRITING_TEXT = "click_reviewwriting_text"
const val CLICK_REVIEW_WRITING_BACK = "click_reviewwriting_back"
const val CLICK_REVIEW_WRITING_COMPLETE = "click_reviewwriting_complete"
const val COMPLETE_REVIEW_WRITING = "complete_reviewwriting"
Expand Down
13 changes: 10 additions & 3 deletions app/src/main/java/com/sopt/geonppang/util/CustomSnackbar.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.sopt.geonppang.util

import android.content.res.Resources
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.core.content.ContextCompat
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.snackbar.Snackbar.SnackbarLayout
import com.sopt.geonppang.databinding.ViewSnackbarBinding

object CustomSnackbar {
Expand All @@ -16,11 +18,16 @@ object CustomSnackbar {
binding.tvViewSnackbar.text = message

val snackbar = Snackbar.make(view, message, Snackbar.LENGTH_SHORT)
val snackbarLayout = snackbar.view as SnackbarLayout
val snackbarLayout = snackbar.view as ViewGroup

val layoutParams = snackbarLayout.layoutParams as FrameLayout.LayoutParams
layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT
layoutParams.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
layoutParams.bottomMargin = 112.toPx()
snackbarLayout.layoutParams = layoutParams

with(snackbarLayout) {
removeAllViews()
setPadding(0, 0, 0, 111.toPx())
setBackgroundColor(ContextCompat.getColor(context, android.R.color.transparent))
addView(binding.root)
}
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/res/layout/view_snackbar.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/background_snackbar"
android:elevation="5dp"
android:elevation="2dp"
android:paddingHorizontal="@dimen/spacing24"
android:paddingVertical="13dp"
android:layout_margin="10dp"
android:textAppearance="@style/TextAppearance.BodyB2"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
<string name="detail_more_info">가게 상세정보</string>
<string name="detail_homepage"><u>웹사이트</u></string>
<string name="detail_instagram"><u>인스타그램</u></string>
<string name="detail_notice">홈페이지에 성분정보가 있어요!</string>
<string name="detail_notice">웹사이트에 성분정보가 있어요!</string>
<string name="detail_menu">가게 메뉴</string>
<string name="detail_menu_notice">가게 상세정보 및 메뉴는 업체에서 제공한 정보를 바탕으로 합니다. 건빵집 방문 시 한 번 더 확인하시기를 권장합니다.</string>
<string name="detail_review">건빵 리뷰</string>
Expand Down

0 comments on commit 590d76a

Please sign in to comment.