diff --git a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt index 6ce3208cacdb38620ac5815d16b9eb77cde8c090..98897c01c7a65bbf3e4376fd834fc20742b8b169 100644 --- a/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt +++ b/app/src/main/java/com/atm/bondowowo/ui/transaction/TransactionInputFragment.kt @@ -1,9 +1,16 @@ package com.atm.bondowowo.ui.transaction +import android.Manifest +import android.annotation.SuppressLint import android.content.BroadcastReceiver import android.content.Context import android.content.Intent 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.Bundle import android.view.LayoutInflater @@ -15,6 +22,7 @@ import android.widget.EditText import android.widget.Spinner import android.widget.Toast import androidx.annotation.RequiresApi +import androidx.core.app.ActivityCompat import androidx.fragment.app.Fragment import com.atm.bondowowo.R import com.atm.bondowowo.data.local.database.AppDatabase @@ -24,7 +32,6 @@ import java.time.LocalDateTime class TransactionInputFragment : Fragment() { private lateinit var nama_transaksi: EditText private lateinit var nominal_transaksi: EditText -// private lateinit var kategori_transaksi: EditText private lateinit var kategori_transaksi: Spinner private lateinit var lokasi_transaksi: EditText @@ -105,6 +112,7 @@ class TransactionInputFragment : Fragment() { return view } + @SuppressLint("MissingPermission") @RequiresApi(Build.VERSION_CODES.TIRAMISU) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -113,17 +121,26 @@ class TransactionInputFragment : Fragment() { IntentFilter("com.atm.bondowowo.RANDOM_INPUT_TRANSACTION"), 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() { super.onDestroyView() requireContext().unregisterReceiver(inputValueReceiver) + if (this::locationManager.isInitialized) { + locationManager.removeUpdates(locationListener) + } } fun setListener(listener: TransactionInputListener) { this.listener = listener } + // Failed still broadcast reciever private val inputValueReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { @@ -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() + } + } + } }