Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions app/src/main/java/com/stable/scoi/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.stable.scoi

import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
}
}
4 changes: 2 additions & 2 deletions app/src/main/java/com/stable/scoi/di/RetrofitModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import android.util.Log
import com.google.gson.GsonBuilder
import com.google.gson.JsonParser
import com.google.gson.JsonSyntaxException
import com.stable.scoi.extension.isJsonArray
import com.stable.scoi.extension.isJsonObject
import com.stable.scoi.extention.isJsonArray
import com.stable.scoi.extention.isJsonObject
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/stable/scoi/extention/String.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.stable.scoi.extention

fun String?.isJsonObject(): Boolean = this?.startsWith("{") == true && this.endsWith("}")
fun String?.isJsonArray(): Boolean = this?.startsWith("[") == true && this.endsWith("]")
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.stable.scoi.presentation

import android.os.Bundle
import androidx.activity.viewModels
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.stable.scoi.R
import com.stable.scoi.databinding.ActivityMainBinding
import com.stable.scoi.presentation.base.BaseActivity
import com.stable.scoi.presentation.base.TransferFragment
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch

Expand All @@ -16,6 +18,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainActivityUiState, Main
override val viewModel: MainActivityViewModel by viewModels()
private lateinit var navController: NavController


override fun initView() {
binding.apply {
vm = viewModel
Expand Down Expand Up @@ -44,8 +47,9 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainActivityUiState, Main
supportFragmentManager.findFragmentById(R.id.fragment_container_view) as NavHostFragment
navController = navHostFragment.navController
navController.addOnDestinationChangedListener { _, destination, _ ->
//changeBottomNavigationView(destination.id)
//TODO navController.navigate(R.id.calendarFragment) ์ด๋Ÿฐ์‹์œผ๋กœ navigation ์ด๋™
// when (destination.id) {
//
// }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.stable.scoi.presentation.base

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.stable.scoi.databinding.FragmentAssetSymbolBottomsheetBinding
import com.stable.scoi.databinding.FragmentExchangeBottomsheetBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlin.getValue

@AndroidEntryPoint
class AssetSymbolBottomSheet: BottomSheetDialogFragment() {
lateinit var binding: FragmentAssetSymbolBottomsheetBinding
private val viewModel: TransferViewModel by activityViewModels()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentAssetSymbolBottomsheetBinding.inflate(inflater,container,false)
return binding.root
}

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

binding.bottomsheetAssetSymbolUSDTLL.setOnClickListener {
viewModel.setAssetSymbolUSDT()
viewModel.eventCancel()
dismiss()
}

binding.bottomsheetAssetSymbolUSDCLL.setOnClickListener {
viewModel.setAssetSymbolUSTC()
viewModel.eventCancel()
dismiss()
}

binding.bottomsheetAssetSymbolCloseIv.setOnClickListener {
viewModel.eventCancel()
dismiss()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import com.stable.scoi.R
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ abstract class BaseFragment<B : ViewDataBinding, STATE: UiState, EVENT: UiEvent,
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, onBackPressedCallback)
initView()
initStates()


}

private val onBackPressedCallback = object : OnBackPressedCallback(true) {
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/com/stable/scoi/presentation/base/Exchange.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.stable.scoi.presentation.base

sealed class Exchange {
object Upbit: Exchange()
object Bithumb: Exchange()
object Binance: Exchange()
object Null: Exchange()
object Unselected: Exchange()
}

sealed class AssetSymbol {
object USDT: AssetSymbol()
object USDC: AssetSymbol()
object Null: AssetSymbol()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.stable.scoi.presentation.base

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.stable.scoi.databinding.FragmentExchangeBottomsheetBinding
import dagger.hilt.android.AndroidEntryPoint
import kotlin.getValue

@AndroidEntryPoint
class ExchangeBottomSheet : BottomSheetDialogFragment() {

lateinit var binding: FragmentExchangeBottomsheetBinding

private val viewModel: TransferViewModel by activityViewModels()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentExchangeBottomsheetBinding.inflate(inflater, container, false)
return binding.root
}

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

binding.bottomsheetExchangeUpbitLl.setOnClickListener {
viewModel.setExchangeUpbit()
viewModel.eventCancel()
dismiss()
}

binding.bottomsheetExchangeBithumbLl.setOnClickListener {
viewModel.setExchangeBithumb()
viewModel.eventCancel()
dismiss()
}

binding.bottomsheetExchangeBinanceLl.setOnClickListener {
viewModel.setExchangeBinance()
viewModel.eventCancel()
dismiss()
}

binding.bottomsheetExchangeCloseIv.setOnClickListener {
viewModel.setExchange()
viewModel.eventCancel()
dismiss()
}
}
}
14 changes: 14 additions & 0 deletions app/src/main/java/com/stable/scoi/presentation/base/Receiver.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.stable.scoi.presentation.base

data class Receiver(
var receiverName: String? = null,
var receiverAddress: String? = null,
var receiverType: ReceiverType = ReceiverType.Null
)

sealed class ReceiverType {
object Individual: ReceiverType()
object Corporation: ReceiverType()
object Null: ReceiverType()
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.stable.scoi.presentation.base

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.stable.scoi.databinding.FragmentRecieverTypeBottomsheetBinding
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class RecieverTypeBottomSheet : BottomSheetDialogFragment() {
lateinit var binding : FragmentRecieverTypeBottomsheetBinding
private val viewModel : TransferViewModel by activityViewModels()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentRecieverTypeBottomsheetBinding.inflate(inflater, container, false)
return binding.root
}

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

binding.bottomsheetRecievertypeIndividualLl.setOnClickListener {
viewModel.setRecieverTypeIndividual()
viewModel.eventCancel()
dismiss()
}

binding.bottomsheetRecievertypeCorporationLl.setOnClickListener {
viewModel.setRecieverTypeCorporation()
viewModel.eventCancel()
dismiss()
}

binding.bottomsheetRecievertypeCloseIv.setOnClickListener {
dismiss()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.stable.scoi.presentation.base

import android.util.Log
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import com.stable.scoi.R
import com.stable.scoi.databinding.FragmentTransferAmountBinding
import com.stable.scoi.databinding.FragmentTransferBinding
import com.stable.scoi.databinding.FragmentTransferBinding.inflate
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class TransferAmountFragment : BaseFragment<FragmentTransferAmountBinding, TransferState, TransferEvent, TransferViewModel>(
FragmentTransferAmountBinding::inflate
) {
override val viewModel: TransferViewModel by activityViewModels()

override fun initView() {
//input
binding.TransferAmountCoinTypeChangeIV.setOnClickListener {
viewModel.onAssetSymbolClicked()
}


//output
binding.TransferAmountReceiverNameTV.text = viewModel.receiver.value.receiverName.toString()

val address = viewModel.receiver.value.receiverAddress.toString()
binding.TransferAmountReceiverAddressTV.text = viewModel.addressLineChange(address)

when (viewModel.exchangeType.value) {
Exchange.Upbit -> binding.TransferAmountReceieverExchangeIV.setImageResource(R.drawable.upbit_logo)
Exchange.Bithumb -> binding.TransferAmountReceieverExchangeIV.setImageResource(R.drawable.bithumb_logo)
Exchange.Binance -> binding.TransferAmountReceieverExchangeIV.setImageResource(R.drawable.binance_logo)
else -> Unit
}

viewModel.assetSymbolEvent.observe(viewLifecycleOwner) { event ->
when (event) {
TransferEvent.Submit -> {
AssetSymbolBottomSheet().show(
parentFragmentManager,
"BottomSheet"
)
}
else -> Unit
}
}

viewModel.assetSymbolType.observe(viewLifecycleOwner) { assetSymbol ->
when (assetSymbol) {
AssetSymbol.USDT -> {
binding.TransferAmountCoinTypeTV.text = "USDT"
}
AssetSymbol.USDC -> {
binding.TransferAmountCoinTypeTV.text = "USDC"
}
else -> Unit
}
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.stable.scoi.presentation.base

sealed class TransferEvent : UiEvent {
object Submit: TransferEvent()
object Cancel: TransferEvent()
object Null: TransferEvent()
}
Loading