Skip to content

Commit

Permalink
[MERGE] #147 -> develop
Browse files Browse the repository at this point in the history
[ADD/#147] 거래 경고 알러트 UI 추가
  • Loading branch information
Marchbreeze authored Oct 31, 2024
2 parents b1f2b0b + c8b0603 commit 19f6445
Show file tree
Hide file tree
Showing 13 changed files with 404 additions and 60 deletions.
4 changes: 2 additions & 2 deletions buildSrc/src/main/kotlin/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ object Constants {
const val compileSdk = 34
const val minSdk = 28
const val targetSdk = 34
const val versionCode = 11
const val versionName = "1.1.4"
const val versionCode = 12
const val versionName = "1.1.5"
}
Binary file added core/src/main/res/drawable/img_menu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions core/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,11 @@
<string name="sell_info_msg_ordered">입금 완료</string>
<string name="sell_info_btn_fix">판매 확정하기</string>
<string name="sell_info_btn_shipping">배송 중인 상품입니다.</string>

<string name="sell_delete_btn_delete">판매 취소하기</string>
<string name="sell_delete_tv_title">판매 취소</string>
<string name="sell_delete_tv_subtitle">정말 판매 취소를 하시겠습니까?</string>
<string name="sell_delete_btn_sell_delete">확인</string>
<string name="sell_delete_success_toast">상품 판매가 취소되었습니다.</string>

<string name="sell_confirm_tv_title">판매 확정</string>
Expand All @@ -217,6 +222,11 @@
<string name="sell_confirm_btn_copy">복사</string>
<string name="sell_order_fix_msg">판매 확정을 완료했습니다.</string>

<string name="sell_confirm_dialog_tv_title">판매 확정하시겠습니까?</string>
<string name="sell_confirm_dialog_tv_subtitle">카카오톡 선물하기에 모든 정보를\n정확히 입력하셨나요?</string>
<string name="sell_confirm_dialog_btn_confirm">네, 입력했습니다</string>
<string name="sell_confirm_dialog_btn_return">다시 확인하기</string>

<string name="sign_up_tv_title">본인 인증을\n진행해주세요</string>
<string name="sign_up_tv_subtitle">본인 명의의 휴대폰 번호로 인증을 진행해주세요</string>
<string name="sign_up_tv_name">이름</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,27 @@ import androidx.core.view.isVisible
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import co.orange.core.R
import co.orange.core.amplitude.AmplitudeManager
import co.orange.core.base.BaseActivity
import co.orange.core.extension.setOnSingleClickListener
import co.orange.core.extension.stringOf
import co.orange.core.extension.toast
import co.orange.core.navigation.NavigationManager
import co.orange.core.state.UiState
import co.orange.domain.entity.response.SellBuyerInfoModel
import co.orange.sell.databinding.ActivitySellConfirmBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import javax.inject.Inject
import co.orange.sell.R as featureR

@AndroidEntryPoint
class SellConfirmActivity :
BaseActivity<ActivitySellConfirmBinding>(featureR.layout.activity_sell_confirm) {
@Inject
lateinit var navigationManager: NavigationManager

private val viewModel by viewModels<SellConfirmViewModel>()

private var sellConfirmDialog: SellConfirmDialog? = null

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

Expand All @@ -43,7 +40,6 @@ class SellConfirmActivity :
initConfirmBtnListener()
getIntentInfo()
observeGetBuyerInfoState()
observePatchOrderConfirmState()
}

private fun initBackBtnListener() {
Expand All @@ -60,7 +56,8 @@ class SellConfirmActivity :

private fun initConfirmBtnListener() {
binding.btnConfirm.setOnSingleClickListener {
viewModel.patchOrderConfirmToServer()
sellConfirmDialog = SellConfirmDialog()
sellConfirmDialog?.show(supportFragmentManager, DIALOG_CONFIRM)
}
}

Expand Down Expand Up @@ -117,30 +114,17 @@ class SellConfirmActivity :
clipboardManager.setPrimaryClip(ClipData.newPlainText(CLIP_LABEL, text))
}

private fun observePatchOrderConfirmState() {
viewModel.patchOrderConfirmState.flowWithLifecycle(lifecycle).distinctUntilChanged()
.onEach { state ->
when (state) {
is UiState.Success -> {
AmplitudeManager.apply {
plusIntProperty("user_selling_count", 1)
plusIntProperty("user_selling_total", viewModel.totalPrice)
}
toast(stringOf(R.string.sell_order_fix_msg))
navigationManager.toMainViewWIthClearing(this)
}

is UiState.Failure -> toast(stringOf(R.string.error_msg))
else -> return@onEach
}
}.launchIn(lifecycleScope)
override fun onDestroy() {
super.onDestroy()
sellConfirmDialog = null
}

companion object {
private const val EXTRA_ORDER_ID = "EXTRA_ORDER_ID"
private const val EXTRA_TOTAL_PRICE = "EXTRA_TOTAL_PRICE"

private const val CLIP_LABEL = "BUYER_INFO"
private const val DIALOG_CONFIRM = "DIALOG_CONFIRM"

const val WEB_TERM_SELL =
"https://brawny-guan-098.notion.site/6d77260d027148ceb0f806f0911c284a?pvs=4"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package co.orange.sell.confirm

import android.os.Bundle
import android.view.View
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import co.orange.core.R
import co.orange.core.amplitude.AmplitudeManager
import co.orange.core.base.BaseDialog
import co.orange.core.extension.setOnSingleClickListener
import co.orange.core.extension.stringOf
import co.orange.core.extension.toast
import co.orange.core.navigation.NavigationManager
import co.orange.core.state.UiState
import co.orange.sell.databinding.DialogSellConfirmBinding
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import javax.inject.Inject
import co.orange.sell.R as featureR

class SellConfirmDialog :
BaseDialog<DialogSellConfirmBinding>(featureR.layout.dialog_sell_confirm) {
@Inject
lateinit var navigationManager: NavigationManager

private val viewModel by activityViewModels<SellConfirmViewModel>()

override fun onStart() {
super.onStart()
dialog?.window?.apply {
setLayout(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
)
setBackgroundDrawableResource(R.color.transparent)
}
}

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)

initReturnBtnListener()
initConfirmBtnListener()
observePatchOrderConfirmState()
}

private fun initReturnBtnListener() {
binding.btnReturn.setOnSingleClickListener { dismiss() }
}

private fun initConfirmBtnListener() {
binding.btnConfirm.setOnSingleClickListener {
viewModel.patchOrderConfirmToServer()
}
}

private fun observePatchOrderConfirmState() {
viewModel.patchOrderConfirmState.flowWithLifecycle(lifecycle).distinctUntilChanged()
.onEach { state ->
when (state) {
is UiState.Success -> {
AmplitudeManager.apply {
plusIntProperty("user_selling_count", 1)
plusIntProperty("user_selling_total", viewModel.totalPrice)
}
toast(stringOf(R.string.sell_order_fix_msg))
navigationManager.toMainViewWIthClearing(requireContext())
}

is UiState.Failure -> toast(stringOf(R.string.error_msg))
else -> return@onEach
}
}.launchIn(lifecycleScope)
}
}
76 changes: 76 additions & 0 deletions feature/sell/src/main/java/co/orange/sell/info/SellDeleteDialog.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package co.orange.sell.info

import android.os.Bundle
import android.view.View
import android.view.WindowManager
import androidx.activity.viewModels
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import co.orange.core.base.BaseDialog
import co.orange.core.extension.setOnSingleClickListener
import co.orange.core.extension.stringOf
import co.orange.core.extension.toast
import co.orange.core.navigation.NavigationManager
import co.orange.core.state.UiState
import co.orange.sell.R
import co.orange.sell.databinding.DialogBankBinding
import co.orange.sell.databinding.DialogSellDeleteBinding
import co.orange.sell.progress.SellProgressViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import javax.inject.Inject

@AndroidEntryPoint
class SellDeleteDialog :
BaseDialog<DialogSellDeleteBinding>(R.layout.dialog_sell_delete) {

private val viewModel by activityViewModels<SellInfoViewModel>()

override fun onStart() {
super.onStart()
dialog?.window?.apply {
setLayout(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
)
setBackgroundDrawableResource(co.orange.core.R.color.transparent)
}
}

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
) {
super.onViewCreated(view, savedInstanceState)

initDeleteBtnListener()
observeDeleteItemState()
}

private fun initDeleteBtnListener() {
binding.btnSellDelete.setOnSingleClickListener {
viewModel.deleteSellingItemFromServer()
}
}

private fun observeDeleteItemState() {
viewModel.deleteItemState
.flowWithLifecycle(lifecycle)
.distinctUntilChanged()
.onEach { state ->
when (state) {
is UiState.Success -> {
toast(stringOf(co.orange.core.R.string.sell_delete_success_toast))
requireActivity().finish()
dismiss()
}

is UiState.Failure -> toast(stringOf(co.orange.core.R.string.error_msg))
else -> return@onEach
}
}.launchIn(lifecycleScope)
}
}
45 changes: 14 additions & 31 deletions feature/sell/src/main/java/co/orange/sell/info/SellInfoActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,16 @@ import co.orange.sell.R as featureR
class SellInfoActivity : BaseActivity<ActivitySellInfoBinding>(featureR.layout.activity_sell_info) {
private val viewModel by viewModels<SellInfoViewModel>()

private var sellMenuBottomSheet: SellMenuBottomSheet? = null

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

initExitBtnListener()
initSellConfirmBtnListener()
initMenuBtnListener()
getIntentInfo()
observeGetSellInfoState()
observeDeleteItemState()
}

