location update acc to android 14

This commit is contained in:
Aryankc2 2025-05-05 12:51:50 +05:30
parent a77f993d78
commit dfe3f2116f
6 changed files with 93 additions and 66 deletions

View file

@ -5,14 +5,19 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<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_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"
android:required="false" />
<application
android:name=".AgentApplication"
android:allowBackup="true"
@ -25,7 +30,7 @@
android:usesCleartextTraffic="true"
android:localeConfig="@xml/locales_config"
android:theme="@style/Theme.FieldAgent"
tools:targetApi="31">
tools:targetApi="33">
<activity
android:name=".ui.SplashActivity"
android:exported="true"
@ -48,6 +53,7 @@
android:name=".ui.homescreen.HomeActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize"
android:configChanges="orientation|screenSize"
android:screenOrientation="portrait"
/>

View file

@ -2,18 +2,23 @@ package com.example.fieldagent.ui.addsite
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity.RESULT_OK
import android.app.Dialog
import android.content.Context
import android.content.Intent
import android.content.IntentSender
import android.content.pm.PackageManager
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.location.Geocoder
import android.location.Location
import android.location.LocationManager
import android.location.LocationRequest
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.provider.Settings
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
@ -26,8 +31,11 @@ import android.view.Window
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresPermission
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.fragment.app.viewModels
@ -59,10 +67,12 @@ import com.example.fieldagent.utils.showFullScreenImage
import com.example.fieldagent.utils.showSnackBar
import com.example.fieldagent.utils.uriToFile
import com.example.fieldagent.utils.visible
import com.google.android.gms.common.api.ResolvableApiException
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationCallback
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationServices
import com.google.android.gms.location.LocationSettingsRequest
import com.google.android.gms.location.Priority
import com.google.android.gms.tasks.CancellationTokenSource
import dagger.hilt.android.AndroidEntryPoint
@ -78,7 +88,7 @@ import java.util.ArrayList
import java.util.Date
import java.util.Locale
import javax.inject.Inject
import com.google.android.gms.location.*
@AndroidEntryPoint
class AddSiteFragment : Fragment() {
@ -135,6 +145,7 @@ class AddSiteFragment : Fragment() {
}
private fun listener(){
@ -213,20 +224,12 @@ class AddSiteFragment : Fragment() {
}
}
locationPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
val granted = permissions[Manifest.permission.ACCESS_FINE_LOCATION] == true
if (granted) {
getCurrentLocation()
} else {
Toast.makeText(requireActivity(), getString(R.string.location_permission_denied), Toast.LENGTH_SHORT).show()
}
}
binding.ivClickGps.setOnClickListener {
checkLocationPermissionAndFetch();
getCurrentLocation()
// checkLocationPermissionAndFetch();
}
binding.ivCloseImage.setOnClickListener {
@ -249,6 +252,15 @@ class AddSiteFragment : Fragment() {
}
}
locationPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
if (permissions[Manifest.permission.ACCESS_FINE_LOCATION] == true) {
getCurrentLocation()
} else {
Toast.makeText(requireContext(), "Location permission denied", Toast.LENGTH_SHORT).show()
}
}
binding.etMosqueArea.addTextChangedListener(object : TextWatcher {
private var isEditing = false
@ -383,12 +395,54 @@ class AddSiteFragment : Fragment() {
})
}
private fun getCurrentLocation() {
private fun checkLocationPermissionAndFetch() {
if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
getCurrentLocation()
if (ActivityCompat.checkSelfPermission(
requireActivity(),
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
requireActivity(),
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
requestLocationPermission()
return
}
if (!isLocationEnabled()) {
openLocationSettings()
} else {
fetchLocation()
}
}
private fun isLocationEnabled(): Boolean {
val locationManager = requireContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
}
private fun openLocationSettings() {
val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
startActivity(intent)
}
@RequiresPermission(allOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION])
private fun fetchLocation() {
val cancellationTokenSource = CancellationTokenSource()
fusedLocationClient.getCurrentLocation(
Priority.PRIORITY_HIGH_ACCURACY,
cancellationTokenSource.token
).addOnSuccessListener { location: Location? ->
if (location != null) {
getAddressFromLocation(location.latitude,location.longitude)
} else {
Toast.makeText(requireContext(),getString(R.string.please_try_again_later) , Toast.LENGTH_SHORT).show()
}
}
}
private fun requestLocationPermission() {
locationPermissionLauncher.launch(
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
@ -396,38 +450,6 @@ class AddSiteFragment : Fragment() {
)
)
}
}
@SuppressLint("MissingPermission")
private fun getCurrentLocation() {
val locationRequest = LocationRequest.Builder(
Priority.PRIORITY_HIGH_ACCURACY,
5000 // interval in milliseconds
).build()
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null)
/* fusedLocationClient.lastLocation.addOnSuccessListener { location ->
if (location != null) {
getAddressFromLocation(location.latitude, location.longitude)
} else {
Toast.makeText(requireActivity(), getString(R.string.could_not_fetch_location), Toast.LENGTH_SHORT).show()
}
}*/
}
// Stop location updates
private fun stopLocationUpdates() {
fusedLocationClient.removeLocationUpdates(locationCallback)
}
private val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
super.onLocationResult(locationResult)
// Process the location data
val location: Location = locationResult.lastLocation!!
Log.e("ChecLofgggf==>","${location.longitude}")
// ... (Display location on map, etc.) ...
}
}
private fun getAddressFromLocation(latitude: Double, longitude: Double) {
val geocoder = Geocoder(requireActivity(), Locale.getDefault())
@ -478,6 +500,8 @@ class AddSiteFragment : Fragment() {
}
private fun createImageFile(): File {
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
val fileName = "JPEG_${timeStamp}_"

View file

@ -61,6 +61,7 @@ class AddSiteViewModel @Inject constructor(private val webService: WebService)
if (response.isSuccessful) {
rooms.value = Resource.success(response.body())
} else {
rooms.value = Resource.error(
ApiUtils.getError(response.code(),

View file

@ -107,6 +107,7 @@
<string name="pdf_saved">تم حفظ ملف PDF في المستندات!</string>
<string name="pdf_failed">فشل في حفظ ملف PDF!</string>
<string name="contact_number_length_error">الرجاء إدخال رقم اتصال صالح يتكون من 7 إلى 11 رقمًا</string>
<string name="please_try_again_later">يرجى المحاولة مرة أخرى لاحقا</string>
<string name="please_enter_valid_password">يجب أن تتكون كلمة المرور من 6 أحرف على الأقل وتتضمن حرفًا كبيرًا واحدًا ورقمًا واحدًا وحرفًا خاصًا واحدًا</string>
<string-array name="availability">

View file

@ -106,6 +106,7 @@
<string name="vat">VAT</string>
<string name="pdf_saved">PDF saved to Documents!</string>
<string name="pdf_failed">Failed to save PDF!</string>
<string name="please_try_again_later">Please try again later</string>
<string name="contact_number_length_error">Please enter a valid contact number with 7 to 11 digits</string>

View file

@ -1,12 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-cache-path
name="external_cache_files"
path="." />
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path
name="external_files_files"
path="." />
<external-path
name="external_files"
path="." />
name="my_images"
path="Pictures" />
</paths>