diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index e5d9496447d0abbd6b5ec761242a520ec15062fd..26889b5153fb1bc2b03e92ca50ea2ab65ff1f3c7 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -122,6 +122,8 @@ dependencies {
 
     implementation("org.apache.poi:poi:5.2.3")
     implementation("org.apache.poi:poi-ooxml:5.2.3")
+
+    implementation("com.google.android.gms:play-services-location:21.2.0")
 }
 
 //androidExtensions{
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6d025f9641bbdd71553c9b1d5ed1e2a4763df44e..92c32c851e7018e1a783f26a8c2cced7d0e14942 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,8 @@
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 
     <application
         android:name=".TransactionApplication"
diff --git a/app/src/main/java/com/example/if3210_2024_android_aab/EditTransactionActivity.kt b/app/src/main/java/com/example/if3210_2024_android_aab/EditTransactionActivity.kt
index ef2c21b82b4767f1d36fcb0c5e7b9990d7178752..4076183616b5570cc9f0b1e4749dfaf49e265de7 100644
--- a/app/src/main/java/com/example/if3210_2024_android_aab/EditTransactionActivity.kt
+++ b/app/src/main/java/com/example/if3210_2024_android_aab/EditTransactionActivity.kt
@@ -1,35 +1,39 @@
 package com.example.if3210_2024_android_aab
 
+import android.Manifest
 import android.app.Activity
 import android.content.Intent
+import android.content.pm.PackageManager
+import android.location.LocationManager
+import android.location.LocationRequest
 import android.os.Bundle
 import android.text.TextUtils
 import android.util.Log
 import android.widget.EditText
 import android.widget.RadioButton
 import android.widget.RadioGroup
