diff --git a/.kotlin/sessions/kotlin-compiler-9493137895889385779.salive b/.kotlin/sessions/kotlin-compiler-9493137895889385779.salive
deleted file mode 100644
index e69de29..0000000
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 04ff517..3d57ae4 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -61,12 +61,6 @@ dependencies {
implementation(libs.androidx.swiperefreshlayout)
implementation(libs.glide)
implementation(libs.play.services.location)
- implementation(libs.androidx.camera.core)
- implementation(libs.androidx.camera.camera2)
- implementation(libs.androidx.camera.lifecycle)
- implementation(libs.androidx.camera.view)
- implementation(libs.androidx.camera.extensions)
-
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4c1d833..b4f4901 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -53,20 +53,21 @@
android:name=".ui.homescreen.HomeActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize"
- android:configChanges="orientation|screenSize"
+ android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
/>
+
\ No newline at end of file
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 523b890..e0d3040 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
@@ -37,14 +37,11 @@ import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresPermission
-import androidx.camera.core.CameraSelector
-import androidx.camera.core.ImageCapture
-import androidx.camera.core.ImageCaptureException
-import androidx.camera.core.Preview
-import androidx.camera.lifecycle.ProcessCameraProvider
+
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
+import androidx.core.net.toUri
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
@@ -115,7 +112,62 @@ class AddSiteFragment : Fragment() {
private var selectWomenPrayerArea:String=""
private var selectRestroom:String=""
- private lateinit var cameraLauncher: ActivityResultLauncher
+
+ override fun onSaveInstanceState(outState: Bundle) {
+ super.onSaveInstanceState(outState)
+ outState.putString("imageUri", imageUri?.toString())
+ outState.putString("etName", binding.etName.text.toString())
+ outState.putString("etLocation", binding.etLocation.text.toString())
+ outState.putString("etSupervisorContact", binding.etSupervisorContact.text.toString())
+ outState.putString("etSupervisorAuthority", binding.etSupervisorAuthority.text.toString())
+ outState.putString("etBuildingCondition", binding.etBuildingCondition.text.toString())
+ outState.putString("etMosqueArea", binding.etMosqueArea.text.toString())
+ outState.putString("etApproximateNumber", binding.etApproximateNumber.text.toString())
+ outState.putString("etNumberRestroom", binding.etNumberRestroom.text.toString())
+ outState.putString("autoCompleteBuilding", binding.autoCompleteBuilding.text.toString())
+ outState.putString("autoCompleteTextView", binding.autoCompleteTextView.text.toString())
+ }
+
+ override fun onViewStateRestored(savedInstanceState: Bundle?) {
+ super.onViewStateRestored(savedInstanceState)
+ if (savedInstanceState == null) return
+ savedInstanceState.getString("imageUri")?.let {
+ imageUri = it.toUri()
+ binding.llUploadImage.gone()
+ binding.cardImage.visible()
+ binding.ivSetImage.setImageURI(imageUri)
+ binding.ivCloseImage.visible()
+ }
+
+ binding.etName.setText(savedInstanceState.getString("etName", ""))
+ binding.etLocation.setText(savedInstanceState.getString("etLocation", ""))
+ binding.etSupervisorContact.setText(savedInstanceState.getString("etSupervisorContact", ""))
+ binding.etSupervisorAuthority.setText(savedInstanceState.getString("etSupervisorAuthority", ""))
+ binding.etBuildingCondition.setText(savedInstanceState.getString("etBuildingCondition", ""))
+ binding.etMosqueArea.setText(savedInstanceState.getString("etMosqueArea", ""))
+ binding.etApproximateNumber.setText(savedInstanceState.getString("etApproximateNumber", ""))
+ binding.etNumberRestroom.setText(savedInstanceState.getString("etNumberRestroom", ""))
+ binding.autoCompleteBuilding.setText(savedInstanceState.getString("autoCompleteBuilding", ""))
+ selectWomenPrayerArea=savedInstanceState.getString("autoCompleteBuilding", "")
+ selectRestroom=savedInstanceState.getString("autoCompleteTextView", "")
+ }
+
+ private var cameraLauncher = registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
+ if (success) {
+ if (imageUri != null) {
+ binding.llUploadImage.gone()
+ binding.cardImage.visible()
+ binding.ivSetImage.setImageURI(imageUri)
+ binding.ivCloseImage.visible()
+ } else {
+ Toast.makeText(requireContext(), "Image URI is null", Toast.LENGTH_SHORT).show()
+ }
+ } else {
+ Toast.makeText(requireContext(), "Failed to capture image", Toast.LENGTH_SHORT).show()
+ }
+
+ }
+
private lateinit var galleryLauncher: ActivityResultLauncher
private lateinit var permissionLauncher: ActivityResultLauncher>
private var imageUri: Uri? = null
@@ -125,8 +177,9 @@ class AddSiteFragment : Fragment() {
private lateinit var fusedLocationClient: FusedLocationProviderClient
private lateinit var locationPermissionLauncher: ActivityResultLauncher>
- private var imageCapture: ImageCapture? = null
- private lateinit var cameraProvider: ProcessCameraProvider
+
+
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
@@ -158,23 +211,27 @@ class AddSiteFragment : Fragment() {
private fun listener(){
+ //val options = resources.getStringArray(R.array.availability).toList()
- selectWomenPrayerArea=getString(R.string.yes)
+ lifecycleScope.launch {
+ delay(1000) // delay for 1 second (1000 ms)
+ var womenList = listOf(getString(R.string.yes), getString(R.string.no))
+ val adapter = ArrayAdapter(requireActivity(), R.layout.dropdown_item,womenList )
- val options = resources.getStringArray(R.array.availability).toList()
- val adapter = ArrayAdapter(requireActivity(), R.layout.dropdown_item, options)
+ binding.autoCompleteBuilding.setAdapter(null)
+ binding.autoCompleteBuilding.setAdapter(adapter)
- binding.autoCompleteBuilding.setAdapter(adapter)
+ binding.autoCompleteBuilding.setOnClickListener {
- binding.autoCompleteBuilding.setOnClickListener {
+ binding.autoCompleteBuilding.showDropDown()
+ }
- binding.autoCompleteBuilding.showDropDown()
+ binding.autoCompleteBuilding.setOnItemClickListener { parent, view, position, id ->
+ val selectedItem = parent.getItemAtPosition(position) as String
+ selectWomenPrayerArea=selectedItem;
+ }
}
- binding.autoCompleteBuilding.setOnItemClickListener { parent, view, position, id ->
- val selectedItem = parent.getItemAtPosition(position) as String
- selectWomenPrayerArea=selectedItem;
- }
binding.autoCompleteTextView.setOnClickListener {
@@ -197,23 +254,9 @@ class AddSiteFragment : Fragment() {
showImageDialog();
}
- cameraLauncher = registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
- if (success) {
- lifecycleScope.launch {
- delay(300) // This helps avoid Handler-on-dead-thread on some OEMs
- imageUri?.let {
- binding.llUploadImage.gone()
- binding.cardImage.visible()
- binding.ivSetImage.setImageURI(imageUri)
- binding.ivCloseImage.visible()
- fileToUpload = uriToFile(imageUri!!, requireActivity())
- }
- }
- }
- }
galleryLauncher = registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
uri?.let {
@@ -243,7 +286,6 @@ class AddSiteFragment : Fragment() {
binding.ivClickGps.setOnClickListener {
getCurrentLocation()
- // checkLocationPermissionAndFetch();
}
binding.ivCloseImage.setOnClickListener {
@@ -262,7 +304,7 @@ class AddSiteFragment : Fragment() {
if (permissions[Manifest.permission.CAMERA] == true) {
} else {
- Toast.makeText(requireContext(), "Camera permission denied", Toast.LENGTH_SHORT).show()
+ Toast.makeText(requireContext(), getString(R.string. camera_permission_denied), Toast.LENGTH_SHORT).show()
}
}
@@ -272,7 +314,7 @@ class AddSiteFragment : Fragment() {
if (permissions[Manifest.permission.ACCESS_FINE_LOCATION] == true) {
getCurrentLocation()
} else {
- Toast.makeText(requireContext(), "Location permission denied", Toast.LENGTH_SHORT).show()
+ Toast.makeText(requireContext(), getString(R.string.location_permission_denied), Toast.LENGTH_SHORT).show()
}
}
@@ -393,10 +435,17 @@ class AddSiteFragment : Fragment() {
progressDialog.setLoading(false)
restRoomList.addAll(it.data?.data?.conditions!!)
val adapter = ArrayAdapter(requireActivity(), R.layout.dropdown_item, restRoomList)
- selectRestroom=restRoomList[0]
binding.autoCompleteTextView.setAdapter(adapter)
- binding.autoCompleteTextView.setText(restRoomList.first(), false)
+ if(selectRestroom.isNotEmpty()){
+
+ binding.autoCompleteTextView.setText(selectRestroom, false)
+ }else{
+ selectRestroom=restRoomList[0]
+
+ binding.autoCompleteTextView.setText(restRoomList.first(), false)
+ }
+
}
Status.ERROR -> {
progressDialog.setLoading(false)
@@ -495,10 +544,13 @@ class AddSiteFragment : Fragment() {
view.tvCamera.setOnClickListener {
- // startCameraX();
- // permissionLauncher.launch(arrayOf(Manifest.permission.CAMERA))
- openCamera()
+ if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.CAMERA)
+ == PackageManager.PERMISSION_GRANTED) {
+ openCamera()
+ } else {
+ permissionLauncher.launch(arrayOf(Manifest.permission.CAMERA))
+ }
dialog.dismiss()
}
dialog.show()
@@ -506,35 +558,38 @@ class AddSiteFragment : Fragment() {
private fun openCamera() {
- /* imageUri = FileProvider.getUriForFile(
- requireContext(),
- "${requireContext().packageName}.provider",
- createImageFile()
- )*/
- imageUri=createImageUri()
- cameraLauncher.launch(imageUri!!)
- }
- private fun createImageUri(): Uri? {
- val contentValues = ContentValues().apply {
- put(MediaStore.Images.Media.DISPLAY_NAME, "IMG_${System.currentTimeMillis()}.jpg")
- put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
- put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES)
+ try {
+ val photoFile = createImageFile()
+
+ fileToUpload = photoFile
+
+ imageUri = FileProvider.getUriForFile(
+ requireActivity(),
+ "com.example.fieldagent.provider",
+ photoFile
+ )
+
+
+ cameraLauncher.launch(imageUri)
+
+
+
+ } catch (e: Exception) {
+ e.printStackTrace()
+ Toast.makeText(requireContext(), "Error in openCamera: ${e.message}", Toast.LENGTH_LONG).show()
}
- return requireContext().contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
+
}
-
-
private fun createImageFile(): File {
val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
- val fileName = "JPEG_${timeStamp}_"
- val storageDir = requireContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES)
- return File.createTempFile(fileName, ".jpg", storageDir)
+ val storageDir = requireContext().getExternalFilesDir(null)
+ return File(storageDir?.absolutePath ?: "", "IMG_${timeStamp}_.jpg")
}
override fun onDestroyView() {
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 7837c70..3a668a8 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
@@ -1,5 +1,7 @@
package com.example.fieldagent.ui.addsite
+import android.net.Uri
+import android.util.Log
import androidx.lifecycle.ViewModel
import com.example.fieldagent.data.apis.WebService
import com.example.fieldagent.data.models.responses.RoomConditionData
@@ -23,6 +25,7 @@ class AddSiteViewModel @Inject constructor(private val webService: WebService)
val sites by lazy { SingleLiveEvent>() }
val rooms by lazy { SingleLiveEvent>() }
+
fun addSites(hashMap: HashMap) {
sites.value = Resource.loading()
diff --git a/app/src/main/java/com/example/fieldagent/ui/damagedetails/DamageDetailsFragment.kt b/app/src/main/java/com/example/fieldagent/ui/damagedetails/DamageDetailsFragment.kt
index 7512863..8aaf820 100644
--- a/app/src/main/java/com/example/fieldagent/ui/damagedetails/DamageDetailsFragment.kt
+++ b/app/src/main/java/com/example/fieldagent/ui/damagedetails/DamageDetailsFragment.kt
@@ -237,10 +237,10 @@ class DamageDetailsFragment : Fragment() {
isEditing = true
- val input = s.toString().replace(" $", "").trim()
+ val input = s.toString().replace(" SAR", "").trim()
if (input.isNotEmpty() && input.toDoubleOrNull() != null) {
- binding.etItemValue.setText("$ $input")
+ binding.etItemValue.setText("SAR $input")
binding.etItemValue.setSelection(binding.etItemValue.text.length) // cursor before " m²"
}
@@ -269,7 +269,9 @@ class DamageDetailsFragment : Fragment() {
hashMap["inspection_id"] = getRequestBody(inspectionId)
hashMap["subCategory_id"] = getRequestBody(selectSubId)
hashMap["item_quantity"] = getRequestBody(binding.etItemQuantity.text)
- hashMap["item_value"] = getRequestBody(binding.etItemValue.text.toString().replace(Regex("[^\\d.]"), ""))
+
+ val cleanValue = binding.etItemValue.text.toString().replace("SAR", "", ignoreCase = true).trim()
+ hashMap["item_value"] = getRequestBody(cleanValue)
val imageParts = ArrayList()
diff --git a/app/src/main/java/com/example/fieldagent/ui/damagelist/adapter/DamageListAdapter.kt b/app/src/main/java/com/example/fieldagent/ui/damagelist/adapter/DamageListAdapter.kt
index 97cfc9e..893833e 100644
--- a/app/src/main/java/com/example/fieldagent/ui/damagelist/adapter/DamageListAdapter.kt
+++ b/app/src/main/java/com/example/fieldagent/ui/damagelist/adapter/DamageListAdapter.kt
@@ -38,7 +38,7 @@ class DamageListAdapter(val damageListFragment: DamageListFragment) : RecyclerVi
holder.binding.txtValue.text = damage.itemValue.toString()
val total = damage.itemValue * damage.itemQuantity
- holder.binding.txtTotal.text="$ "+total.toString()
+ holder.binding.txtTotal.text=total.toString()
holder.binding.txtImage.text=damage.images?.size.toString()
holder.binding.ivDelete.setOnClickListener {
diff --git a/app/src/main/java/com/example/fieldagent/ui/homescreen/HomeFragment.kt b/app/src/main/java/com/example/fieldagent/ui/homescreen/HomeFragment.kt
index 05b1c9f..5324357 100644
--- a/app/src/main/java/com/example/fieldagent/ui/homescreen/HomeFragment.kt
+++ b/app/src/main/java/com/example/fieldagent/ui/homescreen/HomeFragment.kt
@@ -158,10 +158,10 @@ class HomeFragment : Fragment() {
}
- binding.ivFilter.setOnClickListener {
+ binding.llFilter.setOnClickListener {
- val inflater = LayoutInflater.from(binding.ivFilter.context)
+ val inflater = LayoutInflater.from(binding.llFilter.context)
val parent = binding.root as ViewGroup
val popupView = PopLayoutBinding.inflate(inflater,parent,false)
@@ -178,6 +178,8 @@ class HomeFragment : Fragment() {
click="status"
selectStatus="true"
callStatusSearchApi("true","")
+ binding.txtStatusShow.visible()
+ binding.txtStatusShow.text=getString(R.string.completed)
popupWindow.dismiss()
}
@@ -186,6 +188,18 @@ class HomeFragment : Fragment() {
click="status"
selectStatus="false"
callStatusSearchApi("false","")
+ binding.txtStatusShow.visible()
+ binding.txtStatusShow.text=getString(R.string.in_progress)
+ popupWindow.dismiss()
+ }
+
+ popupView.txtAll.setOnClickListener {
+ refreshPagination()
+ binding.txtStatusShow.gone()
+ val hashMap = HashMap()
+ hashMap[LIMIT_TEXT] = PER_PAGE_LOAD
+ hashMap[PAGE_TEXT] = PER_PAGE
+ viewModel.getInspectionList(hashMap)
popupWindow.dismiss()
}
diff --git a/app/src/main/java/com/example/fieldagent/ui/profile/ProfileFragment.kt b/app/src/main/java/com/example/fieldagent/ui/profile/ProfileFragment.kt
index 960e9fa..a09dda9 100644
--- a/app/src/main/java/com/example/fieldagent/ui/profile/ProfileFragment.kt
+++ b/app/src/main/java/com/example/fieldagent/ui/profile/ProfileFragment.kt
@@ -127,15 +127,15 @@ class ProfileFragment : Fragment() {
binding.etName.text.isEmpty()->{
binding.etName.showSnackBar(getString(R.string.please_enter_agent_name))
}
- binding.etPassword.text.toString().isEmpty()->{
+ /*binding.etPassword.text.toString().isEmpty()->{
binding.etPassword.showSnackBar(getString(R.string.please_enter_password))
- }
+ }*/
- !binding.etPassword.text.toString().matches(Regex("^(?=.*[A-Z])(?=.*\\d)(?=.*[@#\$%^&+=!]).{6,}$"))->{
+ binding.etPassword.text.toString().isNotEmpty() && !binding.etPassword.text.toString().matches(Regex("^(?=.*[A-Z])(?=.*\\d)(?=.*[@#\$%^&+=!]).{6,}$"))->{
binding.etPassword.showSnackBar(getString(R.string.please_enter_valid_password))
}
- binding.etConfirmPassword.text.toString().isEmpty()->{
+ binding.etPassword.text.toString().isNotEmpty() && binding.etConfirmPassword.text.toString().isEmpty()->{
binding.etConfirmPassword.showSnackBar(getString(R.string.please_enter_confirm_password))
}
binding.etPassword.text.toString() != binding.etConfirmPassword.text.toString()->{
@@ -144,7 +144,11 @@ class ProfileFragment : Fragment() {
isConnectedToInternet(requireActivity(), true) -> {
val hashMap = HashMap()
hashMap["name"] = binding.etName.text.toString()
- hashMap["password"] = binding.etPassword.text.toString()
+ if (binding.etPassword.text.toString().isNotEmpty())
+ {
+ hashMap["password"] = binding.etPassword.text.toString()
+ }
+
viewModel.updateProfile(userId,hashMap)
}
diff --git a/app/src/main/res/drawable/arab.xml b/app/src/main/res/drawable/arab.xml
new file mode 100644
index 0000000..a7aa3a5
--- /dev/null
+++ b/app/src/main/res/drawable/arab.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/circle_arab.xml b/app/src/main/res/drawable/circle_arab.xml
new file mode 100644
index 0000000..ba4546f
--- /dev/null
+++ b/app/src/main/res/drawable/circle_arab.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/filter_new.xml b/app/src/main/res/drawable/filter_new.xml
new file mode 100644
index 0000000..3dae66d
--- /dev/null
+++ b/app/src/main/res/drawable/filter_new.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/profile.png b/app/src/main/res/drawable/profile.png
new file mode 100644
index 0000000..f9127bd
Binary files /dev/null and b/app/src/main/res/drawable/profile.png differ
diff --git a/app/src/main/res/drawable/profile.xml b/app/src/main/res/drawable/profile2.xml
similarity index 100%
rename from app/src/main/res/drawable/profile.xml
rename to app/src/main/res/drawable/profile2.xml
diff --git a/app/src/main/res/drawable/rounded_filter.xml b/app/src/main/res/drawable/rounded_filter.xml
new file mode 100644
index 0000000..585e42d
--- /dev/null
+++ b/app/src/main/res/drawable/rounded_filter.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/damage_view_adapter.xml b/app/src/main/res/layout/damage_view_adapter.xml
index c9bcca9..1cb4875 100644
--- a/app/src/main/res/layout/damage_view_adapter.xml
+++ b/app/src/main/res/layout/damage_view_adapter.xml
@@ -198,18 +198,37 @@
android:textSize="@dimen/sp_14"
/>
-
+ android:layout_gravity="end"
+ android:gravity="end"
+ >
+
+
+
+
@@ -276,18 +295,33 @@
android:textSize="@dimen/sp_14"
/>
-
+ android:layout_gravity="end"
+ android:gravity="end"
+ >
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_add_site.xml b/app/src/main/res/layout/fragment_add_site.xml
index 164af35..1aff430 100644
--- a/app/src/main/res/layout/fragment_add_site.xml
+++ b/app/src/main/res/layout/fragment_add_site.xml
@@ -553,32 +553,5 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 96eafd7..e1974ff 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -47,10 +47,11 @@
android:id="@+id/ivProfile"
android:layout_width="@dimen/sp_50"
android:layout_height="@dimen/sp_40"
- android:paddingTop="@dimen/dp_4"
- android:paddingBottom="@dimen/dp_4"
+ android:paddingTop="@dimen/dp_8"
+ android:paddingBottom="@dimen/dp_8"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
+ app:tint="@color/main_color"
android:src="@drawable/profile"/>
@@ -99,36 +100,50 @@
-
-
+ android:layout_height="wrap_content"
+ android:background="@drawable/rounded_filter"
+ app:layout_constraintEnd_toEndOf="@+id/rightGuide"
+ app:layout_constraintTop_toTopOf="@+id/etSearch"
+ app:layout_constraintBottom_toBottomOf="@id/etSearch"
+ android:gravity="end"
+ >
+
+
+
-
+ app:layout_constraintTop_toBottomOf="@+id/etSearch">
+ android:src="@drawable/circle_arab"/>
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 61fafb2..7ac3067 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -111,6 +111,8 @@
يجب أن تتكون كلمة المرور من 6 أحرف على الأقل وتتضمن حرفًا كبيرًا واحدًا ورقمًا واحدًا وحرفًا خاصًا واحدًا
كلمة المرور الجديدة
الرجاء إدخال كلمة المرور الجديدة
+ تم رفض إذن Cemera
+ الجميع
- @string/yes
- @string/no
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2160244..555e7a0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -22,6 +22,7 @@
Status
In Progress
Completed
+ All
Site Detail
Name
Please enter your name
@@ -77,6 +78,7 @@
Gallery
Camera
Location permission denied
+ Cemera permission denied
Couldn\'t fetch location
seconds ago
minutes ago
diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml
index 753ab0c..dc4bfb9 100644
--- a/app/src/main/res/xml/file_paths.xml
+++ b/app/src/main/res/xml/file_paths.xml
@@ -1,6 +1,10 @@
-
+
+ path="." />
+
\ No newline at end of file