bugs fixes
This commit is contained in:
parent
cf8776568d
commit
6c2224d040
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
/>
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
android:authorities="com.example.fieldagent.provider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/file_paths" />
|
||||
</provider>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
|
@ -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<Uri>
|
||||
|
||||
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<String>
|
||||
private lateinit var permissionLauncher: ActivityResultLauncher<Array<String>>
|
||||
private var imageUri: Uri? = null
|
||||
|
@ -125,8 +177,9 @@ class AddSiteFragment : Fragment() {
|
|||
private lateinit var fusedLocationClient: FusedLocationProviderClient
|
||||
private lateinit var locationPermissionLauncher: ActivityResultLauncher<Array<String>>
|
||||
|
||||
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() {
|
||||
|
|
|
@ -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<Resource<SimpleResponseData>>() }
|
||||
val rooms by lazy { SingleLiveEvent<Resource<RoomConditionData>>() }
|
||||
|
||||
|
||||
fun addSites(hashMap: HashMap<String, RequestBody>) {
|
||||
sites.value = Resource.loading()
|
||||
|
||||
|
|
|
@ -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<MultipartBody.Part>()
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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<String, String>()
|
||||
hashMap[LIMIT_TEXT] = PER_PAGE_LOAD
|
||||
hashMap[PAGE_TEXT] = PER_PAGE
|
||||
viewModel.getInspectionList(hashMap)
|
||||
popupWindow.dismiss()
|
||||
}
|
||||
|
||||
|
|
|
@ -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<String, String>()
|
||||
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)
|
||||
}
|
||||
|
|
12
app/src/main/res/drawable/arab.xml
Normal file
12
app/src/main/res/drawable/arab.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="12dp"
|
||||
android:height="13dp"
|
||||
android:viewportWidth="12"
|
||||
android:viewportHeight="13">
|
||||
<path
|
||||
android:pathData="M5.428,0.116C5.067,0.336 4.662,0.666 4.41,0.944L4.256,1.117L4.245,3.852L4.235,6.589L3.306,6.781C2.796,6.888 2.103,7.03 1.768,7.098C1.434,7.168 1.139,7.228 1.114,7.234C1.077,7.242 1.05,7.288 0.988,7.446C0.889,7.696 0.833,7.86 0.78,8.07C0.728,8.276 0.668,8.624 0.678,8.672C0.685,8.709 0.722,8.705 1.324,8.578C1.677,8.506 2.458,8.344 3.058,8.22C3.661,8.098 4.173,7.992 4.2,7.986L4.245,7.976V8.859V9.741L4.2,9.759C4.173,9.769 3.929,9.823 3.657,9.879C3.157,9.981 1.686,10.283 0.854,10.455L0.404,10.55L0.371,10.62C0.288,10.81 0.171,11.156 0.117,11.372C0.065,11.574 -0.011,12.004 0.001,12.016C0.003,12.018 0.129,11.994 0.282,11.962C0.435,11.93 1.133,11.786 1.83,11.642C4.289,11.136 4.14,11.168 4.303,11.09C4.559,10.968 4.671,10.846 5.125,10.197C5.348,9.877 5.554,9.565 5.585,9.503L5.639,9.391L5.645,8.54L5.649,7.69L6.285,7.556C6.634,7.484 6.953,7.418 6.995,7.41L7.073,7.396L7.077,8.797L7.084,10.195L8.714,9.859C9.612,9.673 10.62,9.467 10.954,9.399C11.288,9.331 11.573,9.267 11.585,9.257C11.616,9.235 11.763,8.859 11.837,8.61C11.92,8.334 12.019,7.8 11.988,7.8C11.98,7.8 11.189,7.962 10.231,8.158C9.274,8.356 8.483,8.514 8.475,8.508C8.452,8.496 8.452,7.126 8.473,7.112C8.483,7.106 8.89,7.02 9.377,6.92C11.253,6.531 11.577,6.463 11.596,6.445C11.649,6.393 11.868,5.743 11.924,5.471C11.959,5.299 12.002,5.011 11.994,5.001C11.988,4.993 11.722,5.047 9.819,5.439C9.121,5.583 8.533,5.703 8.514,5.705C8.479,5.709 8.477,5.577 8.477,3.192V0.672L8.378,0.728C8.025,0.926 7.659,1.211 7.325,1.545L7.073,1.799L7.069,3.902L7.063,6.007L6.361,6.153C5.975,6.233 5.653,6.291 5.645,6.283C5.637,6.275 5.626,4.856 5.624,3.134L5.618,-0L5.428,0.116Z"
|
||||
android:fillColor="#333333"/>
|
||||
<path
|
||||
android:pathData="M11.718,10.656C11.336,10.734 9.455,11.124 8.436,11.332C7.92,11.438 7.486,11.536 7.474,11.548C7.445,11.578 7.348,11.824 7.261,12.086C7.195,12.286 7.108,12.683 7.082,12.891C7.069,12.999 7.071,13.007 7.106,12.997C7.129,12.991 7.583,12.895 8.116,12.785C8.65,12.675 9.643,12.47 10.324,12.33C11.006,12.19 11.573,12.068 11.588,12.058C11.619,12.034 11.749,11.706 11.825,11.464C11.877,11.296 11.965,10.886 11.994,10.676C12.007,10.587 12.027,10.59 11.718,10.656Z"
|
||||
android:fillColor="#333333"/>
|
||||
</vector>
|
23
app/src/main/res/drawable/circle_arab.xml
Normal file
23
app/src/main/res/drawable/circle_arab.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:strokeWidth="1"
|
||||
android:pathData="M8,14.667C11.682,14.667 14.667,11.682 14.667,8C14.667,4.318 11.682,1.334 8,1.334C4.318,1.334 1.334,4.318 1.334,8C1.334,11.682 4.318,14.667 8,14.667Z"
|
||||
android:strokeLineJoin="round"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#285747"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M5.009,10.506C5.728,10.358 6.061,10.289 6.228,10.252C6.312,10.233 6.342,10.225 6.354,10.221L6.384,10.206H6.385C6.429,10.185 6.452,10.171 6.492,10.127C6.529,10.087 6.573,10.028 6.643,9.932L6.584,9.954L6.558,9.964L6.552,9.966L6.483,9.985C6.463,9.99 6.437,9.996 6.408,10.003L6.192,10.049H6.191L4.558,10.385L4.447,10.408C4.421,10.481 4.392,10.566 4.371,10.638L5.009,10.506ZM6.769,9.756C6.826,9.673 6.88,9.593 6.923,9.528C6.946,9.493 6.966,9.463 6.98,9.44L6.997,9.413L7.001,8.98L7.004,8.484L7.005,8.249L7.235,8.2L7.605,8.122H7.607L8.024,8.036L8.029,8.035L8.075,8.027L8.417,7.966L8.418,8.313L8.42,9.13L8.422,9.591L9.024,9.466C9.549,9.357 10.137,9.237 10.332,9.197C10.414,9.181 10.491,9.165 10.552,9.151L10.626,8.939C10.628,8.934 10.628,8.928 10.63,8.922C10.46,8.957 10.251,8.999 10.026,9.045H10.027C9.748,9.103 9.492,9.155 9.306,9.192C9.212,9.211 9.135,9.226 9.081,9.236C9.054,9.241 9.031,9.245 9.015,9.248C9.007,9.249 8.998,9.251 8.989,9.252C8.986,9.252 8.977,9.254 8.967,9.255C8.963,9.255 8.951,9.255 8.937,9.255C8.93,9.255 8.914,9.254 8.896,9.251C8.889,9.25 8.853,9.242 8.809,9.219L8.808,9.222C8.8,9.218 8.794,9.212 8.788,9.208C8.783,9.205 8.777,9.203 8.772,9.199L8.773,9.197C8.736,9.17 8.713,9.142 8.702,9.127C8.687,9.105 8.677,9.084 8.673,9.073C8.664,9.051 8.66,9.032 8.658,9.024C8.655,9.008 8.652,8.994 8.651,8.987C8.65,8.972 8.649,8.955 8.648,8.942C8.647,8.915 8.645,8.88 8.645,8.841C8.643,8.762 8.642,8.659 8.642,8.557C8.642,8.455 8.643,8.351 8.645,8.272C8.645,8.234 8.646,8.198 8.647,8.171C8.648,8.158 8.649,8.143 8.65,8.129C8.651,8.123 8.652,8.109 8.655,8.094C8.657,8.087 8.66,8.07 8.667,8.051C8.671,8.041 8.678,8.023 8.689,8.003C8.699,7.986 8.726,7.943 8.778,7.907L8.787,7.901L8.796,7.896C8.818,7.884 8.838,7.876 8.841,7.875C8.848,7.872 8.853,7.871 8.856,7.87C8.862,7.868 8.867,7.867 8.87,7.866C8.876,7.865 8.883,7.862 8.888,7.861C8.897,7.859 8.91,7.857 8.924,7.854C8.953,7.847 8.993,7.838 9.041,7.828L9.411,7.751C9.959,7.638 10.279,7.572 10.463,7.532C10.498,7.525 10.528,7.518 10.554,7.513C10.563,7.488 10.573,7.46 10.583,7.431C10.599,7.382 10.615,7.332 10.629,7.286C10.441,7.325 10.171,7.38 9.786,7.459H9.785C9.582,7.501 9.395,7.539 9.257,7.567C9.188,7.581 9.13,7.593 9.09,7.602C9.07,7.606 9.054,7.608 9.042,7.61C9.041,7.611 9.017,7.616 8.999,7.618H8.997C8.947,7.623 8.871,7.618 8.798,7.568C8.733,7.524 8.704,7.466 8.692,7.438C8.671,7.389 8.666,7.341 8.664,7.326C8.659,7.282 8.658,7.216 8.656,7.122C8.653,6.926 8.653,6.556 8.653,5.862V4.949C8.641,4.96 8.628,4.969 8.616,4.979L8.479,5.107L8.417,5.17L8.415,6.277L8.412,7.505L8.411,7.742L8.18,7.79L7.771,7.875H7.77C7.655,7.899 7.549,7.919 7.471,7.934C7.432,7.941 7.397,7.946 7.371,7.95C7.359,7.952 7.344,7.955 7.33,7.956C7.324,7.957 7.311,7.958 7.296,7.958C7.289,7.958 7.273,7.957 7.253,7.954C7.243,7.953 7.224,7.95 7.201,7.942C7.192,7.939 7.176,7.933 7.156,7.923L7.09,7.875C7.049,7.836 7.031,7.794 7.025,7.782C7.018,7.765 7.014,7.751 7.012,7.743C7.008,7.728 7.006,7.716 7.005,7.711C7.003,7.701 7.002,7.692 7.002,7.688C7.001,7.681 7.001,7.673 7.001,7.669C7.001,7.659 6.999,7.647 6.999,7.634C6.998,7.607 6.998,7.569 6.997,7.521C6.996,7.427 6.995,7.291 6.994,7.124C6.992,6.79 6.99,6.332 6.989,5.829L6.986,4.562C6.956,4.587 6.926,4.611 6.898,4.637L6.789,4.747L6.773,4.765L6.769,6.248L6.762,7.845L6.761,8.082L6.529,8.13L5.987,8.242H5.986C5.689,8.304 5.285,8.387 5.09,8.427H5.089C4.994,8.447 4.905,8.464 4.837,8.479C4.801,8.571 4.778,8.639 4.758,8.71L5.725,8.51H5.727C5.902,8.474 6.064,8.441 6.185,8.416C6.244,8.404 6.294,8.393 6.329,8.386C6.347,8.382 6.361,8.379 6.371,8.377L6.387,8.374L6.414,8.368L6.769,8.29V9.756Z"
|
||||
android:strokeWidth="0.583333"
|
||||
android:fillColor="#295747"
|
||||
android:strokeColor="#295747"/>
|
||||
<path
|
||||
android:pathData="M8.675,11.172H8.676C8.988,11.108 9.567,10.989 9.964,10.908C10.162,10.867 10.343,10.829 10.476,10.8C10.504,10.794 10.53,10.788 10.554,10.783C10.576,10.726 10.601,10.659 10.619,10.603V10.602C10.623,10.59 10.625,10.574 10.63,10.556L8.979,10.896C8.83,10.927 8.693,10.957 8.594,10.979C8.585,10.981 8.577,10.983 8.569,10.985L8.513,11.142C8.506,11.161 8.501,11.184 8.494,11.21L8.675,11.172Z"
|
||||
android:strokeWidth="0.583333"
|
||||
android:fillColor="#295747"
|
||||
android:strokeColor="#295747"/>
|
||||
</vector>
|
9
app/src/main/res/drawable/filter_new.xml
Normal file
9
app/src/main/res/drawable/filter_new.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="20dp"
|
||||
android:height="20dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M13.45,0.209H2.55C1.533,0.209 0.708,1.034 0.708,2.05C0.708,2.492 0.867,2.917 1.15,3.25L5.458,8.275C5.617,8.467 5.708,8.709 5.708,8.95V13.65C5.708,14.158 5.967,14.625 6.4,14.892C6.633,15.033 6.9,15.108 7.167,15.108C7.392,15.108 7.608,15.059 7.817,14.95L9.483,14.117C9.983,13.867 10.292,13.367 10.292,12.809V8.942C10.292,8.692 10.383,8.45 10.542,8.267L14.85,3.242C15.133,2.909 15.292,2.484 15.292,2.042C15.292,1.025 14.467,0.2 13.45,0.2V0.209ZM13.9,2.434L9.592,7.459C9.233,7.875 9.042,8.4 9.042,8.95V12.817C9.042,12.9 9,12.967 8.925,13L7.258,13.833C7.167,13.884 7.092,13.85 7.058,13.825C7.025,13.8 6.958,13.75 6.958,13.65V8.95C6.958,8.4 6.767,7.875 6.408,7.459L2.1,2.434C2.008,2.325 1.958,2.192 1.958,2.05C1.958,1.725 2.225,1.459 2.55,1.459H13.45C13.775,1.459 14.042,1.725 14.042,2.05C14.042,2.192 13.992,2.325 13.9,2.434Z"
|
||||
android:fillColor="#285747"/>
|
||||
</vector>
|
BIN
app/src/main/res/drawable/profile.png
Normal file
BIN
app/src/main/res/drawable/profile.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
17
app/src/main/res/drawable/rounded_filter.xml
Normal file
17
app/src/main/res/drawable/rounded_filter.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<stroke android:color="@color/main_color"
|
||||
android:width="@dimen/dp_1"
|
||||
/>
|
||||
|
||||
<corners android:radius="@dimen/dp_8" />
|
||||
|
||||
<padding
|
||||
android:left="@dimen/dp_8"
|
||||
android:top="@dimen/dp_8"
|
||||
android:right="@dimen/dp_8"
|
||||
android:bottom="@dimen/dp_6" />
|
||||
|
||||
</shape>
|
|
@ -198,18 +198,37 @@
|
|||
|
||||
android:textSize="@dimen/sp_14"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/txtValue"
|
||||
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="$ 300"
|
||||
android:orientation="horizontal"
|
||||
android:layout_weight="0.5"
|
||||
android:textAlignment="textEnd"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:fontFamily="@font/montserratregular"
|
||||
android:textSize="@dimen/sp_14"
|
||||
/>
|
||||
android:layout_gravity="end"
|
||||
android:gravity="end"
|
||||
>
|
||||
<ImageView
|
||||
android:layout_width="@dimen/dp_16"
|
||||
android:layout_height="@dimen/dp_16"
|
||||
android:src="@drawable/arab"
|
||||
android:layout_marginTop="@dimen/dp_2"
|
||||
android:layout_marginEnd="@dimen/dp_2"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/txtValue"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="300"
|
||||
android:textAlignment="textEnd"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:fontFamily="@font/montserratregular"
|
||||
android:textSize="@dimen/sp_14"
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -276,18 +295,33 @@
|
|||
|
||||
android:textSize="@dimen/sp_14"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/txtTotal"
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="$ 3000"
|
||||
android:orientation="horizontal"
|
||||
android:layout_weight="0.5"
|
||||
android:textAlignment="textEnd"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:fontFamily="@font/montserratmedium"
|
||||
android:textSize="@dimen/sp_14"
|
||||
/>
|
||||
android:layout_gravity="end"
|
||||
android:gravity="end"
|
||||
>
|
||||
<ImageView
|
||||
android:layout_width="@dimen/dp_16"
|
||||
android:layout_height="@dimen/dp_16"
|
||||
android:src="@drawable/arab"
|
||||
android:layout_marginTop="@dimen/dp_4"
|
||||
android:layout_marginEnd="@dimen/dp_2"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/txtTotal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:fontFamily="@font/montserratmedium"
|
||||
android:textSize="@dimen/sp_14"
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -553,32 +553,5 @@
|
|||
|
||||
|
||||
|
||||
|
||||
<androidx.camera.view.PreviewView
|
||||
android:id="@+id/viewFinder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginTop="16dp"
|
||||
android:elevation="@dimen/dp_4"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:src="@drawable/close_circle"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:visibility="gone"
|
||||
android:elevation="@dimen/dp_8"
|
||||
/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</ScrollView>
|
|
@ -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 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llSearchView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@+id/rlTop"
|
||||
android:orientation="horizontal"
|
||||
android:layout_margin="@dimen/dp_16"
|
||||
>
|
||||
<EditText
|
||||
android:id="@+id/etSearch"
|
||||
android:layout_weight="0.9"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/search"
|
||||
android:textSize="@dimen/sp_14"
|
||||
app:layout_constraintTop_toBottomOf="@+id/rlTop"
|
||||
app:layout_constraintStart_toEndOf="@id/leftGuide"
|
||||
app:layout_constraintEnd_toStartOf="@+id/llFilter"
|
||||
android:drawableStart="@drawable/search"
|
||||
android:background="@drawable/rounded_search_background"
|
||||
android:paddingStart="@dimen/dp_12"
|
||||
android:layout_marginTop="@dimen/dp_16"
|
||||
android:fontFamily="@font/montserratregular"
|
||||
android:layout_marginEnd="@dimen/dp_16"
|
||||
android:drawablePadding="@dimen/dp_8" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/ivFilter"
|
||||
<LinearLayout
|
||||
android:id="@+id/llFilter"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="0.05"
|
||||
android:src="@drawable/filter"/>
|
||||
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"
|
||||
>
|
||||
<TextView
|
||||
android:id="@+id/txtStatusShow"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/sp_12"
|
||||
android:fontFamily="@font/montserratregular"
|
||||
android:paddingEnd="@dimen/dp_8"
|
||||
android:paddingStart="@dimen/dp_4"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
android:textColor="@color/main_color"/>
|
||||
<ImageView
|
||||
android:id="@+id/ivFilter"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/filter_new"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipeRefresh"
|
||||
|
@ -136,7 +151,7 @@
|
|||
android:layout_height="0dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginTop="@dimen/dp_12"
|
||||
app:layout_constraintTop_toBottomOf="@+id/llSearchView">
|
||||
app:layout_constraintTop_toBottomOf="@+id/etSearch">
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvList"
|
||||
android:layout_width="match_parent"
|
||||
|
|
|
@ -158,7 +158,7 @@
|
|||
android:layout_height="@dimen/dp_16"
|
||||
|
||||
android:layout_marginTop="@dimen/dp_4"
|
||||
android:src="@drawable/dollar_circle"/>
|
||||
android:src="@drawable/circle_arab"/>
|
||||
<TextView
|
||||
android:id="@+id/txtPayment"
|
||||
android:layout_width="0dp"
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
|
||||
>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txtInProgress"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -80,5 +81,28 @@
|
|||
android:textColor="@android:color/black"
|
||||
android:fontFamily="@font/montserratregular"
|
||||
android:textSize="@dimen/sp_14" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.5dp"
|
||||
android:layout_marginTop="@dimen/dp_8"
|
||||
android:layout_marginBottom="@dimen/dp_8"
|
||||
android:background="@color/outline_grey_color"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txtAll"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/all"
|
||||
android:layout_marginStart="@dimen/dp_12"
|
||||
android:textColor="@android:color/black"
|
||||
android:paddingTop="@dimen/dp_8"
|
||||
android:paddingBottom="@dimen/dp_8"
|
||||
android:fontFamily="@font/montserratregular"
|
||||
android:textSize="@dimen/sp_14" />
|
||||
|
||||
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
|
@ -111,6 +111,8 @@
|
|||
<string name="please_enter_valid_password">يجب أن تتكون كلمة المرور من 6 أحرف على الأقل وتتضمن حرفًا كبيرًا واحدًا ورقمًا واحدًا وحرفًا خاصًا واحدًا</string>
|
||||
<string name="new_password">كلمة المرور الجديدة</string>
|
||||
<string name="please_enter_new_password">الرجاء إدخال كلمة المرور الجديدة</string>
|
||||
<string name="camera_permission_denied">تم رفض إذن Cemera</string>
|
||||
<string name="all">الجميع</string>
|
||||
<string-array name="availability">
|
||||
<item>@string/yes</item>
|
||||
<item>@string/no</item>
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
<string name="status">Status</string>
|
||||
<string name="in_progress">In Progress</string>
|
||||
<string name="completed">Completed</string>
|
||||
<string name="all">All</string>
|
||||
<string name="site_detail">Site Detail</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="please_enter_your_name">Please enter your name</string>
|
||||
|
@ -77,6 +78,7 @@
|
|||
<string name="gallery">Gallery</string>
|
||||
<string name="camera">Camera</string>
|
||||
<string name="location_permission_denied">Location permission denied</string>
|
||||
<string name="camera_permission_denied">Cemera permission denied</string>
|
||||
<string name="could_not_fetch_location">Couldn\'t fetch location</string>
|
||||
<string name="seconds_ago">seconds ago</string>
|
||||
<string name="minutes_ago">minutes ago</string>
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<external-files-path
|
||||
<external-files-path name="my_images" path="." />
|
||||
<files-path
|
||||
name="my_images"
|
||||
path="Pictures" />
|
||||
path="." />
|
||||
<external-path
|
||||
name="my_images"
|
||||
path="."/>
|
||||
</paths>
|
Loading…
Reference in a new issue