diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b9190a4..904b5bb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,14 +5,19 @@
-
-
+
+
-
+
+
+
+
+ tools:targetApi="33">
diff --git a/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteFragment.kt b/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteFragment.kt
index 1bfd694..3c5d3ec 100644
--- a/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteFragment.kt
+++ b/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteFragment.kt
@@ -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,50 +395,60 @@ class AddSiteFragment : Fragment() {
})
}
-
- private fun checkLocationPermissionAndFetch() {
- if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
- == PackageManager.PERMISSION_GRANTED) {
- getCurrentLocation()
- } else {
- locationPermissionLauncher.launch(
- arrayOf(
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION
- )
- )
- }
- }
-
- @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.) ...
+ 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,
+ Manifest.permission.ACCESS_COARSE_LOCATION
+ )
+ )
}
private fun getAddressFromLocation(latitude: Double, longitude: Double) {
@@ -478,6 +500,8 @@ class AddSiteFragment : Fragment() {
}
+
+
private fun createImageFile(): File {
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
val fileName = "JPEG_${timeStamp}_"
diff --git a/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteViewModel.kt b/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteViewModel.kt
index 42ddfe8..7837c70 100644
--- a/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteViewModel.kt
+++ b/app/src/main/java/com/example/fieldagent/ui/addsite/AddSiteViewModel.kt
@@ -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(),
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 1709054..9d59bb8 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -107,6 +107,7 @@
تم حفظ ملف PDF في المستندات!
فشل في حفظ ملف PDF!
الرجاء إدخال رقم اتصال صالح يتكون من 7 إلى 11 رقمًا
+ يرجى المحاولة مرة أخرى لاحقا
يجب أن تتكون كلمة المرور من 6 أحرف على الأقل وتتضمن حرفًا كبيرًا واحدًا ورقمًا واحدًا وحرفًا خاصًا واحدًا
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0095dbe..7e1d790 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -106,6 +106,7 @@
VAT
PDF saved to Documents!
Failed to save PDF!
+ Please try again later
Please enter a valid contact number with 7 to 11 digits
diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml
index adfd6ef..753ab0c 100644
--- a/app/src/main/res/xml/file_paths.xml
+++ b/app/src/main/res/xml/file_paths.xml
@@ -1,12 +1,6 @@
-
-
+
-
+ name="my_images"
+ path="Pictures" />
\ No newline at end of file