location update acc to android 14
This commit is contained in:
parent
a77f993d78
commit
dfe3f2116f
|
@ -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"
|
||||
/>
|
||||
|
||||
|
|
|
@ -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}_"
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
||||
|
|
|
@ -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>
|
Loading…
Reference in a new issue