From b843fcf4caa4614fd4fc89caf4f6c177e33edb84 Mon Sep 17 00:00:00 2001 From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com> Date: Wed, 3 Apr 2024 10:42:41 +0700 Subject: [PATCH] refactor: location manager --- .../bondoyap/service/LocationManager.kt | 58 ++++++++++++++ .../transactions/AddTransactionsFragment.kt | 80 ++++++------------- 2 files changed, 83 insertions(+), 55 deletions(-) create mode 100644 app/src/main/java/com/example/bondoyap/service/LocationManager.kt diff --git a/app/src/main/java/com/example/bondoyap/service/LocationManager.kt b/app/src/main/java/com/example/bondoyap/service/LocationManager.kt new file mode 100644 index 0000000..a6f4215 --- /dev/null +++ b/app/src/main/java/com/example/bondoyap/service/LocationManager.kt @@ -0,0 +1,58 @@ +package com.example.bondoyap.service + +import android.content.Context +import android.content.pm.PackageManager +import android.location.Location +import androidx.core.app.ActivityCompat +import androidx.fragment.app.FragmentActivity +import com.google.android.gms.location.LocationServices + +class LocationManager { + companion object { + 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 + ) { + ActivityCompat.requestPermissions( + activity, + arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), 100 + ) + } + } + + 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 + ) { + val fusedLocationProviderClient = + LocationServices.getFusedLocationProviderClient(context) + val locationProvider = fusedLocationProviderClient.lastLocation + locationProvider.addOnSuccessListener { + if (it != null) { + location = it + } + } + } + return location + } + } +} \ 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 6463fa0..bc90911 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,23 +1,16 @@ package com.example.bondoyap.ui.transactions import android.R -import android.content.Context -import android.content.IntentFilter -import android.content.pm.PackageManager -import android.os.Build import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ArrayAdapter import android.widget.Toast -import androidx.annotation.RequiresApi -import androidx.core.app.ActivityCompat import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels -import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.example.bondoyap.databinding.FragmentAddTransactionsBinding -import com.example.bondoyap.service.api.Constants.ACTION_RANDOMIZE_TRANSACTIONS +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 @@ -42,9 +35,9 @@ class AddTransactionsFragment : Fragment() { private lateinit var longitude: String override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? ): View { _binding = FragmentAddTransactionsBinding.inflate(inflater, container, false) @@ -57,18 +50,10 @@ class AddTransactionsFragment : Fragment() { adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item) binding.spinnerKategori.adapter = adapter - fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireContext()) + 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.buttonSimpan.setOnClickListener { val isPemasukan: Boolean = when (binding.spinnerKategori.selectedItem.toString()) { @@ -91,42 +76,27 @@ class AddTransactionsFragment : Fragment() { 0.0 } - val location = fusedLocationProviderClient.lastLocation - location.addOnSuccessListener { - if(it != null) { - latitude = it.latitude.toString() - longitude = it.longitude.toString() - - val transaction: Transactions = Transactions( - judul = judul, - nominal = nominal, - isPemasukan = isPemasukan, - tanggal = currentDate, - longitude = longitude, - latitude = latitude - ) - transactionsViewModel.upsert(transaction) - } + LocationManager.askLocationPermission(requireContext(), requireActivity()) + val location = LocationManager.getLocation(requireContext()) + var longitude: String = "" + var latitude: String = "" + location?.let { it1 -> + longitude = it1.longitude.toString() + latitude = it1.latitude.toString() } - 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 - ) { - val transaction: Transactions = Transactions( - judul = judul, - nominal = nominal, - isPemasukan = isPemasukan, - tanggal = currentDate, - longitude = "", - latitude = "" - ) - transactionsViewModel.upsert(transaction) - } + val transaction: Transactions = Transactions( + judul = judul, + nominal = nominal, + isPemasukan = isPemasukan, + tanggal = currentDate, + longitude = longitude, + latitude = latitude + ) + transactionsViewModel.upsert(transaction) - Toast.makeText(requireContext(), "Transaksi berhasil disimpan", Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), "Transaksi berhasil disimpan", Toast.LENGTH_SHORT) + .show() binding.editTextJudul.text.clear() binding.editTextNominal.text.clear() -- GitLab