diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index 58241a7..22885e8 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -74,7 +74,7 @@ import kr.co.vividnext.sodalive.mypage.auth.AuthApi import kr.co.vividnext.sodalive.mypage.auth.AuthRepository import kr.co.vividnext.sodalive.mypage.can.CanApi import kr.co.vividnext.sodalive.mypage.can.CanRepository -import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeViewModel +import kr.co.vividnext.sodalive.mypage.can.charge.pg.CanChargePgViewModel import kr.co.vividnext.sodalive.mypage.can.coupon.CanCouponViewModel import kr.co.vividnext.sodalive.mypage.can.payment.CanPaymentViewModel import kr.co.vividnext.sodalive.mypage.can.status.CanStatusViewModel @@ -178,7 +178,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { LiveViewModel(get(), get(), get(), get()) } viewModel { MyPageViewModel(get(), get()) } viewModel { CanStatusViewModel(get()) } - viewModel { CanChargeViewModel(get()) } + viewModel { CanChargePgViewModel(get()) } viewModel { CanPaymentViewModel(get()) } viewModel { LiveRoomDetailViewModel(get()) } viewModel { LiveRoomCreateViewModel(get()) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanApi.kt index f15e2b7..2cfb113 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanApi.kt @@ -2,10 +2,10 @@ package kr.co.vividnext.sodalive.mypage.can import io.reactivex.rxjava3.core.Single import kr.co.vividnext.sodalive.common.ApiResponse -import kr.co.vividnext.sodalive.mypage.can.charge.CanResponse -import kr.co.vividnext.sodalive.mypage.can.charge.ChargeRequest -import kr.co.vividnext.sodalive.mypage.can.charge.ChargeResponse -import kr.co.vividnext.sodalive.mypage.can.charge.VerifyRequest +import kr.co.vividnext.sodalive.mypage.can.charge.pg.CanResponse +import kr.co.vividnext.sodalive.mypage.can.charge.pg.ChargeRequest +import kr.co.vividnext.sodalive.mypage.can.charge.pg.ChargeResponse +import kr.co.vividnext.sodalive.mypage.can.charge.pg.VerifyRequest import kr.co.vividnext.sodalive.mypage.can.coupon.UseCanCouponRequest import kr.co.vividnext.sodalive.mypage.can.status.GetCanStatusResponse import kr.co.vividnext.sodalive.mypage.can.status.charge.GetCanChargeStatusResponseItem diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanRepository.kt index fab03e9..4c0b3ed 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/CanRepository.kt @@ -1,7 +1,7 @@ package kr.co.vividnext.sodalive.mypage.can -import kr.co.vividnext.sodalive.mypage.can.charge.ChargeRequest -import kr.co.vividnext.sodalive.mypage.can.charge.VerifyRequest +import kr.co.vividnext.sodalive.mypage.can.charge.pg.ChargeRequest +import kr.co.vividnext.sodalive.mypage.can.charge.pg.VerifyRequest import kr.co.vividnext.sodalive.mypage.can.coupon.UseCanCouponRequest import java.util.TimeZone diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeActivity.kt index 178be90..714f39e 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeActivity.kt @@ -1,33 +1,26 @@ package kr.co.vividnext.sodalive.mypage.can.charge -import android.annotation.SuppressLint import android.app.Activity import android.content.Intent -import android.graphics.Rect import android.os.Bundle import android.view.View -import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.tabs.TabLayout +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.common.Constants -import kr.co.vividnext.sodalive.common.LoadingDialog +import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.ActivityCanChargeBinding -import kr.co.vividnext.sodalive.extensions.dpToPx +import kr.co.vividnext.sodalive.mypage.can.charge.pg.CanChargePgFragment +import kr.co.vividnext.sodalive.mypage.can.charge.pg.CanResponse import kr.co.vividnext.sodalive.mypage.can.payment.CanPaymentActivity -import org.koin.android.ext.android.inject class CanChargeActivity : BaseActivity( ActivityCanChargeBinding::inflate ) { - - private val viewModel: CanChargeViewModel by inject() private var gotoPrevPage: Boolean = false - private lateinit var adapter: CanChargeAdapter - private lateinit var loadingDialog: LoadingDialog private lateinit var activityResultLauncher: ActivityResultLauncher override fun onCreate(savedInstanceState: Bundle?) { @@ -40,87 +33,86 @@ class CanChargeActivity : BaseActivity( } super.onCreate(savedInstanceState) - bindData() - - viewModel.getCanCharges() - } - - override fun setupView() { - loadingDialog = LoadingDialog(this, layoutInflater) - - binding.toolbar.tvBack.text = "충전하기" - binding.toolbar.tvBack.setOnClickListener { finish() } gotoPrevPage = intent.getBooleanExtra( Constants.EXTRA_GO_TO_PREV_PAGE, false ) - val recyclerView = binding.rvChargeCan - adapter = CanChargeAdapter { - val intent = Intent(applicationContext, CanPaymentActivity::class.java) - intent.putExtra(Constants.EXTRA_CAN, it) - intent.putExtra(Constants.EXTRA_GO_TO_PREV_PAGE, gotoPrevPage) - activityResultLauncher.launch(intent) - } - - recyclerView.layoutManager = LinearLayoutManager( - applicationContext, - LinearLayoutManager.VERTICAL, - false - ) - - recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() { - override fun getItemOffsets( - outRect: Rect, - view: View, - parent: RecyclerView, - state: RecyclerView.State - ) { - super.getItemOffsets(outRect, view, parent, state) - - outRect.left = 13.3f.dpToPx().toInt() - outRect.right = 13.3f.dpToPx().toInt() - - when (parent.getChildAdapterPosition(view)) { - 0 -> { - outRect.top = 13.3f.dpToPx().toInt() - outRect.bottom = 6.7f.dpToPx().toInt() - } - - adapter.itemCount - 1 -> { - outRect.top = 6.7f.dpToPx().toInt() - outRect.bottom = 26.7f.dpToPx().toInt() - } - - else -> { - outRect.top = 6.7f.dpToPx().toInt() - outRect.bottom = 6.7f.dpToPx().toInt() - } - } - } - }) - - recyclerView.adapter = adapter + changeFragment(PG_TAG_KEY) } - @SuppressLint("NotifyDataSetChanged") - private fun bindData() { - viewModel.canChargeLiveData.observe(this) { - adapter.items.addAll(it) - adapter.notifyDataSetChanged() + override fun setupView() { + setupToolbar() + setupTabs() + } + + private fun setupToolbar() { + binding.toolbar.tvBack.text = "충전하기" + binding.toolbar.tvBack.setOnClickListener { finish() } + } + + private fun setupTabs() { + if (SharedPreferenceManager.isAuth) { + val tabs = binding.tabs + + tabs.visibility = View.GONE + tabs.addTab(tabs.newTab().setText("인 앱 결제").setTag(IAP_TAG_KEY)) + tabs.addTab(tabs.newTab().setText("PG").setTag(PG_TAG_KEY)) + + tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab) { + val tag = tab.tag as String + changeFragment(tag) + } + + override fun onTabUnselected(tab: TabLayout.Tab) { + } + + override fun onTabReselected(tab: TabLayout.Tab) { + } + }) + } else { + binding.tabs.visibility = View.GONE + } + } + + private fun changeFragment(tag: String) { + val fragmentManager = supportFragmentManager + val fragmentTransaction = fragmentManager.beginTransaction() + + val currentFragment = fragmentManager.primaryNavigationFragment + if (currentFragment != null) { + fragmentTransaction.hide(currentFragment) } - viewModel.toastLiveData.observe(this) { - it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } - } - - viewModel.isLoading.observe(this) { - if (it) { - loadingDialog.show(screenWidth) + var fragment = fragmentManager.findFragmentByTag(tag) + if (fragment == null) { + fragment = if (tag == PG_TAG_KEY) { + CanChargePgFragment() } else { - loadingDialog.dismiss() + CanChargePgFragment() } + + fragmentTransaction.add(R.id.fl_container, fragment, tag) + } else { + fragmentTransaction.show(fragment) } + + fragmentTransaction.setPrimaryNavigationFragment(fragment) + fragmentTransaction.setReorderingAllowed(true) + fragmentTransaction.commitNow() + } + + fun selectCan(model: CanResponse) { + val intent = Intent(applicationContext, CanPaymentActivity::class.java) + intent.putExtra(Constants.EXTRA_CAN, model) + intent.putExtra(Constants.EXTRA_GO_TO_PREV_PAGE, gotoPrevPage) + activityResultLauncher.launch(intent) + } + + companion object { + const val IAP_TAG_KEY = "iap" + const val PG_TAG_KEY = "pg" } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgAdapter.kt similarity index 91% rename from app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeAdapter.kt rename to app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgAdapter.kt index 55a58e3..05891b6 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgAdapter.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.mypage.can.charge +package kr.co.vividnext.sodalive.mypage.can.charge.pg import android.content.Context import android.view.LayoutInflater @@ -10,9 +10,9 @@ import kr.co.vividnext.sodalive.databinding.ItemCanChargeBinding import kr.co.vividnext.sodalive.extensions.fontSpan import kr.co.vividnext.sodalive.extensions.moneyFormat -class CanChargeAdapter( +class CanChargePgAdapter( private val onClick: (CanResponse) -> Unit -) : RecyclerView.Adapter() { +) : RecyclerView.Adapter() { val items = mutableListOf() diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgFragment.kt new file mode 100644 index 0000000..1293b45 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgFragment.kt @@ -0,0 +1,101 @@ +package kr.co.vividnext.sodalive.mypage.can.charge.pg + +import android.annotation.SuppressLint +import android.graphics.Rect +import android.os.Bundle +import android.view.View +import android.widget.Toast +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import kr.co.vividnext.sodalive.base.BaseFragment +import kr.co.vividnext.sodalive.common.LoadingDialog +import kr.co.vividnext.sodalive.databinding.FragmentCanChargePgBinding +import kr.co.vividnext.sodalive.extensions.dpToPx +import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity +import org.koin.android.ext.android.inject + +class CanChargePgFragment : BaseFragment( + FragmentCanChargePgBinding::inflate +) { + private val viewModel: CanChargePgViewModel by inject() + + private lateinit var adapter: CanChargePgAdapter + private lateinit var loadingDialog: LoadingDialog + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + setupView() + bindData() + + viewModel.getCanCharges() + } + + fun setupView() { + loadingDialog = LoadingDialog(requireActivity(), layoutInflater) + + val recyclerView = binding.rvChargeCan + adapter = CanChargePgAdapter { + (requireActivity() as CanChargeActivity).selectCan(it) + } + + recyclerView.layoutManager = LinearLayoutManager( + requireContext(), + LinearLayoutManager.VERTICAL, + false + ) + + recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() { + override fun getItemOffsets( + outRect: Rect, + view: View, + parent: RecyclerView, + state: RecyclerView.State + ) { + super.getItemOffsets(outRect, view, parent, state) + + outRect.left = 13.3f.dpToPx().toInt() + outRect.right = 13.3f.dpToPx().toInt() + + when (parent.getChildAdapterPosition(view)) { + 0 -> { + outRect.top = 13.3f.dpToPx().toInt() + outRect.bottom = 6.7f.dpToPx().toInt() + } + + adapter.itemCount - 1 -> { + outRect.top = 6.7f.dpToPx().toInt() + outRect.bottom = 26.7f.dpToPx().toInt() + } + + else -> { + outRect.top = 6.7f.dpToPx().toInt() + outRect.bottom = 6.7f.dpToPx().toInt() + } + } + } + }) + + recyclerView.adapter = adapter + } + + @SuppressLint("NotifyDataSetChanged") + private fun bindData() { + viewModel.canChargeLiveData.observe(this) { + adapter.items.addAll(it) + adapter.notifyDataSetChanged() + } + + viewModel.toastLiveData.observe(this) { + it?.let { Toast.makeText(requireActivity(), it, Toast.LENGTH_LONG).show() } + } + + viewModel.isLoading.observe(this) { + if (it) { + loadingDialog.show(screenWidth) + } else { + loadingDialog.dismiss() + } + } + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgViewModel.kt similarity index 93% rename from app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeViewModel.kt rename to app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgViewModel.kt index e177de5..73397ba 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanChargePgViewModel.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.mypage.can.charge +package kr.co.vividnext.sodalive.mypage.can.charge.pg import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -9,7 +9,7 @@ import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.mypage.can.CanRepository -class CanChargeViewModel(private val repository: CanRepository) : BaseViewModel() { +class CanChargePgViewModel(private val repository: CanRepository) : BaseViewModel() { private val _canChargesLiveData = MutableLiveData>() val canChargeLiveData: LiveData> get() = _canChargesLiveData diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanResponse.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanResponse.kt similarity index 88% rename from app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanResponse.kt rename to app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanResponse.kt index 4251309..cbfdea1 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanResponse.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/CanResponse.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.mypage.can.charge +package kr.co.vividnext.sodalive.mypage.can.charge.pg import android.os.Parcelable import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/ChargeData.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/ChargeData.kt similarity index 90% rename from app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/ChargeData.kt rename to app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/ChargeData.kt index ec53798..c55ed80 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/ChargeData.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/pg/ChargeData.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.mypage.can.charge +package kr.co.vividnext.sodalive.mypage.can.charge.pg import com.google.gson.annotations.SerializedName import kr.co.vividnext.sodalive.mypage.can.payment.PaymentGateway diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentActivity.kt index 3cfdfce..156dda0 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentActivity.kt @@ -23,8 +23,8 @@ import kr.co.vividnext.sodalive.databinding.ActivityCanPaymentBinding import kr.co.vividnext.sodalive.extensions.fontSpan import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.mypage.auth.BootpayResponse -import kr.co.vividnext.sodalive.mypage.can.charge.CanResponse -import kr.co.vividnext.sodalive.mypage.can.charge.VerifyRequest +import kr.co.vividnext.sodalive.mypage.can.charge.pg.CanResponse +import kr.co.vividnext.sodalive.mypage.can.charge.pg.VerifyRequest import kr.co.vividnext.sodalive.mypage.can.status.CanStatusActivity import org.koin.android.ext.android.inject diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentViewModel.kt index ca825ce..1968663 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/can/payment/CanPaymentViewModel.kt @@ -8,8 +8,8 @@ import io.reactivex.rxjava3.schedulers.Schedulers import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.mypage.can.CanRepository -import kr.co.vividnext.sodalive.mypage.can.charge.ChargeRequest -import kr.co.vividnext.sodalive.mypage.can.charge.VerifyRequest +import kr.co.vividnext.sodalive.mypage.can.charge.pg.ChargeRequest +import kr.co.vividnext.sodalive.mypage.can.charge.pg.VerifyRequest class CanPaymentViewModel(private val repository: CanRepository) : BaseViewModel() { diff --git a/app/src/main/res/layout/activity_can_charge.xml b/app/src/main/res/layout/activity_can_charge.xml index cc89b85..4a4d05c 100644 --- a/app/src/main/res/layout/activity_can_charge.xml +++ b/app/src/main/res/layout/activity_can_charge.xml @@ -1,20 +1,29 @@ - + android:orientation="vertical"> - + - + + + diff --git a/app/src/main/res/layout/fragment_can_charge_pg.xml b/app/src/main/res/layout/fragment_can_charge_pg.xml new file mode 100644 index 0000000..7a37a39 --- /dev/null +++ b/app/src/main/res/layout/fragment_can_charge_pg.xml @@ -0,0 +1,16 @@ + + + + + +