diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt index 772201574255e14ac9de25bf7d68a7126f32f0eb..160e19e1f3d52f4e8fdb410d86fb42a64f580a06 100644 --- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt +++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionFragment.kt @@ -92,6 +92,7 @@ class TransactionFragment : Fragment() { } fun onTransactionClicked(transactionId: Int) { + // Handle transaction click transactionViewModel.onTransactionClicked(transactionId) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt index c1676ecc42888a2e94c8e1c2fa4ec03dbd7d9a85..ad71dd67949945468edc4a9d0ae5e377e844b8d7 100644 --- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt +++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transaction/TransactionViewModel.kt @@ -84,11 +84,6 @@ class TransactionViewModel @Inject constructor( val growth: LiveData<Long> get() = _growth - // Transaction detail (TransactionDetailViewModel) - private val _transactionById: MutableLiveData<Transaction> = MutableLiveData() - val transactionById: LiveData<Transaction> - get() = _transactionById - // Scan data (ScanViewModel) private val _atomicTransaction: MutableLiveData<ScanResult> = MutableLiveData() val atomicTransaction: LiveData<ScanResult> @@ -104,16 +99,6 @@ class TransactionViewModel @Inject constructor( val addTransactionStatus: LiveData<Boolean> get() = _addTransactionStatus - // Delete transaction state (DeleteTransactionViewModel) - private val _deleteTransactionStatus: MutableLiveData<Boolean> = MutableLiveData() - val deleteTransactionStatus: LiveData<Boolean> - get() = _deleteTransactionStatus - - // Update transaction state (UpdateTransactionViewModel) - private val _updateTransactionStatus: MutableLiveData<Boolean> = MutableLiveData() - val updateTransactionStatus: LiveData<Boolean> - get() = _updateTransactionStatus - // Camera state ?? (ScanTransactionViewModel) private val _cameraStatus: MutableLiveData<Boolean> = MutableLiveData() val cameraStatus: LiveData<Boolean> @@ -155,23 +140,7 @@ class TransactionViewModel @Inject constructor( } } - // Delete transaction (TransactionDetailViewModel) - fun deleteTransaction(transaction: Transaction) { - viewModelScope.launch { - transactionDatabaseRepoImpl.deleteTransaction(transaction) - _deleteTransactionStatus.postValue(true) - } - } - - // Update transaction (TransactionDetailViewModel) - fun updateTransaction(transaction: Transaction) { - viewModelScope.launch { - transactionDatabaseRepoImpl.updateTransaction(transaction) - _updateTransactionStatus.postValue(true) - } - } - - // Get transaction (TransactionDetailViewModel) + // Get transaction fun getTransactions(type: String) { var sum = 0L viewModelScope.launch { @@ -197,14 +166,6 @@ class TransactionViewModel @Inject constructor( } } - // Get transaction by id (TransactionDetailViewModel) - fun getTransactionById(id: Int){ - viewModelScope.launch { - val response = transactionDatabaseRepoImpl.getTransactionById(id) - _transactionById.postValue(response) - } - } - // Get all date fun getAllDate(){ viewModelScope.launch { @@ -356,16 +317,6 @@ class TransactionViewModel @Inject constructor( _addTransactionStatus.postValue(false) } - // Reset delete transaction state (TransactionDetailViewModel) - fun resetDeleteTransactionStatus(){ - _deleteTransactionStatus.postValue(false) - } - - // Reset update transaction state (TransactionDetailViewModel) - fun resetUpdateTransactionStatus(){ - _updateTransactionStatus.postValue(false) - } - // Change new state (NewTransactionViewModel) fun changeAddStatus(status: Boolean){ _addTransactionStatus.postValue(status) diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailViewModel.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailViewModel.kt new file mode 100644 index 0000000000000000000000000000000000000000..b43ae44d49c48fa76aab9f8e7b53a91ce70968fc --- /dev/null +++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailViewModel.kt @@ -0,0 +1,76 @@ +package com.example.transactionapp.ui.screen.mainmenu.transactionDetail + +import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.transactionapp.domain.db.model.Transaction +import com.example.transactionapp.domain.db.repo.TransactionDatabaseRepoImpl +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class TransactionDetailViewModel @Inject constructor( + private val transactionDatabaseRepoImpl: TransactionDatabaseRepoImpl +): ViewModel() { + // Transaction detail (TransactionDetailViewModel) + private val _transactionById: MutableLiveData<Transaction> = MutableLiveData() + val transactionById: LiveData<Transaction> + get() = _transactionById + + // Get transaction by id (TransactionDetailViewModel) + fun getTransactionById(id: Int){ + viewModelScope.launch { + val response = transactionDatabaseRepoImpl.getTransactionById(id) + _transactionById.postValue(response) + } + } + + // Add transaction state (NewTransactionVideModel) + private val _addTransactionStatus: MutableLiveData<Boolean> = MutableLiveData() + val addTransactionStatus: LiveData<Boolean> + get() = _addTransactionStatus + + // Delete transaction state (TransactionDetailViewModel) + private val _deleteTransactionStatus: MutableLiveData<Boolean> = MutableLiveData() + val deleteTransactionStatus: LiveData<Boolean> + get() = _deleteTransactionStatus + + // Update transaction state (TransactionDetailViewModel) + private val _updateTransactionStatus: MutableLiveData<Boolean> = MutableLiveData() + val updateTransactionStatus: LiveData<Boolean> + get() = _updateTransactionStatus + + // Change new state (NewTransactionViewModel) + fun changeAddStatus(status: Boolean){ + _addTransactionStatus.postValue(status) + } + + // Delete transaction (TransactionDetailViewModel) + fun deleteTransaction(transaction: Transaction) { + viewModelScope.launch { + transactionDatabaseRepoImpl.deleteTransaction(transaction) + _deleteTransactionStatus.postValue(true) + } + } + + // Update transaction (TransactionDetailViewModel) + fun updateTransaction(transaction: Transaction) { + viewModelScope.launch { + transactionDatabaseRepoImpl.updateTransaction(transaction) + _updateTransactionStatus.postValue(true) + } + } + + // Reset delete transaction state (TransactionDetailViewModel) + fun resetDeleteTransactionStatus(){ + _deleteTransactionStatus.postValue(false) + } + + // Reset update transaction state (TransactionDetailViewModel) + fun resetUpdateTransactionStatus(){ + _updateTransactionStatus.postValue(false) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt index b8565a061332d5682e5b0e8ed86e4856df7f90c4..dad7c0c8e80ead757f51af7f6d495b6b43c9b29c 100644 --- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt +++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/transactionDetail/TransactionDetailsFragment.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.net.Uri import android.os.Build import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -17,34 +16,28 @@ import com.example.transactionapp.databinding.FragmentTransactionDetailsBinding import com.example.transactionapp.domain.db.model.Transaction import com.example.transactionapp.ui.viewmodel.location.LocationModel import com.example.transactionapp.ui.viewmodel.location.LocationViewModel -import com.example.transactionapp.ui.screen.mainmenu.transaction.TransactionViewModel import com.example.transactionapp.utils.changeDateTypeToStandardDateLocal import kotlinx.coroutines.flow.MutableStateFlow class TransactionDetailsFragment : Fragment() { - - private val db : TransactionViewModel by activityViewModels() + private val transactionDetailViewModel : TransactionDetailViewModel by activityViewModels() private val locationViewModel: LocationViewModel by activityViewModels() private val locationData = MutableStateFlow<LocationModel?>(null) - private lateinit var locationAdapter: LocationAdapter - companion object { - const val ARG_TRANSACTION_ID = "transaction_id" - } - @RequiresApi(Build.VERSION_CODES.S) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { + // Bind layout using layout binding val binding = FragmentTransactionDetailsBinding.inflate(layoutInflater) // Get an instance of transaction from transaction id argument val transactionId = TransactionDetailsFragmentArgs.fromBundle(requireArguments()).transactionId - db.getTransactionById(transactionId) - db.transactionById.observe(viewLifecycleOwner) { + transactionDetailViewModel.getTransactionById(transactionId) + transactionDetailViewModel.transactionById.observe(viewLifecycleOwner) { binding.titleInput.setText(it.title) binding.dateInput.text = changeDateTypeToStandardDateLocal(it.createdAt) @@ -68,6 +61,7 @@ class TransactionDetailsFragment : Fragment() { } } + // Handle save transaction binding.saveTransactionButton.setOnClickListener { if (binding.titleInput.text.toString() == ""){ return@setOnClickListener @@ -77,31 +71,32 @@ class TransactionDetailsFragment : Fragment() { } if (binding.titleInput.text.toString() != "" && binding.amountInput.text.toString() != ""){ - db.updateTransaction( + transactionDetailViewModel.updateTransaction( Transaction( id = transactionId, title = binding.titleInput.text.toString(), category = binding.categoryInput.text.toString(), nominal = binding.amountInput.text.toString().toLong(), - createdAt = db.transactionById.value?.createdAt!!, + createdAt = transactionDetailViewModel.transactionById.value?.createdAt!!, location = binding.locationInput.text.toString(), lat = locationData.value?.latitude?:0.0, long = locationData.value?.longitude?:0.0, ) ) - db.changeAddStatus(true) + transactionDetailViewModel.changeAddStatus(true) Toast.makeText(requireContext(), "Transaction Updated", Toast.LENGTH_SHORT).show() requireActivity().onBackPressed() } } + // Handle delete transaction binding.deleteTransactionButton.setOnClickListener { val builder: AlertDialog.Builder = AlertDialog.Builder(requireContext()) builder.setMessage("Are you sure you want to delete this transaction?") .setCancelable(false) .setPositiveButton("Yes") { _, _ -> - db.deleteTransaction(db.transactionById.value!!) - db.changeAddStatus(true) + transactionDetailViewModel.deleteTransaction(transactionDetailViewModel.transactionById.value!!) + transactionDetailViewModel.changeAddStatus(true) Toast.makeText(requireContext(), "Transaction Deleted", Toast.LENGTH_SHORT).show() requireActivity().onBackPressed() } @@ -113,7 +108,7 @@ class TransactionDetailsFragment : Fragment() { } binding.locationInput.setOnClickListener { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=${db.transactionById.value?.lat},${db.transactionById.value?.long}")) + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=${transactionDetailViewModel.transactionById.value?.lat},${transactionDetailViewModel.transactionById.value?.long}")) startActivity(intent) }