From d472952583d72301e7a823c42d45d3dc5effd63f Mon Sep 17 00:00:00 2001
From: Nathania Calista <nathania.calista01@gmail.com>
Date: Mon, 1 Apr 2024 23:32:43 +0700
Subject: [PATCH] feat : get current location

---
 app/build.gradle.kts                          |  3 +
 app/src/main/AndroidManifest.xml              |  3 +
 .../bondoman/activities/AddTransaction.kt     | 79 ++++++++++++++-----
 .../bondoman/activities/EditTransaction.kt    |  9 +--
 .../bondoman/activities/LoginActivity.kt      |  7 +-
 .../bondoman/fragments/TransaksiFragment.kt   |  5 --
 app/src/main/res/drawable/ic_search.xml       |  9 +++
 7 files changed, 77 insertions(+), 38 deletions(-)
 create mode 100644 app/src/main/res/drawable/ic_search.xml

diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index b27415d..1121e4e 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -132,4 +132,7 @@ dependencies {
     implementation("androidx.camera:camera-video:$cameraxVersion")
     implementation("androidx.camera:camera-view:$cameraxVersion")
     implementation("androidx.camera:camera-extensions:$cameraxVersion")
+
+    implementation("com.google.android.gms:play-services-location:17.0.0")
+
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0105dde..7c379c5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,9 @@
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
         android:maxSdkVersion="28" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+
     <application
         android:allowBackup="true"
         android:dataExtractionRules="@xml/data_extraction_rules"
diff --git a/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt b/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt
index d5748fa..1213547 100644
--- a/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt
+++ b/app/src/main/java/com/example/bondoman/activities/AddTransaction.kt
@@ -1,40 +1,43 @@
 package com.example.bondoman.activities
 
+import android.Manifest
 import android.app.Activity
-import android.app.DatePickerDialog
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
-import android.graphics.Color
+import android.content.pm.PackageManager
+import android.location.Geocoder
+import android.location.Location
 import android.os.Bundle
-import android.text.TextUtils
 import android.util.Log
-import android.view.View
 import android.widget.ArrayAdapter
 import android.widget.Button
-import android.widget.DatePicker
 import android.widget.EditText
+import android.widget.Spinner
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
 import com.example.bondoman.R
-import android.widget.Spinner
-import com.example.bondoman.adapter.RecyclerViewAdapter
-import com.example.bondoman.entities.Transaction
 import com.example.bondoman.services.TokenCheckService
-import com.example.bondoman.viewModels.TransactionsViewModel
-import java.util.Calendar
-import java.util.Date
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationServices
+import java.io.IOException
+import java.util.Locale
 
 
 class AddTransaction : AppCompatActivity() {
     private lateinit var tokenExpiredReceiver: BroadcastReceiver
     private lateinit var tokenServiceIntent : Intent
     private var isReceiverRegistered = false
+    private lateinit var fusedLocationClient: FusedLocationProviderClient
+    private lateinit var locationText : EditText
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_add_transaksi)
         tokenServiceIntent= Intent(this, TokenCheckService::class.java)
         startService(tokenServiceIntent)
+        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
 
         tokenExpiredReceiver = object : BroadcastReceiver(){
             override fun onReceive(context: Context?, intent: Intent?) {
@@ -65,11 +68,12 @@ class AddTransaction : AppCompatActivity() {
         spinnerCategory.adapter = adapter
 
         val submitButton : Button = findViewById(R.id.buttonSubmit)
+        locationText = findViewById(R.id.editTextLocation)
         submitButton.setOnClickListener {
             val title = findViewById<EditText>(R.id.editTextTitle).text.toString()
             val category = spinnerCategory.selectedItem.toString()
             val amount = findViewById<EditText>(R.id.editTextAmount).text.toString().toFloatOrNull() ?: 0f
-            val location = findViewById<EditText>(R.id.editTextLocation).text.toString()
+            val location = locationText.text.toString()
 
             val replyIntent = Intent()
             if (title.isEmpty()) {
@@ -83,15 +87,10 @@ class AddTransaction : AppCompatActivity() {
             }
             finish()
         }
-
+        getLastLocation()
     }
 
-    companion object {
-        const val TITLE = "TITLE"
-        const val TYPE = "TYPE"
-        const val AMOUNT = "AMOUNT"
-        const val LOCATION = "LOCATION"
-    }
+
     override fun onStart() {
         super.onStart()
         val filter = IntentFilter("com.example.bondoman.TOKEN_EXPIRED")
@@ -115,4 +114,46 @@ class AddTransaction : AppCompatActivity() {
             isReceiverRegistered = false
         }
     }
+
+    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        if (requestCode == REQUEST_LOCATION_PERMISSION) {
+            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                getLastLocation()
+            }
+        }
+    }
+    private fun getLastLocation() {
+        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
+            fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? ->
+                location?.let {
+                    updateLocationEditTextWithPlaceName(location.latitude, location.longitude)
+                }
+            }
+        }else {
+            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_PERMISSION)
+        }
+    }
+    private fun updateLocationEditTextWithPlaceName(latitude: Double, longitude: Double) {
+        val geocoder = Geocoder(this, Locale.getDefault())
+        try {
+            val addresses = geocoder.getFromLocation(latitude, longitude, 1)
+            if (addresses != null && addresses.isNotEmpty()) {
+                val address = addresses[0]
+                locationText.setText(address.getAddressLine(0).toString())
+            } else {
+                Log.d("Location", "No address found for the location.")
+            }
+        } catch (e: IOException) {
+            Log.e("Location", "Service Not Available", e)
+        }
+    }
+    companion object {
+        const val TITLE = "TITLE"
+        const val TYPE = "TYPE"
+        const val AMOUNT = "AMOUNT"
+        const val LOCATION = "LOCATION"
+        const val REQUEST_LOCATION_PERMISSION = 1 // Define the constant here
+
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/bondoman/activities/EditTransaction.kt b/app/src/main/java/com/example/bondoman/activities/EditTransaction.kt
index e34ca17..7ce6ec6 100644
--- a/app/src/main/java/com/example/bondoman/activities/EditTransaction.kt
+++ b/app/src/main/java/com/example/bondoman/activities/EditTransaction.kt
@@ -1,25 +1,18 @@
 package com.example.bondoman.activities
 
 import android.app.Activity
-import android.app.DatePickerDialog
 import android.content.BroadcastReceiver
 import android.content.Context
 import android.content.Intent
 import android.content.IntentFilter
-import android.graphics.Color
 import android.os.Bundle
 import android.util.Log
-import android.view.View
-import android.widget.ArrayAdapter
 import android.widget.Button
-import android.widget.DatePicker
 import android.widget.EditText
+import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import com.example.bondoman.R
-import android.widget.Spinner
-import android.widget.TextView
 import com.example.bondoman.services.TokenCheckService
-import java.util.Calendar
 
 
 class EditTransaction() : AppCompatActivity() {
diff --git a/app/src/main/java/com/example/bondoman/activities/LoginActivity.kt b/app/src/main/java/com/example/bondoman/activities/LoginActivity.kt
index bd52792..423e0de 100644
--- a/app/src/main/java/com/example/bondoman/activities/LoginActivity.kt
+++ b/app/src/main/java/com/example/bondoman/activities/LoginActivity.kt
@@ -4,20 +4,15 @@ import android.app.Dialog
 import android.content.Intent
 import android.graphics.Color
 import android.graphics.drawable.ColorDrawable
-import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
-import android.util.Log
 import android.widget.Button
 import android.widget.EditText
 import android.widget.Toast
-import androidx.core.view.isVisible
+import androidx.appcompat.app.AppCompatActivity
 import androidx.lifecycle.lifecycleScope
-import com.airbnb.lottie.LottieAnimationView
 import com.example.bondoman.R
-import com.example.bondoman.apiServices.IAuthService
 import com.example.bondoman.lib.SecurePreferences
 import com.example.bondoman.repositories.AuthRepository
-import com.example.bondoman.retrofits.Retro
 import kotlinx.coroutines.launch
 
 class LoginActivity : AppCompatActivity() {
diff --git a/app/src/main/java/com/example/bondoman/fragments/TransaksiFragment.kt b/app/src/main/java/com/example/bondoman/fragments/TransaksiFragment.kt
index 01244ec..ab51fec 100644
--- a/app/src/main/java/com/example/bondoman/fragments/TransaksiFragment.kt
+++ b/app/src/main/java/com/example/bondoman/fragments/TransaksiFragment.kt
@@ -44,14 +44,11 @@ class TransaksiFragment : Fragment() {
         super.onCreate(savedInstanceState)
     }
 
-
     override fun onCreateView(
         inflater: LayoutInflater, container: ViewGroup?,
         savedInstanceState: Bundle?
     ): View? {
         val view = inflater.inflate(R.layout.fragment_transaksi, container, false)
-
-
         val recyclerView: RecyclerView = view.findViewById(R.id.recycler_view)
         adapter = TransactionListAdapter(wordViewModel, ::itemEditRequest)
         recyclerView.layoutManager = LinearLayoutManager(requireContext())
@@ -76,8 +73,6 @@ class TransaksiFragment : Fragment() {
     override fun onActivityResult(requestCode: Int, resultCode: Int, intentData: Intent?) {
         super.onActivityResult(requestCode, resultCode, intentData)
 
-        Log.i("Masuk", "Masuk")
-
         if (requestCode == newTransactionRequestCode && resultCode == Activity.RESULT_OK) {
             val title = intentData?.getStringExtra(AddTransaction.TITLE) ?: ""
             val amount = intentData?.getFloatExtra(AddTransaction.AMOUNT, 0.0f) ?: 0.0f
diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml
new file mode 100644
index 0000000..d52a85d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_search.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="#000000"
+        android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zm-6,0C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
+</vector>
-- 
GitLab