diff --git a/app/src/main/java/com/example/bondoyap/service/LocationManager.kt b/app/src/main/java/com/example/bondoyap/service/LocationManager.kt index a6f4215e2ca9a7f8a6adc0cc56d83e37b9156d9f..3196f9aa9dbadf66b1e00ea7082b75c1a8e45cbf 100644 --- a/app/src/main/java/com/example/bondoyap/service/LocationManager.kt +++ b/app/src/main/java/com/example/bondoyap/service/LocationManager.kt @@ -1,57 +1,60 @@ package com.example.bondoyap.service +import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.location.Location +import android.util.Log import androidx.core.app.ActivityCompat import androidx.fragment.app.FragmentActivity import com.google.android.gms.location.LocationServices class LocationManager { companion object { + fun haveLocationPermission(context: Context): Boolean { + return (ActivityCompat.checkSelfPermission( + context, android.Manifest.permission.ACCESS_FINE_LOCATION + ) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( + context, android.Manifest.permission.ACCESS_COARSE_LOCATION + ) == PackageManager.PERMISSION_GRANTED) + } + fun askLocationPermission(context: Context, activity: FragmentActivity) { - if ( - ActivityCompat.checkSelfPermission( - context, - android.Manifest.permission.ACCESS_FINE_LOCATION - ) - != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - context, - android.Manifest.permission.ACCESS_COARSE_LOCATION - ) - != PackageManager.PERMISSION_GRANTED - ) { + if (!haveLocationPermission(context)) { ActivityCompat.requestPermissions( - activity, - arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 100 + activity, arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 100 ) } } + @SuppressLint("MissingPermission") fun getLocation(context: Context): Location? { var location: Location? = null - if ( - ActivityCompat.checkSelfPermission( - context, - android.Manifest.permission.ACCESS_FINE_LOCATION - ) - != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission( - context, - android.Manifest.permission.ACCESS_COARSE_LOCATION - ) - != PackageManager.PERMISSION_GRANTED - ) { + if (haveLocationPermission(context)) { val fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context) + Log.d("LocationManager", "Getting last location") + @SuppressLint("MissingPermission") val locationProvider = fusedLocationProviderClient.lastLocation locationProvider.addOnSuccessListener { if (it != null) { + Log.d( + "LocationManager", + "Updating location to latitude: ${it.latitude} and longitude: ${it.longitude}" + ) location = it } } } + + if (location == null) { + Log.d("LocationManager", "Location is null") + } else { + Log.d( + "LocationManager", + "Get location at latitude: ${location?.latitude} and longitude: ${location?.longitude}" + ) + } return location } } 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 bc90911cc9f011ee522fcbd397ed1475e4bb62f8..7b0656c38ac6fca410b7c1334d531569e852bff3 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 @@ -12,8 +12,6 @@ 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.FusedLocationProviderClient -import com.google.android.gms.location.LocationServices import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -30,10 +28,6 @@ class AddTransactionsFragment : Fragment() { TransactionsViewModelFactory((requireContext().applicationContext as TransactionsApplication).repository) } - private lateinit var fusedLocationProviderClient: FusedLocationProviderClient - private lateinit var latitude: String - private lateinit var longitude: String - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -50,9 +44,6 @@ class AddTransactionsFragment : Fragment() { adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item) binding.spinnerKategori.adapter = adapter - fusedLocationProviderClient = - LocationServices.getFusedLocationProviderClient(requireContext()) - LocationManager.askLocationPermission(requireContext(), requireActivity()) binding.buttonSimpan.setOnClickListener { @@ -78,14 +69,14 @@ class AddTransactionsFragment : Fragment() { LocationManager.askLocationPermission(requireContext(), requireActivity()) val location = LocationManager.getLocation(requireContext()) - var longitude: String = "" - var latitude: String = "" + var longitude = "" + var latitude = "" location?.let { it1 -> longitude = it1.longitude.toString() latitude = it1.latitude.toString() } - val transaction: Transactions = Transactions( + val transaction = Transactions( judul = judul, nominal = nominal, isPemasukan = isPemasukan, 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 f72aaec034e554588d337ae3b8a2d80d30291e71..ee35e51260c859f8795e6c94c1dd13f4127c68e7 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 @@ -2,7 +2,6 @@ package com.example.bondoyap.ui.transactions import android.R import android.app.AlertDialog -import android.content.pm.PackageManager import android.location.Address import android.location.Geocoder import android.os.Bundle @@ -14,14 +13,12 @@ import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.Toast -import androidx.core.app.ActivityCompat import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels 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 @@ -39,8 +36,6 @@ class EditTransactionsFragment : Fragment() { TransactionsViewModelFactory((requireContext().applicationContext as TransactionsApplication).repository) } - private lateinit var fusedLocationProviderClient: FusedLocationProviderClient - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -48,7 +43,7 @@ class EditTransactionsFragment : Fragment() { ): View { _binding = FragmentEditTransactionsBinding.inflate(inflater, container, false) - var tanggal: String = "" + var tanggal = "" var latitude = "" var longitude = "" @@ -71,7 +66,8 @@ class EditTransactionsFragment : Fragment() { val originalTransaction: Transactions = transactionsViewModel.get(transactionId) binding.editTextJudul.text = SpannableStringBuilder(originalTransaction.judul) - binding.editTextNominal.text = SpannableStringBuilder(originalTransaction.nominal.toBigDecimal().toString()) + binding.editTextNominal.text = + SpannableStringBuilder(originalTransaction.nominal.toBigDecimal().toString()) if (originalTransaction.isPemasukan) { binding.spinnerKategori.setSelection(categories.indexOf(pemasukan)) @@ -101,31 +97,13 @@ class EditTransactionsFragment : Fragment() { } } - fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext()) - - if ( - ActivityCompat.checkSelfPermission(requireContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) - != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission(requireContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) - != PackageManager.PERMISSION_GRANTED - ) { - ActivityCompat.requestPermissions(requireActivity(), - arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 100 - ) - } + LocationManager.askLocationPermission(requireContext(), requireActivity()) binding.checkboxUpdateLokasi.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { - if ( - ActivityCompat.checkSelfPermission(requireContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) - != PackageManager.PERMISSION_GRANTED - && ActivityCompat.checkSelfPermission(requireContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) - != PackageManager.PERMISSION_GRANTED - ) { - ActivityCompat.requestPermissions(requireActivity(), - arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 100 - ) + if (!LocationManager.haveLocationPermission(requireContext())) { binding.checkboxUpdateLokasi.isChecked = false + LocationManager.askLocationPermission(requireContext(), requireActivity()) } } } @@ -148,7 +126,7 @@ class EditTransactionsFragment : Fragment() { 0.0 } - val transaction: Transactions = Transactions( + val transaction = Transactions( judul = judul, nominal = nominal, isPemasukan = isPemasukan, @@ -159,15 +137,14 @@ class EditTransactionsFragment : Fragment() { ) if (binding.checkboxUpdateLokasi.isChecked) { - val location = fusedLocationProviderClient.lastLocation - location.addOnSuccessListener { - if (it != null) { - latitude = it.latitude.toString() - longitude = it.longitude.toString() - - transaction.latitude = latitude - transaction.longitude = longitude - } + 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 } } @@ -200,14 +177,18 @@ class EditTransactionsFragment : Fragment() { } else { binding.spinnerKategori.setSelection(categories.indexOf(pengeluaran)) } - Toast.makeText(requireContext(), "Transaksi berhasil diperbarui", Toast.LENGTH_SHORT).show() + Toast.makeText( + requireContext(), + "Transaksi berhasil diperbarui", + Toast.LENGTH_SHORT + ).show() } } binding.buttonHapus.setOnClickListener { - val transaction: Transactions = Transactions( + val transaction = Transactions( judul = "", nominal = 0.0, isPemasukan = false, @@ -218,7 +199,8 @@ class EditTransactionsFragment : Fragment() { showConfirmationDialog("Hapus", "Apakah Anda yakin ingin menghapus transaksi ini?") { transactionsViewModel.delete(transaction) findNavController().navigate(com.example.bondoyap.R.id.navigation_transactions) - Toast.makeText(requireContext(), "Transaksi berhasil dihapus", Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), "Transaksi berhasil dihapus", Toast.LENGTH_SHORT) + .show() } }