From d16fa7d008362e207522de591ce6aaa859424403 Mon Sep 17 00:00:00 2001 From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com> Date: Wed, 3 Apr 2024 18:40:37 +0700 Subject: [PATCH] fix: transaction location async issue, but not modular --- .../bondoyap/ui/scanner/ScanResultFragment.kt | 56 +++++++++++++------ .../transactions/AddTransactionsFragment.kt | 56 +++++++++++++------ .../transactions/EditTransactionsFragment.kt | 24 +++++--- 3 files changed, 95 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt b/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt index f83ea07..0c79133 100644 --- a/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt +++ b/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt @@ -1,5 +1,6 @@ package com.example.bondoyap.ui.scanner +import android.annotation.SuppressLint import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -20,6 +21,7 @@ import com.example.bondoyap.ui.transactions.TransactionsApplication import com.example.bondoyap.ui.transactions.TransactionsViewModel import com.example.bondoyap.ui.transactions.TransactionsViewModelFactory import com.example.bondoyap.ui.transactions.data.Transactions +import com.google.android.gms.location.LocationServices import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -95,23 +97,43 @@ class ScanResultFragment : Fragment() { LocationManager.askLocationPermission(requireContext(), requireActivity()) Log.d("ScanResult", "Getting location") - val location = LocationManager.getLocation(requireContext()) - var longitude = "" - var latitude = "" - location?.let { it1 -> - longitude = it1.longitude.toString() - latitude = it1.latitude.toString() - } - Log.d("ScanResult", "Saving note on database") - val transaction = Transactions( - judul = "Scanner_${title}", - nominal = value, - isPemasukan = false, - tanggal = currentDate, - longitude = longitude, - latitude = latitude - ) - transactionsViewModel.upsert(transaction) + if (LocationManager.haveLocationPermission(requireContext())) { + Log.d("ScanResult", "Saving note on database") + Log.d("LocationManager", "Getting last location") + val fusedLocationProviderClient = + LocationServices.getFusedLocationProviderClient(requireContext()) + + @SuppressLint("MissingPermission") + val locationProvider = fusedLocationProviderClient.lastLocation + locationProvider.addOnSuccessListener { + if (it != null) { + Log.d( + "LocationManager", + "Updating location to latitude: ${it.latitude} and longitude: ${it.longitude}" + ) + val transaction = Transactions( + judul = "Scanner_${title}", + nominal = value, + isPemasukan = false, + tanggal = currentDate, + longitude = it.longitude.toString(), + latitude = it.latitude.toString() + ) + transactionsViewModel.upsert(transaction) + } + } + } else { + Log.d("ScanResult", "Saving note on database") + val transaction = Transactions( + judul = "Scanner_${title}", + nominal = value, + isPemasukan = false, + tanggal = currentDate, + longitude = "", + latitude = "" + ) + transactionsViewModel.upsert(transaction) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt index 7b0656c..3179e81 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/AddTransactionsFragment.kt @@ -1,7 +1,9 @@ package com.example.bondoyap.ui.transactions import android.R +import android.annotation.SuppressLint import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -12,6 +14,7 @@ import androidx.fragment.app.viewModels import com.example.bondoyap.databinding.FragmentAddTransactionsBinding import com.example.bondoyap.service.LocationManager import com.example.bondoyap.ui.transactions.data.Transactions +import com.google.android.gms.location.LocationServices import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -68,23 +71,44 @@ class AddTransactionsFragment : Fragment() { } LocationManager.askLocationPermission(requireContext(), requireActivity()) - val location = LocationManager.getLocation(requireContext()) - var longitude = "" - var latitude = "" - location?.let { it1 -> - longitude = it1.longitude.toString() - latitude = it1.latitude.toString() - } - val transaction = Transactions( - judul = judul, - nominal = nominal, - isPemasukan = isPemasukan, - tanggal = currentDate, - longitude = longitude, - latitude = latitude - ) - transactionsViewModel.upsert(transaction) + if (LocationManager.haveLocationPermission(requireContext())) { + Log.d("ScanResult", "Saving note on database") + Log.d("LocationManager", "Getting last location") + val fusedLocationProviderClient = + LocationServices.getFusedLocationProviderClient(requireContext()) + + @SuppressLint("MissingPermission") + val locationProvider = fusedLocationProviderClient.lastLocation + locationProvider.addOnSuccessListener { + if (it != null) { + Log.d( + "LocationManager", + "Updating location to latitude: ${it.latitude} and longitude: ${it.longitude}" + ) + val transaction = Transactions( + judul = judul, + nominal = nominal, + isPemasukan = isPemasukan, + tanggal = currentDate, + longitude = it.longitude.toString(), + latitude = it.latitude.toString() + ) + transactionsViewModel.upsert(transaction) + } + } + } else { + Log.d("ScanResult", "Saving note on database") + val transaction = Transactions( + judul = judul, + nominal = nominal, + isPemasukan = isPemasukan, + tanggal = currentDate, + longitude = "", + latitude = "" + ) + transactionsViewModel.upsert(transaction) + } Toast.makeText(requireContext(), "Transaksi berhasil disimpan", Toast.LENGTH_SHORT) .show() diff --git a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt index ee35e51..d0b9e61 100644 --- a/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt +++ b/app/src/main/java/com/example/bondoyap/ui/transactions/EditTransactionsFragment.kt @@ -1,6 +1,7 @@ package com.example.bondoyap.ui.transactions import android.R +import android.annotation.SuppressLint import android.app.AlertDialog import android.location.Address import android.location.Geocoder @@ -19,6 +20,8 @@ import androidx.navigation.fragment.findNavController import com.example.bondoyap.databinding.FragmentEditTransactionsBinding import com.example.bondoyap.service.LocationManager import com.example.bondoyap.ui.transactions.data.Transactions +import com.google.android.gms.location.FusedLocationProviderClient +import com.google.android.gms.location.LocationServices import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch @@ -36,6 +39,8 @@ class EditTransactionsFragment : Fragment() { TransactionsViewModelFactory((requireContext().applicationContext as TransactionsApplication).repository) } + private lateinit var fusedLocationProviderClient: FusedLocationProviderClient + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -98,6 +103,7 @@ class EditTransactionsFragment : Fragment() { } LocationManager.askLocationPermission(requireContext(), requireActivity()) + fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext()) binding.checkboxUpdateLokasi.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { @@ -137,14 +143,16 @@ class EditTransactionsFragment : Fragment() { ) if (binding.checkboxUpdateLokasi.isChecked) { - LocationManager.askLocationPermission(requireContext(), requireActivity()) - val location = LocationManager.getLocation(requireContext()) - location?.let { it1 -> - longitude = it1.longitude.toString() - latitude = it1.latitude.toString() - - transaction.latitude = latitude - transaction.longitude = longitude + @SuppressLint("MissingPermission") + val location = fusedLocationProviderClient.lastLocation + location.addOnSuccessListener { loc -> + if (loc != null) { + latitude = loc.latitude.toString() + longitude = loc.longitude.toString() + + transaction.latitude = latitude + transaction.longitude = longitude + } } } -- GitLab