Skip to content
Snippets Groups Projects
Commit 4e196560 authored by shidqizh's avatar shidqizh
Browse files

feat: automatically set location on input

parent fa15a457
No related merge requests found
Pipeline #61523 canceled with stages
package com.atm.bondowowo.ui.transaction package com.atm.bondowowo.ui.transaction
import android.Manifest
import android.annotation.SuppressLint
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.pm.PackageManager
import android.location.Geocoder
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
...@@ -15,6 +22,7 @@ import android.widget.EditText ...@@ -15,6 +22,7 @@ import android.widget.EditText
import android.widget.Spinner import android.widget.Spinner
import android.widget.Toast import android.widget.Toast
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import com.atm.bondowowo.R import com.atm.bondowowo.R
import com.atm.bondowowo.data.local.database.AppDatabase import com.atm.bondowowo.data.local.database.AppDatabase
...@@ -24,7 +32,6 @@ import java.time.LocalDateTime ...@@ -24,7 +32,6 @@ import java.time.LocalDateTime
class TransactionInputFragment : Fragment() { class TransactionInputFragment : Fragment() {
private lateinit var nama_transaksi: EditText private lateinit var nama_transaksi: EditText
private lateinit var nominal_transaksi: EditText private lateinit var nominal_transaksi: EditText
// private lateinit var kategori_transaksi: EditText
private lateinit var kategori_transaksi: Spinner private lateinit var kategori_transaksi: Spinner
private lateinit var lokasi_transaksi: EditText private lateinit var lokasi_transaksi: EditText
...@@ -105,6 +112,7 @@ class TransactionInputFragment : Fragment() { ...@@ -105,6 +112,7 @@ class TransactionInputFragment : Fragment() {
return view return view
} }
@SuppressLint("MissingPermission")
@RequiresApi(Build.VERSION_CODES.TIRAMISU) @RequiresApi(Build.VERSION_CODES.TIRAMISU)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
...@@ -113,17 +121,26 @@ class TransactionInputFragment : Fragment() { ...@@ -113,17 +121,26 @@ class TransactionInputFragment : Fragment() {
IntentFilter("com.atm.bondowowo.RANDOM_INPUT_TRANSACTION"), IntentFilter("com.atm.bondowowo.RANDOM_INPUT_TRANSACTION"),
Context.RECEIVER_NOT_EXPORTED Context.RECEIVER_NOT_EXPORTED
) )
if (checkLocationPermission()) {
locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
}
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
requireContext().unregisterReceiver(inputValueReceiver) requireContext().unregisterReceiver(inputValueReceiver)
if (this::locationManager.isInitialized) {
locationManager.removeUpdates(locationListener)
}
} }
fun setListener(listener: TransactionInputListener) { fun setListener(listener: TransactionInputListener) {
this.listener = listener this.listener = listener
} }
// Failed still broadcast reciever // Failed still broadcast reciever
private val inputValueReceiver = object : BroadcastReceiver() { private val inputValueReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) { override fun onReceive(context: Context, intent: Intent) {
...@@ -133,4 +150,64 @@ class TransactionInputFragment : Fragment() { ...@@ -133,4 +150,64 @@ class TransactionInputFragment : Fragment() {
} }
} }
} }
private lateinit var locationManager: LocationManager
private val locationListener: LocationListener = object : LocationListener {
override fun onLocationChanged(location: Location) {
val geocoder = Geocoder(requireContext())
val addresses = geocoder.getFromLocation(location.latitude, location.longitude, 1)
if (addresses != null) {
if (addresses.isNotEmpty()) {
val address = addresses[0].getAddressLine(0)
lokasi_transaksi.setText(address)
}
}
}
@Deprecated("Deprecated in Java")
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
override fun onProviderEnabled(provider: String) {}
override fun onProviderDisabled(provider: String) {}
}
private fun checkLocationPermission(): Boolean {
if (ActivityCompat.checkSelfPermission(
requireContext(),
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 1)
return false
}
return true
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == 1) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.checkSelfPermission(
requireContext(),
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
}
} else {
Toast.makeText(
requireContext(),
"Location permission denied. Cannot get current location.",
Toast.LENGTH_SHORT
).show()
}
}
}
} }
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment