From 6c2224d0408767b41ef1635cc9b0780ee0875e83 Mon Sep 17 00:00:00 2001 From: Aryankc2 Date: Tue, 6 May 2025 18:25:54 +0530 Subject: [PATCH] bugs fixes --- ...kotlin-compiler-9493137895889385779.salive | 0 app/build.gradle.kts | 6 - app/src/main/AndroidManifest.xml | 5 +- .../fieldagent/ui/addsite/AddSiteFragment.kt | 173 ++++++++++++------ .../fieldagent/ui/addsite/AddSiteViewModel.kt | 3 + .../ui/damagedetails/DamageDetailsFragment.kt | 8 +- .../damagelist/adapter/DamageListAdapter.kt | 2 +- .../fieldagent/ui/homescreen/HomeFragment.kt | 18 +- .../fieldagent/ui/profile/ProfileFragment.kt | 14 +- app/src/main/res/drawable/arab.xml | 12 ++ app/src/main/res/drawable/circle_arab.xml | 23 +++ app/src/main/res/drawable/filter_new.xml | 9 + app/src/main/res/drawable/profile.png | Bin 0 -> 1188 bytes .../drawable/{profile.xml => profile2.xml} | 0 app/src/main/res/drawable/rounded_filter.xml | 17 ++ .../main/res/layout/damage_view_adapter.xml | 70 +++++-- app/src/main/res/layout/fragment_add_site.xml | 27 --- app/src/main/res/layout/fragment_home.xml | 53 ++++-- app/src/main/res/layout/home_adapter.xml | 2 +- app/src/main/res/layout/pop_layout.xml | 24 +++ app/src/main/res/values-ar/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/file_paths.xml | 8 +- 23 files changed, 333 insertions(+), 145 deletions(-) delete mode 100644 .kotlin/sessions/kotlin-compiler-9493137895889385779.salive create mode 100644 app/src/main/res/drawable/arab.xml create mode 100644 app/src/main/res/drawable/circle_arab.xml create mode 100644 app/src/main/res/drawable/filter_new.xml create mode 100644 app/src/main/res/drawable/profile.png rename app/src/main/res/drawable/{profile.xml => profile2.xml} (100%) create mode 100644 app/src/main/res/drawable/rounded_filter.xml 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 0000000000000000000000000000000000000000..f9127bdac0c4f1b426688dc1317f2f1819d6841c GIT binary patch literal 1188 zcmV;V1Y7%wP)7s0^n90X&C&t9mA#>BLE)6$)w=N?GzrF_5xrH zeoqd5-2TSKYynEg@x~~nEW?LbmO|Ja$FMdc_GJ;y$|Az^+6^8S;-yr^#MB?tPU?5F z4OvqlD+8WEN#g2vyc9HE14=22@B_|C@u+{Sh={M6l4NASM#B#t?#m#_5a6x^jzO?4 zgCs+MixN0SHg1LhOAP;I*baQ^fX+;7P~;{;l}##hk`u zy%D$}B6enwrJM#M;ving;OYZgvw|ln1E7>LAMfG%6vFN}h?^oJZSRpL0F+XetIA?a z(@6iraoiFSdooEgOJXA85bnX@OkVt=YLuh~kJkDE%kiEX=jcBu2jrtVlJ^k)69 z9f2KK-HHI%pz6{NvZ5bQrSF11##xLf@!f!9oy3i)i(o0`V(jcV*96D#k?P1-G~6&hSwyK-bq`Ddlq2E96YVf{6HS;*WJx;IfvT83nq=R42g779ANC zy2f-i18Qz=`-{&}pleKZ0t~a$J1lgK>8t=XH_vU+kx`**OmzbEuB6O7bd9M_fZZ)R zGAiuq_TyOrYHmK$1Q=5jQ=I@`sQ%1&rr?vPzGeC!x(d*#p>1x}rQzWe9;?0DqaysW z(N}Yt+Oq?f#j!}$-WqifgW7J)Y1$W9fo; + + + + + + + + + \ 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