diff --git a/app/src/main/java/com/example/transactionapp/domain/db/model/Transaction.kt b/app/src/main/java/com/example/transactionapp/domain/db/model/Transaction.kt index 192c131d05169867e674fab2bd21c4736feb93d3..163ab5a173571aabf740087a71679096a03498e1 100644 --- a/app/src/main/java/com/example/transactionapp/domain/db/model/Transaction.kt +++ b/app/src/main/java/com/example/transactionapp/domain/db/model/Transaction.kt @@ -12,5 +12,7 @@ data class Transaction( val category: String, val nominal: Long, val location: String, + val lat: Double, + val long: Double, val createdAt: Date ) diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/MainActivity.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/MainActivity.kt index 9592fed3b9518fa312a2af18bd32a6f91429d3e3..26ae51f0e36d2bdb28fe5254fa25a90c6e7182ba 100644 --- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/MainActivity.kt +++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/MainActivity.kt @@ -23,6 +23,7 @@ import com.example.transactionapp.ui.screen.mainmenu.fragment.Settings import com.example.transactionapp.ui.screen.mainmenu.fragment.Statistics import com.example.transactionapp.ui.screen.mainmenu.fragment.Transaction import com.example.transactionapp.ui.screen.mainmenu.fragment.TransactionForm +import com.example.transactionapp.ui.viewmodel.location.LocationModel import com.example.transactionapp.ui.viewmodel.location.LocationViewModel import com.example.transactionapp.ui.viewmodel.transaction.TransactionViewModel import com.google.android.gms.location.FusedLocationProviderClient @@ -185,7 +186,11 @@ class MainActivity : AppCompatActivity() { override fun onLocationResult(locationResult: LocationResult) { var lastLocation: Location? = locationResult.lastLocation if (lastLocation != null) { - locationViewModel.setLocation(getCityName(lastLocation.latitude, lastLocation.longitude)) + locationViewModel.setLocation(LocationModel( + locationName = getCityName(lastLocation.latitude, lastLocation.longitude), + latitude = lastLocation.latitude, + longitude = lastLocation.longitude + )) } } } diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/Scan.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/Scan.kt index d0a95efe953749ea4c2133238e4b1fb3d7ecce99..706003a4a3cba3c535fecd4ccd724a7287fe05ef 100644 --- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/Scan.kt +++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/Scan.kt @@ -35,6 +35,7 @@ import com.example.transactionapp.databinding.FragmentScanBinding import com.example.transactionapp.databinding.FragmentTransactionBinding import com.example.transactionapp.domain.db.model.Transaction import com.example.transactionapp.ui.viewmodel.auth.Auth +import com.example.transactionapp.ui.viewmodel.location.LocationModel import com.example.transactionapp.ui.viewmodel.location.LocationViewModel import com.example.transactionapp.ui.viewmodel.model.BillResponseSealed import com.example.transactionapp.ui.viewmodel.transaction.TransactionViewModel @@ -113,7 +114,7 @@ class Scan : Fragment() { when (val data = billValue) { is BillResponseSealed.Success -> { - var locationValue = "" + var locationValue: LocationModel? = null locationViewModel.location.observe(requireActivity()){ locationLambda -> locationValue = locationLambda } @@ -124,7 +125,9 @@ class Scan : Fragment() { nominal = it.price.toLong() * 12000L, category = "Expense", createdAt = Date(), - location = locationValue + location = locationValue!!.locationName, + lat = locationValue!!.latitude, + long = locationValue!!.longitude ) if (!billList.contains(transaction)) { billList.add(transaction) diff --git a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/TransactionForm.kt b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/TransactionForm.kt index aa11482d6c48492a63daf3d1664c601bb70bcc70..011e06630887a781ed26f55eb32c5dcaf1701c18 100644 --- a/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/TransactionForm.kt +++ b/app/src/main/java/com/example/transactionapp/ui/screen/mainmenu/fragment/TransactionForm.kt @@ -28,6 +28,7 @@ import com.example.transactionapp.R import com.example.transactionapp.databinding.FragmentTransactionFormBinding import com.example.transactionapp.domain.db.model.Transaction import com.example.transactionapp.helper.GetRandomData +import com.example.transactionapp.ui.viewmodel.location.LocationModel import com.example.transactionapp.ui.viewmodel.location.LocationViewModel import com.example.transactionapp.ui.viewmodel.transaction.TransactionViewModel import com.example.transactionapp.utils.changeDateTypeToStandardDateLocal @@ -39,6 +40,7 @@ import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.Date @@ -51,6 +53,7 @@ class TransactionForm : Fragment() { private val locationViewModel: LocationViewModel by activityViewModels() private lateinit var receiver: BroadcastReceiver private val getRandomData = GetRandomData() + private val locationData = MutableStateFlow<LocationModel?>(null) @RequiresApi(Build.VERSION_CODES.S) override fun onCreateView( @@ -84,7 +87,8 @@ class TransactionForm : Fragment() { binding.dateInput.text = changeDateTypeToStandardDateLocal(Date()) locationViewModel.location.observe(viewLifecycleOwner){ - binding.locationInput.text = it + binding.locationInput.text = it.locationName + locationData.value = it } @@ -105,7 +109,9 @@ class TransactionForm : Fragment() { category = binding.categoryInput.selectedItem.toString(), nominal = binding.amountInput.text.toString().toLong(), createdAt = Date(), - location = binding.locationInput.text.toString() + location = binding.locationInput.text.toString(), + lat = locationData.value?.latitude?:0.0, + long = locationData.value?.longitude?:0.0, ) ) db.changeAddStatus(true) @@ -185,7 +191,11 @@ class TransactionForm : Fragment() { override fun onLocationResult(locationResult: LocationResult) { var lastLocation: Location? = locationResult.lastLocation if (lastLocation != null) { - locationViewModel.setLocation(getCityName(lastLocation.latitude, lastLocation.longitude)) + locationViewModel.setLocation(LocationModel( + locationName = getCityName(lastLocation.latitude, lastLocation.longitude), + latitude = lastLocation.latitude, + longitude = lastLocation.longitude + )) } } } diff --git a/app/src/main/java/com/example/transactionapp/ui/viewmodel/location/LocationViewModel.kt b/app/src/main/java/com/example/transactionapp/ui/viewmodel/location/LocationViewModel.kt index bc8380909f4fdc31897f6cad7124c7e75218f39e..31da080d4ada7ce958ea5c7068b57cbc5e10b919 100644 --- a/app/src/main/java/com/example/transactionapp/ui/viewmodel/location/LocationViewModel.kt +++ b/app/src/main/java/com/example/transactionapp/ui/viewmodel/location/LocationViewModel.kt @@ -3,13 +3,19 @@ package com.example.transactionapp.ui.viewmodel.location import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +data class LocationModel( + val locationName: String, + val latitude: Double, + val longitude: Double +) + class LocationViewModel: ViewModel() { - private val _location = MutableLiveData<String>() + private val _location = MutableLiveData<LocationModel>() - val location: MutableLiveData<String> + val location: MutableLiveData<LocationModel> get() = _location - fun setLocation(location: String){ + fun setLocation(location: LocationModel){ _location.postValue(location) } diff --git a/app/src/main/java/com/example/transactionapp/ui/viewmodel/transaction/Transaction.kt b/app/src/main/java/com/example/transactionapp/ui/viewmodel/transaction/Transaction.kt index d659de4cbfba44a2f1f726bbbaffce41fbf60949..34f2444d6b5f6755a68108d24c4316eaa6745919 100644 --- a/app/src/main/java/com/example/transactionapp/ui/viewmodel/transaction/Transaction.kt +++ b/app/src/main/java/com/example/transactionapp/ui/viewmodel/transaction/Transaction.kt @@ -86,7 +86,9 @@ class TransactionViewModel @Inject constructor( category = "Expense", nominal = it.nominal, location = it.location, - createdAt = Date() + createdAt = Date(), + lat = it.lat, + long = it.long ) transactionDatabaseRepoImpl.insertTransaction(transaction) } @@ -120,6 +122,7 @@ class TransactionViewModel @Inject constructor( _transaction.postValue(response) response.forEach { + Log.d("TransactionViewModel", "getTransactions: ${it}") if(it.category == "Expense"){ sum -= it.nominal }