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