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