+import android.widget.TextView
 import android.widget.Toast
 import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Surface
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import com.example.if3210_2024_android_aab.ui.theme.If32102024androidaabTheme
+import androidx.core.app.ActivityCompat
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationServices
 
 class EditTransactionActivity : ComponentActivity() {
     private lateinit var editJudul: EditText
     private lateinit var editNominal: EditText
-    private lateinit var editLokasi: EditText
+    private lateinit var editLokasi: TextView
 
     private lateinit var radioGroup: RadioGroup
     private lateinit var selectedRadioButton: RadioButton
+    private lateinit var fusedLocationClient: FusedLocationProviderClient
+
+    private val requestcode = 2
+
 
     public override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
         val transactionId = intent.getIntExtra("transactionId",0)
 //        Log.d("EditTransactionActivity", transactionId.toString())
         val transactionJudul = intent.getStringExtra("transactionJudul")
@@ -54,6 +58,7 @@ class EditTransactionActivity : ComponentActivity() {
 
         val saveButton = findViewById<android.widget.Button>(R.id.edit_transaction_button_save)
         val deleteButton = findViewById<android.widget.Button>(R.id.edit_transaction_button_delete)
+        val getLocationButton = findViewById<android.widget.Button>(R.id.button_get_current_location)
 
         deleteButton.setOnClickListener {
             val replyIntent = intent
@@ -97,6 +102,75 @@ class EditTransactionActivity : ComponentActivity() {
                 finish()
             }
         }
+
+        getLocationButton.setOnClickListener {
+            getLocation()
+        }
+    }
+
+    private fun getLocation(){
+        if (ActivityCompat.checkSelfPermission(
+                this,
+                Manifest.permission.ACCESS_FINE_LOCATION
+            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
+                this,
+                Manifest.permission.ACCESS_COARSE_LOCATION
+            ) != PackageManager.PERMISSION_GRANTED
+        ) {
+            ActivityCompat.requestPermissions(
+                this,
+                arrayOf(
+                    android.Manifest.permission.ACCESS_FINE_LOCATION,
+                    android.Manifest.permission.ACCESS_COARSE_LOCATION
+                ),
+                requestcode
+            )
+            false
+        }
+        if (isLocationEnabled()){
+//                fusedLocationClient.getCurrentLocation(1, null)
+            fusedLocationClient.getCurrentLocation(LocationRequest.QUALITY_HIGH_ACCURACY, null)
+                .addOnSuccessListener {
+                        location ->
+                    if (location == null){
+                        Toast.makeText(this, "Location not found", Toast.LENGTH_SHORT).show()
+                    } else {
+                        val geocoder = android.location.Geocoder(this)
+//                            Toast.makeText(this, "Location is not null", Toast.LENGTH_SHORT).show()
+                        val addresses = geocoder.getFromLocation(location.latitude, location.longitude, 1)
+                        editLokasi.setText(addresses?.get(0)?.getAddressLine(0).toString())
+                    }
+                }
+
+        } else {
+            Toast.makeText(this, "Location is disabled", Toast.LENGTH_SHORT).show()
+            val intent = Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)
+            startActivity(intent)
+        }
+
+    }
+
+    fun isLocationEnabled():Boolean{
+        val locationManager: LocationManager = getSystemService(LOCATION_SERVICE) as LocationManager
+        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(
+            LocationManager.NETWORK_PROVIDER
+        )
+    }
+
+
+    override fun onRequestPermissionsResult(
+        requestCode: Int,
+        permissions: Array<out String>,
+        grantResults: IntArray
+    ) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        if (requestCode == requestcode) {
+            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show()
+            } else {
+                Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show()
+            }
+        }
     }
 
     companion object {
diff --git a/app/src/main/java/com/example/if3210_2024_android_aab/NewTransactionActivity.kt b/app/src/main/java/com/example/if3210_2024_android_aab/NewTransactionActivity.kt
index 94da877da2919c818241fbcf9135e1e3065fcd3f..28710940157f78f9b44f716f8c20330441f0c388 100644
--- a/app/src/main/java/com/example/if3210_2024_android_aab/NewTransactionActivity.kt
+++ b/app/src/main/java/com/example/if3210_2024_android_aab/NewTransactionActivity.kt
@@ -1,33 +1,33 @@
 package com.example.if3210_2024_android_aab
 
+import android.Manifest
 import android.app.Activity
 import android.content.Intent
+import android.content.pm.PackageManager
+import android.location.LocationManager
+import android.location.LocationRequest
 import android.os.Bundle
 import android.text.TextUtils
-import android.util.Log
 import android.widget.EditText
 import android.widget.RadioButton
 import android.widget.RadioGroup
+import android.widget.TextView
 import android.widget.Toast
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
 import androidx.appcompat.app.AppCompatActivity
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Surface
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import com.example.if3210_2024_android_aab.ui.theme.If32102024androidaabTheme
+import androidx.core.app.ActivityCompat
+import com.google.android.gms.location.FusedLocationProviderClient
+import com.google.android.gms.location.LocationServices
 
 class NewTransactionActivity:AppCompatActivity() {
     private lateinit var editJudul: EditText
     private lateinit var editNominal: EditText
-    private lateinit var editLokasi: EditText
+    private lateinit var editLokasi: TextView
 
     private lateinit var radioGroup: RadioGroup
     private lateinit var selectedRadioButton: RadioButton
+    private lateinit var fusedLocationClient: FusedLocationProviderClient
+
+    private val requestcode = 2
 
     public override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -37,9 +37,10 @@ class NewTransactionActivity:AppCompatActivity() {
         editLokasi = findViewById(R.id.edit_lokasi)
         radioGroup = findViewById(R.id.kategori_radio_group)
 
-
+        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
 
         val saveButton = findViewById<android.widget.Button>(R.id.button_save)
+        val getLocationButton = findViewById<android.widget.Button>(R.id.button_get_current_location)
 
         saveButton.setOnClickListener {
             val replyIntent = Intent()
@@ -72,6 +73,75 @@ class NewTransactionActivity:AppCompatActivity() {
                 finish()
             }
         }
+
+        getLocationButton.setOnClickListener {
+            getLocation()
+        }
+    }
+
+    private fun getLocation(){
+            if (ActivityCompat.checkSelfPermission(
+                    this,
+                    Manifest.permission.ACCESS_FINE_LOCATION
+                ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
+                    this,
+                    Manifest.permission.ACCESS_COARSE_LOCATION
+                ) != PackageManager.PERMISSION_GRANTED
+            ) {
+                ActivityCompat.requestPermissions(
+                    this,
+                    arrayOf(
+                        android.Manifest.permission.ACCESS_FINE_LOCATION,
+                        android.Manifest.permission.ACCESS_COARSE_LOCATION
+                    ),
+                    requestcode
+                )
+                    false
+            }
+            if (isLocationEnabled()){
+//                fusedLocationClient.getCurrentLocation(1, null)
+                fusedLocationClient.getCurrentLocation(LocationRequest.QUALITY_HIGH_ACCURACY, null)
+                    .addOnSuccessListener {
+                            location ->
+                        if (location == null){
+                            Toast.makeText(this, "Location not found", Toast.LENGTH_SHORT).show()
+                        } else {
+                            val geocoder = android.location.Geocoder(this)
+//                            Toast.makeText(this, "Location is not null", Toast.LENGTH_SHORT).show()
+                            val addresses = geocoder.getFromLocation(location.latitude, location.longitude, 1)
+                            editLokasi.setText(addresses?.get(0)?.getAddressLine(0).toString())
+                        }
+                    }
+
+            } else {
+                Toast.makeText(this, "Location is disabled", Toast.LENGTH_SHORT).show()
+                val intent = Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)
+                startActivity(intent)
+            }
+
+    }
+
+    fun isLocationEnabled():Boolean{
+        val locationManager:LocationManager = getSystemService(LOCATION_SERVICE) as LocationManager
+        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(
+            LocationManager.NETWORK_PROVIDER
+        )
+    }
+
+
+    override fun onRequestPermissionsResult(
+        requestCode: Int,
+        permissions: Array<out String>,
+        grantResults: IntArray
+    ) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+        if (requestCode == requestcode) {
+            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                Toast.makeText(this, "Permission granted", Toast.LENGTH_SHORT).show()
+            } else {
+                Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show()
+            }
+        }
     }
 
     companion object {
diff --git a/app/src/main/res/layout/activity_edit_transaction.xml b/app/src/main/res/layout/activity_edit_transaction.xml
index f25eb12657b281752485ebcb59b864f3d3efdf42..2325b804b878e1533d4fd8ba3549fc60d56fd970 100644
--- a/app/src/main/res/layout/activity_edit_transaction.xml
+++ b/app/src/main/res/layout/activity_edit_transaction.xml
@@ -116,7 +116,7 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/edit_transaction_kategori_radio_group" />
 
-    <EditText
+    <TextView
         android:id="@+id/edit_transaction_edit_lokasi"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -124,8 +124,6 @@
         android:layout_marginTop="10dp"
         android:layout_marginEnd="16dp"
         android:ems="10"
-        android:inputType="text"
-        android:maxLength="30"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.0"
         app:layout_constraintStart_toStartOf="parent"
@@ -141,5 +139,16 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
+    <Button
+        android:id="@+id/button_get_current_location"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="192dp"
+        android:text="Lokasi saat ini"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/edit_transaction_lokasi_label"
+        app:layout_constraintTop_toBottomOf="@+id/edit_transaction_edit_nominal" />
+
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_new_transaction.xml b/app/src/main/res/layout/activity_new_transaction.xml
index d228fe6b2424eca5e6fd1f1c3a4a27fa4fef373f..a72f951cffe576401d09f4ebf957b4d6dcf558b7 100644
--- a/app/src/main/res/layout/activity_new_transaction.xml
+++ b/app/src/main/res/layout/activity_new_transaction.xml
@@ -116,7 +116,7 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/kategori_radio_group" />
 
-    <EditText
+    <TextView
         android:id="@+id/edit_lokasi"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -124,12 +124,21 @@
         android:layout_marginTop="10dp"
         android:layout_marginEnd="16dp"
         android:ems="10"
-        android:inputType="text"
-        android:maxLength="30"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.0"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/lokasi_label" />
 
+    <Button
+        android:id="@+id/button_get_current_location"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="192dp"
+        android:text="Lokasi saat ini"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/lokasi_label"
+        app:layout_constraintTop_toBottomOf="@+id/edit_nominal" />
+
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/recyclerview_transaction.xml b/app/src/main/res/layout/recyclerview_transaction.xml
index 375f2c05f5bb5c8c0336b173207476e98a4e3e78..5fb57e68e87c36b6f91f854203542d196170f81c 100644
--- a/app/src/main/res/layout/recyclerview_transaction.xml
+++ b/app/src/main/res/layout/recyclerview_transaction.xml
@@ -36,20 +36,26 @@
                 android:layout_marginTop="24dp"
                 android:layout_marginEnd="17dp"
                 android:background="#00FFFFFF"
-                app:layout_constraintEnd_toStartOf="@+id/location"
+                app:layout_constraintEnd_toStartOf="@+id/horizontalScrollView"
                 app:layout_constraintTop_toBottomOf="@+id/isPemasukan"
                 app:srcCompat="@drawable/baseline_add_location_24" />
 
-            <TextView
-                android:id="@+id/location"
-                android:layout_width="wrap_content"
+            <HorizontalScrollView
+                android:id="@+id/horizontalScrollView"
+                android:layout_width="110dp"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="24dp"
-                android:layout_marginEnd="76dp"
-                android:text="lokasi"
-                android:textSize="16sp"
+                android:layout_marginEnd="10dp"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintTop_toBottomOf="@+id/isPemasukan" />
+                app:layout_constraintTop_toBottomOf="@+id/isPemasukan">
+
+                <TextView
+                    android:id="@+id/location"
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:text="lokasi"
+                    android:textSize="16sp" />
+            </HorizontalScrollView>
 
             <LinearLayout
                 android:id="@+id/linearLayout2"