private fun initExitBtnListener() {
Expand All @@ -47,17 +49,16 @@ class SellInfoActivity : BaseActivity<ActivitySellInfoBinding>(featureR.layout.a

private fun initSellConfirmBtnListener() {
binding.btnSellConfirm.setOnSingleClickListener {
if (viewModel.isOnSale) {
viewModel.deleteSellingItemFromServer()
} else {
startActivity(
SellConfirmActivity.createIntent(
this,
viewModel.orderId,
viewModel.totalPrice,
),
)
}
startActivity(
SellConfirmActivity.createIntent(this, viewModel.orderId, viewModel.totalPrice),
)
}
}

private fun initMenuBtnListener() {
binding.btnMenu.setOnSingleClickListener {
sellMenuBottomSheet = SellMenuBottomSheet()
sellMenuBottomSheet?.show(supportFragmentManager, sellMenuBottomSheet?.tag)
}
}

Expand Down Expand Up @@ -106,11 +107,10 @@ class SellInfoActivity : BaseActivity<ActivitySellInfoBinding>(featureR.layout.a
}

private fun setItemStatus(status: String) {
viewModel.isOnSale = status == ItemStatus.ON_SALE.name
val (infoMsgResId, btnTextResId, isButtonEnabled) =
when (status) {
ItemStatus.ON_SALE.name -> {
Triple(R.string.sell_info_msg_on_sale, R.string.sell_info_msg_cancel, true)
Triple(R.string.sell_info_msg_on_sale, R.string.sell_info_btn_fix, false)
}

ItemStatus.ORDER_PLACE.name -> {
Expand Down Expand Up @@ -156,23 +156,6 @@ class SellInfoActivity : BaseActivity<ActivitySellInfoBinding>(featureR.layout.a
}
}

private fun observeDeleteItemState() {
viewModel.deleteItemState
.flowWithLifecycle(lifecycle)
.distinctUntilChanged()
.onEach { state ->
when (state) {
is UiState.Success -> {
toast(stringOf(R.string.sell_delete_success_toast))
finish()
}

is UiState.Failure -> toast(stringOf(R.string.error_msg))
else -> return@onEach
}
}.launchIn(lifecycleScope)
}

companion object {
private const val EXTRA_ITEM_ID = "EXTRA_ITEM_ID"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ class SellInfoViewModel
var orderId = ""
var totalPrice = 0

var isOnSale = true

private val _getSellInfoState = MutableStateFlow<UiState<SellInfoModel>>(UiState.Empty)
val getSellInfoState: StateFlow<UiState<SellInfoModel>> = _getSellInfoState

Expand Down
Loading

0 comments on commit 19f6445

Please sign in to comment.