diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02ac32491..e92723c46 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -172,6 +172,11 @@
android:exported="false"
android:screenOrientation="portrait" />
+
(R.layout.activity_main
private val type by stringExtra()
private var backPressedTime: Long = 0
+ private var userSubsStateJob: Job? = null
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
@@ -82,12 +84,15 @@ class MainActivity : BindingActivity(R.layout.activity_main
}
private fun initBnvItemSelectedListener() {
- supportFragmentManager.findFragmentById(R.id.fcv_main) ?: navigateTo()
+ supportFragmentManager.findFragmentById(R.id.fcv_main)
+ ?: navigateTo()
binding.bnvMain.setOnItemSelectedListener { menu ->
when (menu.itemId) {
R.id.menu_recommend -> {
- AmplitudeUtils.trackEventWithProperties(EVENT_CLICK_RECOMMEND_NAVIGATION)
+ AmplitudeUtils.trackEventWithProperties(
+ EVENT_CLICK_RECOMMEND_NAVIGATION,
+ )
navigateTo()
}
@@ -185,7 +190,7 @@ class MainActivity : BindingActivity(R.layout.activity_main
}
private fun setupGetUserSubsState() {
- viewModel.getUserSubsState.flowWithLifecycle(lifecycle)
+ userSubsStateJob = viewModel.getUserSubsState.flowWithLifecycle(lifecycle)
.onEach { state ->
when (state) {
is Empty -> return@onEach
@@ -195,20 +200,25 @@ class MainActivity : BindingActivity(R.layout.activity_main
// TODO : 도메인 모델에 변환된 날짜로 파싱되도록 보완
val expiredDateString = state.data?.expiredDate.toString()
val expiredDate =
- SimpleDateFormat(EXPIRED_DATE_FORMAT).parse(expiredDateString)
+ SimpleDateFormat(EXPIRED_DATE_FORMAT).parse(
+ expiredDateString,
+ )
?: return@onEach
val currentDate = Calendar.getInstance().time
val daysDifference = TimeUnit.DAYS.convert(
expiredDate.time - currentDate.time,
TimeUnit.MILLISECONDS,
)
- if (daysDifference >= 1) {
+ if (daysDifference <= 1) {
PayReSubsNoticeDialog.newInstance(expiredDateString)
.show(supportFragmentManager, PAY_RESUBS_DIALOG)
}
}
- is Failure -> yelloSnackbar(binding.root, getString(R.string.msg_error))
+ is Failure -> yelloSnackbar(
+ binding.root,
+ getString(R.string.msg_error),
+ )
}
}.launchIn(lifecycleScope)
}
@@ -217,7 +227,11 @@ class MainActivity : BindingActivity(R.layout.activity_main
viewModel.getNoticeState.flowWithLifecycle(lifecycle)
.onEach { state ->
when (state) {
- is Empty -> yelloSnackbar(binding.root, getString(R.string.msg_error))
+ is Empty -> yelloSnackbar(
+ binding.root,
+ getString(R.string.msg_error),
+ )
+
is Loading -> return@onEach
is Success -> {
if (!state.data.isAvailable) return@onEach
@@ -262,6 +276,10 @@ class MainActivity : BindingActivity(R.layout.activity_main
badgeDrawable.isVisible = count != 0
}
+ fun resetUserSubsStateFlow() {
+ userSubsStateJob?.cancel()
+ }
+
companion object {
private const val EXTRA_TYPE = "type"
private const val EXTRA_PATH = "path"
@@ -274,7 +292,8 @@ class MainActivity : BindingActivity(R.layout.activity_main
const val BACK_PRESSED_INTERVAL = 2000
const val EXPIRED_DATE_FORMAT = "yyyy-MM-dd"
const val PAY_RESUBS_DIALOG = "PayResubsNoticeDialog"
- private const val EVENT_CLICK_RECOMMEND_NAVIGATION = "click_recommend_navigation"
+ private const val EVENT_CLICK_RECOMMEND_NAVIGATION =
+ "click_recommend_navigation"
private const val TAG_NOTICE_DIALOG = "NOTICE_DIALOG"
diff --git a/app/src/main/java/com/el/yello/presentation/main/look/LookFragment.kt b/app/src/main/java/com/el/yello/presentation/main/look/LookFragment.kt
index b59eed3ce..63f424383 100644
--- a/app/src/main/java/com/el/yello/presentation/main/look/LookFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/main/look/LookFragment.kt
@@ -40,13 +40,16 @@ class LookFragment : BindingFragment(R.layout.fragment_look
private var isScrolled: Boolean = false
private var isNoFriend: Boolean = false
+ private var isFilterSelected: Boolean = false
+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initAdapter()
initInviteBtnListener()
+ initFilterBtnListener()
setListBottomPadding()
- observeTimelinePagingList()
+ observeTimelinePagingList(isFilterSelected)
setPullToScrollListener()
observePagingLoadingState()
catchScrollForAmplitude()
@@ -59,6 +62,7 @@ class LookFragment : BindingFragment(R.layout.fragment_look
adapter.addLoadStateListener { combinedLoadStates ->
if (combinedLoadStates.prepend.endOfPaginationReached) {
binding.layoutLookNoFriendsList.isVisible = adapter.itemCount < 1
+ binding.layoutLookListInfo.isGone = adapter.itemCount < 1
binding.rvLook.isGone = adapter.itemCount < 1
isNoFriend = adapter.itemCount < 1
}
@@ -77,6 +81,16 @@ class LookFragment : BindingFragment(R.layout.fragment_look
}
}
+ private fun initFilterBtnListener() {
+ binding.btnLookFilter.setOnSingleClickListener {
+ isFilterSelected = !isFilterSelected
+ adapter.refresh()
+ viewModel.setFirstLoading(true)
+ observeTimelinePagingList(isFilterSelected)
+ binding.tvLookFilterType.text = if(isFilterSelected) TYPE_MINE else TYPE_ALL
+ }
+ }
+
private fun setListBottomPadding() {
binding.rvLook.addItemDecoration(BaseLinearRcvItemDeco(bottomPadding = 14))
}
@@ -96,11 +110,10 @@ class LookFragment : BindingFragment(R.layout.fragment_look
}.launchIn(lifecycleScope)
}
- private fun observeTimelinePagingList() {
- viewModel.getLookListWithPaging().flowWithLifecycle(lifecycle)
- .onEach { pagingData ->
- adapter.submitData(lifecycle, pagingData)
- }.launchIn(lifecycleScope)
+ private fun observeTimelinePagingList(onlyMine: Boolean) {
+ viewModel.getLookListWithPaging(onlyMine).flowWithLifecycle(lifecycle).onEach { pagingData ->
+ adapter.submitData(lifecycle, pagingData)
+ }.launchIn(lifecycleScope)
}
@@ -166,5 +179,8 @@ class LookFragment : BindingFragment(R.layout.fragment_look
companion object {
const val INVITE_DIALOG = "inviteDialog"
const val TIMELINE_NO_FRIEND = "timeline_0friend"
+
+ const val TYPE_ALL = "모든 쪽지"
+ const val TYPE_MINE = "내가 보낸 쪽지"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/el/yello/presentation/main/look/LookViewHolder.kt b/app/src/main/java/com/el/yello/presentation/main/look/LookViewHolder.kt
index b9ac20783..d83f36355 100644
--- a/app/src/main/java/com/el/yello/presentation/main/look/LookViewHolder.kt
+++ b/app/src/main/java/com/el/yello/presentation/main/look/LookViewHolder.kt
@@ -50,6 +50,7 @@ class LookViewHolder(
setTextColor(itemView.context.colorOf(R.color.semantic_gender_f_500))
FROM_FEMALE
}
+ if (item.isUserSenderVote) text = FROM_ME
}
}
}
@@ -58,5 +59,6 @@ class LookViewHolder(
const val MALE = "MALE"
const val FROM_MALE = "남학생에게 받음"
const val FROM_FEMALE = "여학생에게 받음"
+ const val FROM_ME = "나에게 받음"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/el/yello/presentation/main/look/LookViewModel.kt b/app/src/main/java/com/el/yello/presentation/main/look/LookViewModel.kt
index 5aea27b1e..0f2fa950a 100644
--- a/app/src/main/java/com/el/yello/presentation/main/look/LookViewModel.kt
+++ b/app/src/main/java/com/el/yello/presentation/main/look/LookViewModel.kt
@@ -29,10 +29,10 @@ class LookViewModel @Inject constructor(
_isFirstLoading.value = boolean
}
- fun getLookListWithPaging(): Flow> =
+ fun getLookListWithPaging(onlyMine: Boolean): Flow> =
Pager(
config = PagingConfig(LookPagingSource.LOOK_PAGE_SIZE),
- pagingSourceFactory = { LookPagingSource(lookService) }
+ pagingSourceFactory = { LookPagingSource(lookService, onlyMine) }
).flow.cachedIn(viewModelScope)
fun getYelloId() = authRepository.getYelloId()
diff --git a/app/src/main/java/com/el/yello/presentation/main/profile/ProfileViewModel.kt b/app/src/main/java/com/el/yello/presentation/main/profile/ProfileViewModel.kt
index 44e7fe214..d83828529 100644
--- a/app/src/main/java/com/el/yello/presentation/main/profile/ProfileViewModel.kt
+++ b/app/src/main/java/com/el/yello/presentation/main/profile/ProfileViewModel.kt
@@ -1,10 +1,16 @@
package com.el.yello.presentation.main.profile
+import android.content.Context
+import android.util.Log
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
+import com.el.yello.R
import com.el.yello.util.amplitude.AmplitudeUtils
import com.example.domain.entity.PayInfoModel
import com.example.domain.entity.ProfileFriendsListModel
+import com.example.domain.entity.ProfileQuitReasonModel
import com.example.domain.entity.ProfileUserModel
import com.example.domain.repository.AuthRepository
import com.example.domain.repository.PayRepository
@@ -30,14 +36,12 @@ class ProfileViewModel @Inject constructor(
init {
resetPageVariable()
- // resetStateVariable()
}
private val _getUserDataResult = MutableSharedFlow()
val getUserDataResult: SharedFlow = _getUserDataResult
- private val _getFriendListState =
- MutableStateFlow>(UiState.Empty)
+ private val _getFriendListState = MutableStateFlow>(UiState.Empty)
val getFriendListState: StateFlow> = _getFriendListState
private val _deleteUserState = MutableStateFlow>(UiState.Empty)
@@ -71,6 +75,21 @@ class ProfileViewModel @Inject constructor(
var clickedUserData = ProfileUserModel()
var clickedItemPosition: Int? = null
+ private val quitReasonText = MutableLiveData()
+ val etcText = MutableLiveData("")
+ private val _quitReasonData: MutableLiveData> = MutableLiveData()
+ val quitReasonData: LiveData> = _quitReasonData
+ fun setEtcText(etc: String) {
+ etcText.value = etc
+ }
+ fun setQuitReason(reason: String) {
+ quitReasonText.value = reason
+ }
+ fun addQuitReasonList(context: Context) {
+ val quitReasonArray = context.resources.getStringArray(R.array.quit_reasons)
+ _quitReasonData.value = quitReasonArray.toList()
+ }
+
fun setItemPosition(position: Int) {
clickedItemPosition = position
}
@@ -92,6 +111,7 @@ class ProfileViewModel @Inject constructor(
_kakaoQuitState.value = UiState.Empty
_getFriendListState.value = UiState.Empty
_getPurchaseInfoState.value = UiState.Empty
+ _getUserDataResult.resetReplayCache()
}
fun getUserDataFromServer() {
@@ -136,7 +156,16 @@ class ProfileViewModel @Inject constructor(
fun deleteUserDataToServer() {
viewModelScope.launch {
_deleteUserState.value = UiState.Loading
- profileRepository.deleteUserData()
+ val quitReason = if (quitReasonText.value.toString().equals("기타")) {
+ etcText.value.toString()
+ } else {
+ quitReasonText.value.toString()
+ }
+ profileRepository.deleteUserData(
+ ProfileQuitReasonModel(
+ quitReason,
+ ),
+ )
.onSuccess {
clearLocalInfo()
delay(300)
diff --git a/app/src/main/java/com/el/yello/presentation/main/profile/info/ProfileFragment.kt b/app/src/main/java/com/el/yello/presentation/main/profile/info/ProfileFragment.kt
index d5ff39919..a576da7d3 100644
--- a/app/src/main/java/com/el/yello/presentation/main/profile/info/ProfileFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/main/profile/info/ProfileFragment.kt
@@ -64,15 +64,18 @@ class ProfileFragment : BindingFragment(R.layout.fragmen
AmplitudeUtils.trackEventWithProperties("view_profile")
}
+ override fun onResume() {
+ super.onResume()
+
+ resetProfileData()
+ }
+
private fun initProfileSetting() {
initProfileManageBtnListener()
initUpwardBtnListener()
initUpwardBtnVisibility()
initAdapter()
setItemDivider()
- viewModel.getUserDataFromServer()
- viewModel.getFriendsListFromServer()
- viewModel.getPurchaseInfoFromServer()
}
private fun setItemDivider() {
@@ -156,14 +159,7 @@ class ProfileFragment : BindingFragment(R.layout.fragmen
binding.layoutProfileSwipe.apply {
setOnRefreshListener {
lifecycleScope.launch {
- adapter.setItemList(listOf())
- viewModel.run {
- resetPageVariable()
- resetStateVariable()
- getPurchaseInfoFromServer()
- getUserDataFromServer()
- getFriendsListFromServer()
- }
+ resetProfileData()
delay(200)
binding.layoutProfileSwipe.isRefreshing = false
}
@@ -172,6 +168,17 @@ class ProfileFragment : BindingFragment(R.layout.fragmen
}
}
+ private fun resetProfileData() {
+ adapter.setItemList(listOf())
+ viewModel.run {
+ resetPageVariable()
+ resetStateVariable()
+ getPurchaseInfoFromServer()
+ getUserDataFromServer()
+ getFriendsListFromServer()
+ }
+ }
+
private fun observeUserDataResult() {
viewModel.getUserDataResult.flowWithLifecycle(lifecycle).onEach { result ->
if (!result) yelloSnackbar(requireView(), getString(R.string.profile_error_user_data))
diff --git a/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitDialog.kt b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitDialog.kt
index c7a7e7f97..70009c558 100644
--- a/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitDialog.kt
+++ b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitDialog.kt
@@ -70,8 +70,6 @@ class ProfileQuitDialog :
viewModel.deleteUserDataToServer()
}
}
-
- // 유저 탈퇴 서버 통신 성공 시 카카오 연결 해제 진행
private fun observeUserDeleteState() {
viewModel.deleteUserState.flowWithLifecycle(lifecycle).onEach { state ->
when (state) {
diff --git a/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitReasonActivity.kt b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitReasonActivity.kt
new file mode 100644
index 000000000..d4b8c4a16
--- /dev/null
+++ b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitReasonActivity.kt
@@ -0,0 +1,94 @@
+package com.el.yello.presentation.main.profile.manage
+
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.recyclerview.widget.RecyclerView
+import com.el.yello.R
+import com.el.yello.databinding.ActivityProfileQuitReasonBinding
+import com.el.yello.presentation.main.profile.ProfileViewModel
+import com.example.ui.base.BindingActivity
+import com.example.ui.context.colorOf
+import com.example.ui.view.setOnSingleClickListener
+import dagger.hilt.android.AndroidEntryPoint
+
+@AndroidEntryPoint
+class ProfileQuitReasonActivity :
+ BindingActivity(R.layout.activity_profile_quit_reason) {
+ private lateinit var quitReasonList: List
+ private val viewModel by viewModels()
+ private var clickedItemPosition: Int = RecyclerView.NO_POSITION
+ private var isItemClicked: Boolean = false
+ private var profileQuitDialog: ProfileQuitDialog? = null
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding.vm = viewModel
+ initQuitReasonAdapter()
+ initBackBtnListener()
+ initInviteDialogBtnListener()
+ }
+
+ private fun initQuitReasonAdapter() {
+ viewModel.addQuitReasonList(this)
+ quitReasonList = viewModel.quitReasonData.value ?: emptyList()
+ val adapter = ProfileQuitReasonAdapter(
+ storeQuitReason = ::storeQuitReason,
+ setEtcText = ::setEtcText,
+ ) { position, clicked ->
+ clickedItemPosition = position
+ isItemClicked = clicked
+ if (isItemClicked) {
+ if (clickedItemPosition == 7) {
+ nonClickedButtonUI()
+ } else {
+ clickedButtonUI()
+ }
+ }
+ }
+ binding.rvQuitReason.adapter = adapter
+ adapter.submitList(ArrayList(quitReasonList))
+ }
+
+ private fun initInviteDialogBtnListener() {
+ binding.btnProfileQuitReasonDone.setOnSingleClickListener {
+ profileQuitDialog = ProfileQuitDialog()
+ profileQuitDialog?.show(supportFragmentManager, QUIT_DIALOG)
+ }
+ }
+
+ private fun initBackBtnListener() {
+ binding.btnProfileQuitReasonBack.setOnSingleClickListener { finish() }
+ }
+
+ private fun clickedButtonUI() {
+ with(binding.btnProfileQuitReasonDone) {
+ setBackgroundResource(R.drawable.shape_black_fill_grayscales700_line_100_rect)
+ setTextColor(colorOf(R.color.semantic_red_500))
+ isEnabled = true
+ }
+ }
+
+ private fun nonClickedButtonUI() {
+ with(binding.btnProfileQuitReasonDone) {
+ setBackgroundResource(R.drawable.shape_black_fill_grayscales600_line_100_rect)
+ setTextColor(colorOf(R.color.grayscales_600))
+ isEnabled = false
+ }
+ }
+
+ private fun storeQuitReason(reason: String) {
+ viewModel.setQuitReason(reason)
+ }
+
+ private fun setEtcText(etc: String) {
+ viewModel.setEtcText(etc)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ profileQuitDialog?.dismiss()
+ }
+
+ private companion object {
+ const val QUIT_DIALOG = "quitDialog"
+ }
+}
diff --git a/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitReasonAdapter.kt b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitReasonAdapter.kt
new file mode 100644
index 000000000..1ed70c3f2
--- /dev/null
+++ b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitReasonAdapter.kt
@@ -0,0 +1,85 @@
+package com.el.yello.presentation.main.profile.manage
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.widget.addTextChangedListener
+import androidx.recyclerview.widget.ListAdapter
+import androidx.recyclerview.widget.RecyclerView
+import com.el.yello.R
+import com.el.yello.databinding.ItemProfileQuitReasonBinding
+import com.example.ui.view.ItemDiffCallback
+import com.example.ui.view.setOnSingleClickListener
+
+class ProfileQuitReasonAdapter(
+ private val storeQuitReason: (String) -> Unit,
+ private val setEtcText: (String) -> Unit,
+ private val onItemClickListener: (Int, Boolean) -> Unit,
+) : ListAdapter(diffUtil) {
+ private var selectedItemPosition: Int = RecyclerView.NO_POSITION
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QuitReasonViewHolder {
+ return QuitReasonViewHolder(
+ ItemProfileQuitReasonBinding.inflate(
+ LayoutInflater.from(parent.context),
+ parent,
+ false,
+ ),
+ storeQuitReason,
+ setEtcText,
+ this::onItemClicked,
+ )
+ }
+
+ override fun onBindViewHolder(holder: QuitReasonViewHolder, position: Int) {
+ holder.bind(getItem(position), position == selectedItemPosition)
+ }
+
+ private fun onItemClicked(position: Int) {
+ if (selectedItemPosition != RecyclerView.NO_POSITION) {
+ notifyItemChanged(selectedItemPosition)
+ }
+ selectedItemPosition = position
+ notifyItemChanged(position)
+ storeQuitReason(getItem(position))
+ onItemClickListener(position, true)
+ }
+
+ class QuitReasonViewHolder(
+ private val binding: ItemProfileQuitReasonBinding,
+ private val storeQuitReason: (String) -> Unit,
+ private val setEtcText: (String) -> Unit,
+ private val onItemClicked: (Int) -> Unit,
+ ) : RecyclerView.ViewHolder(binding.root) {
+
+ fun bind(reason: String, isItemSelected: Boolean) {
+ binding.reason = reason
+ binding.root.setOnSingleClickListener {
+ onItemClicked(absoluteAdapterPosition)
+ }
+ binding.etQuitEtc.addTextChangedListener {
+ setEtcText(binding.etQuitEtc.text.toString())
+ }
+ if (isItemSelected) {
+ with(binding) {
+ ivQuitReasonCheckpoint.setBackgroundResource(R.drawable.ic_profile_quit_reason_check)
+ cvQuitReasonList.setBackgroundResource(R.drawable.shape_black_fill_white_line_8_rect)
+ etQuitEtc.visibility = if (absoluteAdapterPosition == 7) View.VISIBLE else View.GONE
+ }
+ storeQuitReason(reason)
+ } else {
+ with(binding) {
+ ivQuitReasonCheckpoint.setBackgroundResource(R.drawable.ic_profile_quit_reason_uncheck)
+ cvQuitReasonList.setBackgroundResource(R.drawable.shape_grayscales900_fill_8_rect)
+ etQuitEtc.visibility = View.GONE
+ }
+ }
+ }
+ }
+
+ companion object {
+ private val diffUtil = ItemDiffCallback(
+ onItemsTheSame = { old, new -> old == new },
+ onContentsTheSame = { old, new -> old == new },
+ )
+ }
+}
diff --git a/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitTwoActivity.kt b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitTwoActivity.kt
index bed202e9b..dfe2aa2c2 100644
--- a/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitTwoActivity.kt
+++ b/app/src/main/java/com/el/yello/presentation/main/profile/manage/ProfileQuitTwoActivity.kt
@@ -1,5 +1,6 @@
package com.el.yello.presentation.main.profile.manage
+import android.content.Intent
import android.os.Bundle
import com.el.yello.R
import com.el.yello.databinding.ActivityProfileQuitTwoBinding
@@ -12,37 +13,27 @@ import org.json.JSONObject
@AndroidEntryPoint
class ProfileQuitTwoActivity :
BindingActivity(R.layout.activity_profile_quit_two) {
-
- private var profileQuitDialog: ProfileQuitDialog? = null
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initBackBtnListener()
- initInviteDialogBtnListener()
+ initQuitBtnListener()
}
private fun initBackBtnListener() {
binding.btnProfileQuitBack.setOnSingleClickListener { finish() }
}
- private fun initInviteDialogBtnListener() {
+ private fun initQuitBtnListener() {
binding.btnProfileQuitForSure.setOnSingleClickListener {
AmplitudeUtils.trackEventWithProperties(
"click_profile_withdrawal",
JSONObject().put("withdrawal_button", "withdrawal3"),
)
- profileQuitDialog = ProfileQuitDialog()
- profileQuitDialog?.show(supportFragmentManager, QUIT_DIALOG)
+ Intent(this, ProfileQuitReasonActivity::class.java).apply {
+ addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+ startActivity(this)
+ }
}
}
-
- override fun onDestroy() {
- super.onDestroy()
- profileQuitDialog?.dismiss()
- }
-
- private companion object {
- const val QUIT_DIALOG = "quitDialog"
- }
}
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/activity/OnBoardingViewModel.kt b/app/src/main/java/com/el/yello/presentation/onboarding/OnBoardingViewModel.kt
similarity index 99%
rename from app/src/main/java/com/el/yello/presentation/onboarding/activity/OnBoardingViewModel.kt
rename to app/src/main/java/com/el/yello/presentation/onboarding/OnBoardingViewModel.kt
index 5492ed473..2f3ec884f 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/activity/OnBoardingViewModel.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/OnBoardingViewModel.kt
@@ -1,4 +1,4 @@
-package com.el.yello.presentation.onboarding.activity
+package com.el.yello.presentation.onboarding
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/activity/EditNameActivity.kt b/app/src/main/java/com/el/yello/presentation/onboarding/activity/EditNameActivity.kt
index 3ac8f9521..09a760787 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/activity/EditNameActivity.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/activity/EditNameActivity.kt
@@ -11,6 +11,7 @@ import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_GENDER
import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_KAKAO_ID
import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_NAME
import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_PROFILE_IMAGE
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.example.ui.base.BindingActivity
import com.example.ui.context.toast
import com.example.ui.view.setOnSingleClickListener
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/activity/OnBoardingActivity.kt b/app/src/main/java/com/el/yello/presentation/onboarding/activity/OnBoardingActivity.kt
index ad6d981a3..2fa807f81 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/activity/OnBoardingActivity.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/activity/OnBoardingActivity.kt
@@ -14,6 +14,7 @@ import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_GENDER
import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_KAKAO_ID
import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_NAME
import com.el.yello.presentation.auth.SignInActivity.Companion.EXTRA_PROFILE_IMAGE
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.example.ui.base.BindingActivity
import com.example.ui.context.toast
import dagger.hilt.android.AndroidEntryPoint
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/addfriend/AddFriendFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/addfriend/AddFriendFragment.kt
index 0263d9db6..e7118188b 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/addfriend/AddFriendFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/addfriend/AddFriendFragment.kt
@@ -12,7 +12,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.el.yello.R
import com.el.yello.databinding.FragmentAddFriendBinding
import com.el.yello.presentation.onboarding.activity.OnBoardingActivity
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.util.amplitude.AmplitudeUtils
import com.example.domain.entity.onboarding.AddFriendListModel.FriendModel
import com.example.ui.base.BindingFragment
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/code/CodeFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/code/CodeFragment.kt
index 513a7de76..361f7a9dd 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/code/CodeFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/code/CodeFragment.kt
@@ -9,7 +9,7 @@ import com.el.yello.R
import com.el.yello.databinding.FragmentCodeBinding
import com.el.yello.presentation.onboarding.activity.GetAlarmActivity
import com.el.yello.presentation.onboarding.activity.OnBoardingActivity
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.util.amplitude.AmplitudeUtils
import com.el.yello.util.context.yelloSnackbar
import com.example.ui.base.BindingFragment
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/HighSchoolInfoFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/HighSchoolInfoFragment.kt
index 50f778c24..bbcb84b02 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/HighSchoolInfoFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/HighSchoolInfoFragment.kt
@@ -7,7 +7,7 @@ import androidx.navigation.fragment.findNavController
import com.el.yello.R
import com.el.yello.databinding.FragmentHighschoolBinding
import com.el.yello.presentation.onboarding.activity.OnBoardingActivity
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.presentation.onboarding.fragment.highschoolinfo.group.GroupDialogFragment
import com.el.yello.presentation.onboarding.fragment.highschoolinfo.school.SearchDialogHighSchoolFragment
import com.el.yello.util.amplitude.AmplitudeUtils
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/group/GroupDialogFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/group/GroupDialogFragment.kt
index bf47b5a45..4005e250b 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/group/GroupDialogFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/group/GroupDialogFragment.kt
@@ -5,7 +5,7 @@ import android.view.View
import androidx.fragment.app.activityViewModels
import com.el.yello.R
import com.el.yello.databinding.FragmentDialogGroupBinding
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.example.ui.base.BindingBottomSheetDialog
class GroupDialogFragment :
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/school/SearchDialogHighSchoolFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/school/SearchDialogHighSchoolFragment.kt
index ea354277a..a9cf220a6 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/school/SearchDialogHighSchoolFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/highschoolinfo/school/SearchDialogHighSchoolFragment.kt
@@ -16,7 +16,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.el.yello.R
import com.el.yello.databinding.FragmentDialogHighschoolBinding
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.util.context.yelloSnackbar
import com.example.ui.base.BindingBottomSheetDialog
import com.example.ui.context.hideKeyboard
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/studenttype/SelectStudentFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/studenttype/SelectStudentFragment.kt
index 90bed8f54..e43ffd4da 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/studenttype/SelectStudentFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/studenttype/SelectStudentFragment.kt
@@ -7,7 +7,7 @@ import androidx.navigation.fragment.findNavController
import com.el.yello.R
import com.el.yello.databinding.FragmentSelectStudentTypeBinding
import com.el.yello.presentation.onboarding.activity.OnBoardingActivity
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.util.amplitude.AmplitudeUtils
import com.example.domain.enum.StudentType
import com.example.ui.base.BindingFragment
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/UniversityInfoFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/UniversityInfoFragment.kt
index 55fd7a464..7fd0cb59b 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/UniversityInfoFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/UniversityInfoFragment.kt
@@ -8,7 +8,7 @@ import androidx.navigation.fragment.findNavController
import com.el.yello.R
import com.el.yello.databinding.FragmentUniversityBinding
import com.el.yello.presentation.onboarding.activity.OnBoardingActivity
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.presentation.onboarding.fragment.universityinfo.department.SearchDialogDepartmentFragment
import com.el.yello.presentation.onboarding.fragment.universityinfo.studentid.StudentIdDialogFragment
import com.el.yello.presentation.onboarding.fragment.universityinfo.university.SearchDialogUniversityFragment
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/department/SearchDialogDepartmentFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/department/SearchDialogDepartmentFragment.kt
index 2baad7d0f..9e5cd55a4 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/department/SearchDialogDepartmentFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/department/SearchDialogDepartmentFragment.kt
@@ -16,7 +16,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.el.yello.R
import com.el.yello.databinding.FragmentDialogDepartmentBinding
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.util.context.yelloSnackbar
import com.example.ui.base.BindingBottomSheetDialog
import com.example.ui.context.hideKeyboard
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/studentid/StudentIdDialogFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/studentid/StudentIdDialogFragment.kt
index 94185d164..6aa088edd 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/studentid/StudentIdDialogFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/studentid/StudentIdDialogFragment.kt
@@ -5,7 +5,7 @@ import android.view.View
import androidx.fragment.app.activityViewModels
import com.el.yello.R
import com.el.yello.databinding.FragmentDialogStudentIdBinding
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.example.ui.base.BindingBottomSheetDialog
class StudentIdDialogFragment :
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/university/SearchDialogUniversityFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/university/SearchDialogUniversityFragment.kt
index 793cdf866..734e3a63c 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/university/SearchDialogUniversityFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/universityinfo/university/SearchDialogUniversityFragment.kt
@@ -16,7 +16,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.el.yello.R
import com.el.yello.databinding.FragmentDialogUniversityBinding
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.util.context.yelloSnackbar
import com.example.ui.base.BindingBottomSheetDialog
import com.example.ui.context.hideKeyboard
diff --git a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/yelloid/YelIoIdFragment.kt b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/yelloid/YelIoIdFragment.kt
index ed3567264..14548d537 100644
--- a/app/src/main/java/com/el/yello/presentation/onboarding/fragment/yelloid/YelIoIdFragment.kt
+++ b/app/src/main/java/com/el/yello/presentation/onboarding/fragment/yelloid/YelIoIdFragment.kt
@@ -7,8 +7,8 @@ import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import com.el.yello.R
import com.el.yello.databinding.FragmentYelloIdBinding
+import com.el.yello.presentation.onboarding.OnBoardingViewModel
import com.el.yello.presentation.onboarding.activity.OnBoardingActivity
-import com.el.yello.presentation.onboarding.activity.OnBoardingViewModel
import com.el.yello.util.amplitude.AmplitudeUtils
import com.el.yello.util.context.yelloSnackbar
import com.example.ui.base.BindingFragment
diff --git a/app/src/main/java/com/el/yello/presentation/pay/PayReSubsNoticeDialog.kt b/app/src/main/java/com/el/yello/presentation/pay/PayReSubsNoticeDialog.kt
index 233ea8786..b74b45cb0 100644
--- a/app/src/main/java/com/el/yello/presentation/pay/PayReSubsNoticeDialog.kt
+++ b/app/src/main/java/com/el/yello/presentation/pay/PayReSubsNoticeDialog.kt
@@ -9,12 +9,16 @@ import android.view.ViewGroup
import android.view.WindowManager
import com.el.yello.R
import com.el.yello.databinding.FragmentNoticeResubscribeBinding
+import com.el.yello.presentation.main.MainActivity
import com.example.ui.base.BindingDialogFragment
import com.example.ui.view.setOnSingleClickListener
class PayReSubsNoticeDialog :
BindingDialogFragment(R.layout.fragment_notice_resubscribe) {
+ private val mainActivity: MainActivity by lazy {
+ requireActivity() as MainActivity
+ }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setNoticeBtnClickListener()
@@ -38,12 +42,14 @@ class PayReSubsNoticeDialog :
private fun setNoticeBtnClickListener() {
binding.btnNoticeQuit.setOnSingleClickListener {
dismiss()
+ mainActivity.resetUserSubsStateFlow()
}
binding.btnYelloplusSubscribe.setOnSingleClickListener {
Intent(requireContext(), PayActivity::class.java).apply {
startActivity(this)
}
dismiss()
+ mainActivity.resetUserSubsStateFlow()
}
}
@@ -62,7 +68,6 @@ class PayReSubsNoticeDialog :
companion object {
private const val ARG_EXPIRED_DATE = "arg_expired_date"
-
@JvmStatic
fun newInstance(expiredDate: String): PayReSubsNoticeDialog {
return PayReSubsNoticeDialog().apply {
diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml
new file mode 100644
index 000000000..fd6791e44
--- /dev/null
+++ b/app/src/main/res/drawable/ic_down.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_profile_quit_reason_check.xml b/app/src/main/res/drawable/ic_profile_quit_reason_check.xml
new file mode 100644
index 000000000..51a6bcc93
--- /dev/null
+++ b/app/src/main/res/drawable/ic_profile_quit_reason_check.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_profile_quit_reason_uncheck.xml b/app/src/main/res/drawable/ic_profile_quit_reason_uncheck.xml
new file mode 100644
index 000000000..0f2c28597
--- /dev/null
+++ b/app/src/main/res/drawable/ic_profile_quit_reason_uncheck.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/app/src/main/res/drawable/shape_black_fill_grayscales600_line_100_rect.xml b/app/src/main/res/drawable/shape_black_fill_grayscales600_line_100_rect.xml
new file mode 100644
index 000000000..1a64a3455
--- /dev/null
+++ b/app/src/main/res/drawable/shape_black_fill_grayscales600_line_100_rect.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/shape_black_fill_white_line_8_rect.xml b/app/src/main/res/drawable/shape_black_fill_white_line_8_rect.xml
new file mode 100644
index 000000000..36cb2fe16
--- /dev/null
+++ b/app/src/main/res/drawable/shape_black_fill_white_line_8_rect.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/shape_grayscales800_line_40_rect.xml b/app/src/main/res/drawable/shape_grayscales800_line_40_rect.xml
new file mode 100644
index 000000000..aa982383a
--- /dev/null
+++ b/app/src/main/res/drawable/shape_grayscales800_line_40_rect.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/shape_grayscales900_fill_grayscales700_circle.xml b/app/src/main/res/drawable/shape_grayscales900_fill_grayscales700_circle.xml
deleted file mode 100644
index 132244d0f..000000000
--- a/app/src/main/res/drawable/shape_grayscales900_fill_grayscales700_circle.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_name_edit.xml b/app/src/main/res/layout/activity_name_edit.xml
index 7bdeabac8..ccb9e00b5 100644
--- a/app/src/main/res/layout/activity_name_edit.xml
+++ b/app/src/main/res/layout/activity_name_edit.xml
@@ -7,7 +7,7 @@
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
diff --git a/app/src/main/res/layout/activity_profile_quit_reason.xml b/app/src/main/res/layout/activity_profile_quit_reason.xml
new file mode 100644
index 000000000..2ee0facf8
--- /dev/null
+++ b/app/src/main/res/layout/activity_profile_quit_reason.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_tutorial_end_point.xml b/app/src/main/res/layout/activity_tutorial_end_point.xml
index 47e84dfb9..5156bb705 100644
--- a/app/src/main/res/layout/activity_tutorial_end_point.xml
+++ b/app/src/main/res/layout/activity_tutorial_end_point.xml
@@ -5,7 +5,7 @@
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
diff --git a/app/src/main/res/layout/fragment_dialog_check_name.xml b/app/src/main/res/layout/fragment_dialog_check_name.xml
index 6d3ad68c6..9590b46be 100644
--- a/app/src/main/res/layout/fragment_dialog_check_name.xml
+++ b/app/src/main/res/layout/fragment_dialog_check_name.xml
@@ -7,7 +7,7 @@
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
@@ -18,50 +19,80 @@
android:background="@drawable/shape_white_fill_10_rect"
android:paddingHorizontal="2dp"
android:paddingTop="2dp"
- android:paddingBottom="50dp"
+ android:paddingBottom="36dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+ app:layout_constraintTop_toBottomOf="@id/tv_recommend_dialog_subtitle_up_box" />
+
+
+ app:layout_constraintTop_toBottomOf="@id/tv_recommend_dialog_subtitle_down_box">
+ app:layout_constraintTop_toBottomOf="@id/tv_recommend_dialog_invite_title"
+ tools:text="sangho.kk" />
@@ -131,7 +162,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
- android:layout_marginTop="27dp"
+ android:layout_marginTop="18dp"
android:src="@drawable/ic_kakao_share"
app:layout_constraintEnd_toStartOf="@id/btn_invite_link"
app:layout_constraintHorizontal_chainStyle="packed"
@@ -143,7 +174,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
- android:layout_marginTop="27dp"
+ android:layout_marginTop="18dp"
android:src="@drawable/ic_link_share"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/btn_invite_kakao"
diff --git a/app/src/main/res/layout/fragment_look.xml b/app/src/main/res/layout/fragment_look.xml
index cc1659e19..ea00f7a7f 100644
--- a/app/src/main/res/layout/fragment_look.xml
+++ b/app/src/main/res/layout/fragment_look.xml
@@ -23,15 +23,90 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/layout_look_list_info">
+ app:layout_constraintTop_toBottomOf="@id/layout_look_list_info">
+ app:layout_constraintTop_toBottomOf="@id/tv_layout_title">
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
+ type="com.el.yello.presentation.onboarding.OnBoardingViewModel" />
diff --git a/app/src/main/res/layout/item_profile_quit_reason.xml b/app/src/main/res/layout/item_profile_quit_reason.xml
new file mode 100644
index 000000000..fb8099ac5
--- /dev/null
+++ b/app/src/main/res/layout/item_profile_quit_reason.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ed2165350..eb72ef450 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -155,6 +155,8 @@
타임라인
타임라인 가져오기 실패
친구들이 받은 쪽지가 궁금하다면\n친구를 초대해볼까요?
+ 쪽지를 보낸 사람의 이름은 공개되지 않아요.
+ 모든 쪽지
Unknown View Type : %d
@@ -233,15 +235,17 @@
추천친구
친구 초대하기
- 친구가 내 추천인 코드로 가입하면
- 40분 대기 초기화 + 100포인트 지급!
+ 친구가 내 추천인 코드로 가입하면,
+ 40분 대기 초기화 + 100포인트
+ 내 추천인 코드가 처음 쓰였다면?!
+ 열람권 1개 추가 지급!
내 추천인 코드
\@
친구 초대하기
찾는 친구가 없다면 친구를 초대해볼까요?
찾는 친구가 없다면\n친구를 초대해볼까요?
- 친구 초대하고 100포인트 받기
+ 친구 초대하고 리워드 받기
친구추가
친구 검색
@@ -356,9 +360,24 @@
초성 힌트 무제한 제공
곧 위와 같은 혜택을 누릴 수 없게 돼요. \n\n옐로 플러스의 특별한 서비스를\n계속 이용하시려면, 버튼을 눌러\n구독을 계속해 보세요!
계속 옐로플러스 구독하기
+ 탈퇴 사유를 적어주세요.
+ 완료
+ 사유를 적어주세요.(최대 30자)
다시 보지 않기
닫기
다시 보지 않기 아이콘
+
스토리 공유하기
+
+
+ - 앱에 아는 사람들이 없어서
+ - 구독권과 열람권의 가격이 비싸서
+ - 오류가 많아서
+ - 재밌는 콘텐츠 또는 질문이 없어서
+ - 포인트를 너무 적게 줘서
+ - 내 정보를 삭제하고 싶어서
+ - 다른 앱이 더 재밌어서
+ - 기타
+
diff --git a/data/src/main/java/com/example/data/datasource/ProfileDataSource.kt b/data/src/main/java/com/example/data/datasource/ProfileDataSource.kt
index c0447d6d7..92ce35397 100644
--- a/data/src/main/java/com/example/data/datasource/ProfileDataSource.kt
+++ b/data/src/main/java/com/example/data/datasource/ProfileDataSource.kt
@@ -1,6 +1,7 @@
package com.example.data.datasource
import com.example.data.model.request.profile.ProfileModRequestDto
+import com.example.data.model.request.profile.RequestQuitReasonDto
import com.example.data.model.response.BaseResponse
import com.example.data.model.response.profile.ResponseProfileFriendsListDto
import com.example.data.model.response.profile.ResponseProfileModValidDto
@@ -14,16 +15,17 @@ interface ProfileDataSource {
page: Int,
): BaseResponse
- suspend fun deleteUserData(): BaseResponse
+ suspend fun deleteUserData(
+ request: RequestQuitReasonDto,
+ ): BaseResponse
suspend fun deleteFriendData(
friendId: Long,
): BaseResponse
suspend fun postToModUserData(
- request: ProfileModRequestDto
+ request: ProfileModRequestDto,
): BaseResponse
- suspend fun getModValidData() : BaseResponse
-
+ suspend fun getModValidData(): BaseResponse
}
diff --git a/data/src/main/java/com/example/data/datasource/paging/LookPagingSource.kt b/data/src/main/java/com/example/data/datasource/paging/LookPagingSource.kt
index 8c147d5e0..1b41f0c8d 100644
--- a/data/src/main/java/com/example/data/datasource/paging/LookPagingSource.kt
+++ b/data/src/main/java/com/example/data/datasource/paging/LookPagingSource.kt
@@ -7,7 +7,8 @@ import com.example.domain.entity.LookListModel.LookModel
import javax.inject.Inject
class LookPagingSource @Inject constructor(
- private val lookService: LookService
+ private val lookService: LookService,
+ private val onlyMine: Boolean,
) : PagingSource() {
override fun getRefreshKey(state: PagingState): Int? {
@@ -21,7 +22,11 @@ class LookPagingSource @Inject constructor(
val currentPosition = params.key ?: 0
val currentPage = currentPosition.times(LOOK_POSITION_TO_PAGE).toInt()
val response = runCatching {
- lookService.getLookList(currentPage)
+ if (onlyMine) {
+ lookService.getLookList(currentPage, ONLY_MINE)
+ } else {
+ lookService.getLookList(currentPage)
+ }
}.getOrElse {
return LoadResult.Error(it)
}
@@ -42,5 +47,7 @@ class LookPagingSource @Inject constructor(
companion object {
const val LOOK_PAGE_SIZE = 10
const val LOOK_POSITION_TO_PAGE = 0.1
+
+ const val ONLY_MINE = "send"
}
}
\ No newline at end of file
diff --git a/data/src/main/java/com/example/data/datasource/remote/ProfileDataSourceImpl.kt b/data/src/main/java/com/example/data/datasource/remote/ProfileDataSourceImpl.kt
index c05aabc28..e48f895ee 100644
--- a/data/src/main/java/com/example/data/datasource/remote/ProfileDataSourceImpl.kt
+++ b/data/src/main/java/com/example/data/datasource/remote/ProfileDataSourceImpl.kt
@@ -1,6 +1,7 @@
package com.example.data.datasource.remote
import com.example.data.datasource.ProfileDataSource
+import com.example.data.model.request.profile.RequestQuitReasonDto
import com.example.data.model.request.profile.ProfileModRequestDto
import com.example.data.model.response.BaseResponse
import com.example.data.model.response.profile.ResponseProfileFriendsListDto
@@ -23,10 +24,11 @@ class ProfileDataSourceImpl @Inject constructor(
return profileService.getFriendsData(page)
}
- override suspend fun deleteUserData(): BaseResponse {
- return profileService.deleteUserData()
+ override suspend fun deleteUserData(request: RequestQuitReasonDto): BaseResponse {
+ return profileService.deleteUserData(request)
}
+
override suspend fun deleteFriendData(
friendId: Long
): BaseResponse {
diff --git a/data/src/main/java/com/example/data/model/request/profile/RequestQuitReasonDto.kt b/data/src/main/java/com/example/data/model/request/profile/RequestQuitReasonDto.kt
new file mode 100644
index 000000000..1a07981de
--- /dev/null
+++ b/data/src/main/java/com/example/data/model/request/profile/RequestQuitReasonDto.kt
@@ -0,0 +1,13 @@
+package com.example.data.model.request.profile
+
+import com.example.domain.entity.ProfileQuitReasonModel
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+@Serializable
+data class RequestQuitReasonDto(
+ @SerialName("value")
+ val value: String,
+)
+
+fun ProfileQuitReasonModel.toRequestDto() = RequestQuitReasonDto(value)
diff --git a/data/src/main/java/com/example/data/model/response/look/ResponseLookListDto.kt b/data/src/main/java/com/example/data/model/response/look/ResponseLookListDto.kt
index b40acc015..08df3c238 100644
--- a/data/src/main/java/com/example/data/model/response/look/ResponseLookListDto.kt
+++ b/data/src/main/java/com/example/data/model/response/look/ResponseLookListDto.kt
@@ -14,11 +14,25 @@ data class ResponseLookListDto(
@Serializable
data class LookDto(
@SerialName("id")
- val id: Int,
- @SerialName("receiverName")
- val receiverName: String,
+ val id: Long,
+ @SerialName("senderId")
+ val senderId: Long,
+ @SerialName("senderName")
+ val senderName: String,
+ @SerialName("senderYelloId")
+ val senderYelloId: String,
@SerialName("senderGender")
val senderGender: String,
+ @SerialName("senderProfileImage")
+ val senderProfileImage: String,
+ @SerialName("receiverId")
+ val receiverId: Long,
+ @SerialName("receiverName")
+ val receiverName: String,
+ @SerialName("receiverYelloId")
+ val receiverYelloId: String,
+ @SerialName("receiverGender")
+ val receiverGender: String,
@SerialName("receiverProfileImage")
val receiverProfileImage: String,
@SerialName("vote")
@@ -26,7 +40,9 @@ data class ResponseLookListDto(
@SerialName("isHintUsed")
val isHintUsed: Boolean,
@SerialName("createdAt")
- val createdAt: String
+ val createdAt: String,
+ @SerialName("isUserSenderVote")
+ val isUserSenderVote: Boolean
) {
@Serializable
data class LookVoteDto(
@@ -59,7 +75,8 @@ data class ResponseLookListDto(
it.vote.keywordFoot
),
it.isHintUsed,
- it.createdAt
+ it.createdAt,
+ it.isUserSenderVote
)
}
)
diff --git a/data/src/main/java/com/example/data/remote/service/LookService.kt b/data/src/main/java/com/example/data/remote/service/LookService.kt
index ae3e0725e..1f583cee7 100644
--- a/data/src/main/java/com/example/data/remote/service/LookService.kt
+++ b/data/src/main/java/com/example/data/remote/service/LookService.kt
@@ -6,8 +6,10 @@ import retrofit2.http.GET
import retrofit2.http.Query
interface LookService {
- @GET("/api/v1/vote/friend")
+
+ @GET("/api/v2/vote/friend")
suspend fun getLookList(
@Query("page") page: Int,
+ @Query("type") type: String? = null
): BaseResponse
}
diff --git a/data/src/main/java/com/example/data/remote/service/ProfileService.kt b/data/src/main/java/com/example/data/remote/service/ProfileService.kt
index 7f6079a9a..fb292cdac 100644
--- a/data/src/main/java/com/example/data/remote/service/ProfileService.kt
+++ b/data/src/main/java/com/example/data/remote/service/ProfileService.kt
@@ -1,6 +1,7 @@
package com.example.data.remote.service
import com.example.data.model.request.profile.ProfileModRequestDto
+import com.example.data.model.request.profile.RequestQuitReasonDto
import com.example.data.model.response.BaseResponse
import com.example.data.model.response.profile.ResponseProfileFriendsListDto
import com.example.data.model.response.profile.ResponseProfileModValidDto
@@ -8,6 +9,7 @@ import com.example.data.model.response.profile.ResponseProfileUserDto
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
+import retrofit2.http.HTTP
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query
@@ -22,8 +24,10 @@ interface ProfileService {
@Query("page") page: Int,
): BaseResponse
- @DELETE("/api/v1/user")
- suspend fun deleteUserData(): BaseResponse
+ @HTTP(method = "DELETE", path = "/api/v2/user", hasBody = true)
+ suspend fun deleteUserData(
+ @Body request: RequestQuitReasonDto,
+ ): BaseResponse
@DELETE("/api/v1/friend/{friendId}")
suspend fun deleteFriendData(
@@ -32,10 +36,9 @@ interface ProfileService {
@POST("/api/v1/user")
suspend fun postToModUserData(
- @Body request: ProfileModRequestDto
+ @Body request: ProfileModRequestDto,
): BaseResponse
@GET("/api/v1/user/data/account-update-at")
suspend fun getModValidData(): BaseResponse
-
}
diff --git a/data/src/main/java/com/example/data/repository/OnboardingRepositoryImpl.kt b/data/src/main/java/com/example/data/repository/OnboardingRepositoryImpl.kt
index cdbdd16dd..c3211bdbe 100644
--- a/data/src/main/java/com/example/data/repository/OnboardingRepositoryImpl.kt
+++ b/data/src/main/java/com/example/data/repository/OnboardingRepositoryImpl.kt
@@ -3,8 +3,8 @@ package com.example.data.repository
import com.example.data.datasource.OnboardingDataSource
import com.example.data.model.request.onboarding.toRequestDto
import com.example.data.model.request.onboarding.toRequestPostSignupDto
-import com.example.domain.entity.AuthTokenRequestModel
import com.example.domain.entity.AuthTokenModel
+import com.example.domain.entity.AuthTokenRequestModel
import com.example.domain.entity.onboarding.AddFriendListModel
import com.example.domain.entity.onboarding.GroupHighSchool
import com.example.domain.entity.onboarding.GroupList
diff --git a/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt b/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt
index 6defb8848..02fad3499 100644
--- a/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt
+++ b/data/src/main/java/com/example/data/repository/ProfileRepositoryImpl.kt
@@ -5,6 +5,7 @@ import com.example.data.model.request.profile.toRequestDto
import com.example.domain.entity.ProfileFriendsListModel
import com.example.domain.entity.ProfileModRequestModel
import com.example.domain.entity.ProfileModValidModel
+import com.example.domain.entity.ProfileQuitReasonModel
import com.example.domain.entity.ProfileUserModel
import com.example.domain.repository.ProfileRepository
import javax.inject.Inject
@@ -20,21 +21,21 @@ class ProfileRepositoryImpl @Inject constructor(
}
override suspend fun getFriendsData(
- page: Int
+ page: Int,
): Result {
return runCatching {
profileDataSource.getFriendsData(page).data?.toProfileFriendsListModel()
}
}
- override suspend fun deleteUserData(): Result {
+ override suspend fun deleteUserData(request: ProfileQuitReasonModel): Result {
return runCatching {
- profileDataSource.deleteUserData().data
+ profileDataSource.deleteUserData(request.toRequestDto())
}
}
override suspend fun deleteFriendData(
- friendId: Long
+ friendId: Long,
): Result {
return runCatching {
profileDataSource.deleteFriendData(friendId).data
@@ -42,7 +43,7 @@ class ProfileRepositoryImpl @Inject constructor(
}
override suspend fun postToModUserData(
- request: ProfileModRequestModel
+ request: ProfileModRequestModel,
): Result {
return runCatching {
profileDataSource.postToModUserData(request.toRequestDto())
@@ -54,5 +55,4 @@ class ProfileRepositoryImpl @Inject constructor(
profileDataSource.getModValidData().data?.toProfileModValidModel()
}
}
-
}
diff --git a/domain/src/main/java/com/example/domain/entity/LookListModel.kt b/domain/src/main/java/com/example/domain/entity/LookListModel.kt
index 124e50c21..6e5258d85 100644
--- a/domain/src/main/java/com/example/domain/entity/LookListModel.kt
+++ b/domain/src/main/java/com/example/domain/entity/LookListModel.kt
@@ -5,13 +5,14 @@ data class LookListModel(
val friendVotes: List
) {
data class LookModel(
- val id: Int,
+ val id: Long,
val receiverName: String,
val senderGender: String,
val receiverProfileImage: String,
val vote: LookVoteModel,
val isHintUsed: Boolean,
- val createdAt: String
+ val createdAt: String,
+ val isUserSenderVote: Boolean
) {
data class LookVoteModel(
val nameHead: String?,
diff --git a/domain/src/main/java/com/example/domain/entity/ProfileQuitReasonModel.kt b/domain/src/main/java/com/example/domain/entity/ProfileQuitReasonModel.kt
new file mode 100644
index 000000000..191d3130e
--- /dev/null
+++ b/domain/src/main/java/com/example/domain/entity/ProfileQuitReasonModel.kt
@@ -0,0 +1,5 @@
+package com.example.domain.entity
+
+data class ProfileQuitReasonModel(
+ val value: String,
+)
\ No newline at end of file
diff --git a/domain/src/main/java/com/example/domain/repository/OnboardingRepository.kt b/domain/src/main/java/com/example/domain/repository/OnboardingRepository.kt
index e3f6f7740..045b08078 100644
--- a/domain/src/main/java/com/example/domain/repository/OnboardingRepository.kt
+++ b/domain/src/main/java/com/example/domain/repository/OnboardingRepository.kt
@@ -1,7 +1,7 @@
package com.example.domain.repository
-import com.example.domain.entity.AuthTokenRequestModel
import com.example.domain.entity.AuthTokenModel
+import com.example.domain.entity.AuthTokenRequestModel
import com.example.domain.entity.onboarding.AddFriendListModel
import com.example.domain.entity.onboarding.GroupHighSchool
import com.example.domain.entity.onboarding.GroupList
diff --git a/domain/src/main/java/com/example/domain/repository/ProfileRepository.kt b/domain/src/main/java/com/example/domain/repository/ProfileRepository.kt
index 0b71ad2fc..d78fe32a2 100644
--- a/domain/src/main/java/com/example/domain/repository/ProfileRepository.kt
+++ b/domain/src/main/java/com/example/domain/repository/ProfileRepository.kt
@@ -3,6 +3,7 @@ package com.example.domain.repository
import com.example.domain.entity.ProfileFriendsListModel
import com.example.domain.entity.ProfileModRequestModel
import com.example.domain.entity.ProfileModValidModel
+import com.example.domain.entity.ProfileQuitReasonModel
import com.example.domain.entity.ProfileUserModel
interface ProfileRepository {
@@ -13,16 +14,17 @@ interface ProfileRepository {
page: Int,
): Result
- suspend fun deleteUserData(): Result
+ suspend fun deleteUserData(
+ request: ProfileQuitReasonModel,
+ ): Result
suspend fun deleteFriendData(
friendId: Long,
): Result
suspend fun postToModUserData(
- request: ProfileModRequestModel
+ request: ProfileModRequestModel,
): Result
- suspend fun getModValidData() : Result
-
+ suspend fun getModValidData(): Result
}