diff --git a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt index ae65801a..487b0031 100644 --- a/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/base/BaseFragment.kt @@ -28,11 +28,11 @@ import es.verdnatura.presentation.view.feature.main.activity.MainActivity import org.json.JSONObject import org.koin.androidx.viewmodel.ext.android.viewModel import timber.log.Timber +import timber.log.Timber.d import java.util.* import kotlin.collections.Map.* import kotlin.reflect.KClass - abstract class BaseFragment( viewModelClass: KClass ) : Fragment() { @@ -60,7 +60,6 @@ abstract class BaseFragment( protected val WORKFORMSELECTED = "workFormSelected" protected val SUPPLIERID = "SUPPLIERID" - protected val ITEMPACKING = "itemPackingType" protected val ITEMPACKINGFK = "itemPackingTypeFk" @@ -96,7 +95,6 @@ abstract class BaseFragment( savedInstanceState: Bundle? ): View? = inflater.inflate(getLayoutId(), container, false) - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initDataBinding() @@ -107,10 +105,8 @@ abstract class BaseFragment( //requestCallPhonePermissionNew() init() - } - @LayoutRes abstract fun getLayoutId(): Int open fun init() {} @@ -196,7 +192,6 @@ abstract class BaseFragment( R.drawable.ic_sort -> getString(R.string.sortRouteSalix) R.drawable.ic_sign_ticket -> getString(R.string.signed) R.drawable.ic_send -> getString(R.string.sendDriverRoute) - R.drawable.ic_remove_checks -> getString(R.string.deleteChecked) else -> { "" } @@ -204,7 +199,6 @@ abstract class BaseFragment( } - private fun requestCallPhonePermission() { val permissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission() @@ -243,9 +237,9 @@ abstract class BaseFragment( ) { isGranted -> if (isGranted) { - Timber.i("permisos ok") + d("permisos ok") } else { - Timber.i("Denegados permisos") + d("Denegados permisos") } } @@ -389,7 +383,6 @@ abstract class BaseFragment( val keys: Map = prefs.all for (Map in keys) { - var json2 = JSONObject(Map.value.toString()) listForms.add( @@ -400,7 +393,6 @@ abstract class BaseFragment( json2.get("isShowDelete").toString().toBoolean(), json2.get("created") as Long - ) ) @@ -469,11 +461,9 @@ abstract class BaseFragment( "", created = Calendar.getInstance().timeInMillis + Calendar.getInstance().timeInMillis - ) ) - } fun saveData(name: String, value: Any) { @@ -483,7 +473,6 @@ abstract class BaseFragment( when (name) { - //ANDROID_ID -> editor.putString(name, value.toString()) "base_url" -> { val preferences = PreferenceManager.getDefaultSharedPreferences(context) val editorPref = preferences.edit() @@ -514,7 +503,6 @@ abstract class BaseFragment( } editor.commit() - } fun saveDataInt(name: String, value: Int) { @@ -551,7 +539,6 @@ abstract class BaseFragment( } - fun saveDataLong(name: String, value: Long) { val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) @@ -579,32 +566,16 @@ abstract class BaseFragment( return lista } - fun saveBuyer(buyernickname: String) { - val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) - val editor = prefs.edit() - editor.putString(BUYER, buyernickname) - editor.apply() + fun saveBuyer(buyernickname: String, buyerid: String) { + val prefsEditor: SharedPreferences.Editor = mobileApplication.getPrefsEditor() + prefsEditor.putString(BUYER, buyernickname) + prefsEditor.putString(BUYERID, buyerid) + prefsEditor.apply() } - fun saveBuyerId(buyerid: String) { - val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) - val editor = prefs.edit() - editor.putString(BUYERID, buyerid) - editor.apply() - } - - fun getIMEI(): String { - val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) - val imei = prefs.getString("IMEI", "0") - return imei.toString() - } - - fun getMessageFromJSON(json: String): String { val gson = Gson() var message = "" - // val mapType = object : TypeToken>() {}.type - var tutorialMap: Map = gson.fromJson(json, object : TypeToken>() {}.type) tutorialMap.forEach { @@ -618,9 +589,7 @@ abstract class BaseFragment( fun getListFromJSON(json: String): List { val gson = Gson() var list = mutableListOf() - // val mapType = object : TypeToken>() {}.type - var tutorialMap: Map = gson.fromJson(json, object : TypeToken>() {}.type) tutorialMap.forEach { @@ -634,12 +603,10 @@ abstract class BaseFragment( } fun database(myContext: Context): DeliveryDatabase { - - val db = Room.databaseBuilder( + return Room.databaseBuilder( myContext, DeliveryDatabase::class.java, "expediciones.db" ).build() - return db } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt index e6d561f9..cdbeb787 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/inventario/fragment/InventaryFragment.kt @@ -27,27 +27,19 @@ import ir.mirrajabi.searchdialog.core.SearchResultListener class InventaryFragment : BaseFragment(InventaryViewModel::class) { - private var adapter: InventoryAdapter? = null private lateinit var customDialogInput: CustomDialogInput private var listInvetory: ArrayList = ArrayList() private var listInvetoryAux: ArrayList = ArrayList() private lateinit var customDialog: CustomDialog private var pasillerosItemClickListener: OnPasillerosItemClickListener? = null - - // private var reload = false - // private var hideLoad = true private var layoutManager: LinearLayoutManager? = null private var firstVisiblePosition = 0 private var secondVisiblePosition = 1 private lateinit var itemClicked: ItemInventaryVO - - - //sergio : cmbios para insertar lista compradores en inventary en el searchable private val items = ArrayList() private lateinit var buyerId: String - companion object { fun newInstance() = InventaryFragment() } @@ -59,7 +51,6 @@ class InventaryFragment : super.onAttach(context) } - override fun init() { binding.splashProgress.visibility = View.VISIBLE @@ -81,9 +72,8 @@ class InventaryFragment : SearchResultListener { baseSearchDialogCompat, nombre, position -> binding.filterBuyer.text = (nombre.title) - saveBuyer(nombre.getBuyerNickname()) - saveBuyerId(nombre.getBuyerId()) buyerId = nombre.getBuyerId() + saveBuyer(nombre.getBuyerNickname(),nombre.getBuyerId()) viewModel.getInventory( nombre.getBuyerId().toInt(), getDataInt(WAREHOUSEFK) @@ -96,7 +86,6 @@ class InventaryFragment : customDialogInput = CustomDialogInput(requireContext()) customDialog = CustomDialog(requireContext()) - binding.splashProgress.visibility = View.VISIBLE binding.mainToolbar.toolbarTitle.text = getString(R.string.itemShelvingRadar) setToolBar() @@ -106,19 +95,15 @@ class InventaryFragment : private fun setToolBar() { - ma.hideBottomNavigation(View.GONE) - val listIcons: ArrayList = ArrayList() val iconReload = ImageView(context) - iconReload.setImageResource(R.drawable.ic_autorenew_black_24dp) + iconReload.setImageResource(R.drawable.ic_autorenew_black_24dp) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { iconReload.tooltipText = getTooltip(R.drawable.ic_autorenew_black_24dp) - } listIcons.add(iconReload) - binding.mainToolbar.toolbarIcons.adapter = ToolBarAdapterTooltip(listIcons, object : OnOptionsSelectedListener { override fun onOptionsItemSelected(item: Drawable) { @@ -156,7 +141,6 @@ class InventaryFragment : binding.mainToolbar.backButton.setOnClickListener { requireActivity().onBackPressed() } - binding.filterItemFk.setOnKeyListener { v, keyCode, event -> if (binding.filterItemFk.text.toString().isEmpty()) { @@ -205,14 +189,11 @@ class InventaryFragment : override fun observeViewModel() { with(viewModel) { - - //sergio: para compradores buyersList.observe(viewLifecycleOwner, Observer { binding.splashProgress.visibility = View.GONE createBuyerList(it.list) }) - inventaryList.observe(viewLifecycleOwner, Observer { binding.splashProgress.visibility = View.GONE listInvetory = ArrayList() @@ -257,10 +238,8 @@ class InventaryFragment : ) } - }) - response.observe(viewLifecycleOwner, Observer { binding.splashProgress.visibility = View.GONE if (it.isError) { @@ -294,6 +273,7 @@ class InventaryFragment : try { items.add(SearchBuyerModel(buyer.nickname, buyer.userFk)) } catch (e: Exception) { + } } } diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt index 57228aaa..575709d3 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/login/fragment/LoginFragment.kt @@ -34,7 +34,6 @@ import java.io.File import java.util.* import kotlin.system.exitProcess - class LoginFragment(var imageUri: Uri?) : BaseFragment(LoginViewModel::class) { @@ -44,7 +43,6 @@ class LoginFragment(var imageUri: Uri?) : private lateinit var customDialogList: CustomDialogList private lateinit var listForms: List - companion object { fun newInstance(imageUri: Uri?) = LoginFragment(imageUri) } @@ -56,13 +54,9 @@ class LoginFragment(var imageUri: Uri?) : customDialogList = CustomDialogList(requireContext()) customDialog = CustomDialog(requireContext()) - /*Tarea 4815*/ createFolderSerial() saveIdentifiers() checkUser() - //Tarea 5613 - //viewModel.getAccessTokenConfigs() - binding.buttonLogin.setOnClickListener { binding.splashProgress.visibility = View.VISIBLE viewModel.loginSalix( @@ -72,7 +66,6 @@ class LoginFragment(var imageUri: Uri?) : ) } -//Tarea 5613 se quita porque debe hacerse login. Ya no se guarda user y password per if (getData(TOKEN).isNotBlank() && binding.switchRemember.isChecked) { viewModel.operator_add() } @@ -94,8 +87,6 @@ class LoginFragment(var imageUri: Uri?) : // se crean/listan las opciones de formas de trabajo //deleteWorkForm("all") listForms = getWorkForm().sortedBy { it.created } - - binding.edittextServer.keyListener = null binding.edittextServer.setOnLongClickListener { showWorkingForms() @@ -133,7 +124,7 @@ class LoginFragment(var imageUri: Uri?) : override fun OnWorkFormsItemRowClickListener(item: WorkForms) { when (item.name) { - "Añadir..." -> { + getString(R.string.add) -> { showNewForm() } @@ -166,11 +157,9 @@ class LoginFragment(var imageUri: Uri?) : saveData(WORKFORMSELECTED, "Producción") exitProcess(1) - } .show() - } }) @@ -188,7 +177,6 @@ class LoginFragment(var imageUri: Uri?) : } .show() - } @SuppressLint("HardwareIds") @@ -352,12 +340,6 @@ class LoginFragment(var imageUri: Uri?) : } - /* workerId.observe(viewLifecycleOwner) { - if (!it.isError) { - saveUserFkPref(it.Id.toString()) - } - }*/ - //Tarea 5870 workerOperator.observe(viewLifecycleOwner) { if (it.isError) { customDialog.setTitle(getString(R.string.info)) @@ -366,7 +348,7 @@ class LoginFragment(var imageUri: Uri?) : customDialog.dismiss() }.show() } else { - saveDataOperator(it) + saveDataOperator(it) } } @@ -429,18 +411,11 @@ class LoginFragment(var imageUri: Uri?) : //saveTokenPref("RTymwJzRuVchAMY5u8xG2wpgcjPf7t0DQImLvMsTdNFmbFwDiVsa8lA6fr1XSaBo","2026-29-06") // local //saveTokenPref("1ZGV1OGhpcrZZwvNALXnPeSVe0GCE4tgpKbv8nZu4EXay75QZrVY5GZDnpsqlxFz",it.ttl ) - //Tarea 5613 borrar que se guarde - /* saveUserAccesPref( - binding.edittextUsername.text.toString(), - binding.edittextPassword.text.toString() - )*/ + app.userName = binding.edittextUsername.text.toString() app.userPassword = binding.edittextPassword.text.toString() - //Tarea 5613 viewModel.getAccessTokenConfigs() - //viewModel.operator_add() - } } loadAccessConfigSalixList.observe(viewLifecycleOwner, Observer { event -> @@ -489,26 +464,10 @@ class LoginFragment(var imageUri: Uri?) : editor.apply() } - private fun saveUserFkPref(workerId: String) { - val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) - val editor = prefs.edit() - editor.putString(USERFK, workerId) - editor.apply() - } - - private fun saveUserAccesPref(user: String, password: String) { - val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) - val editor = prefs.edit() - editor.putString(USER, user) - editor.putString(PASSWORD, password) - editor.apply() - } - private fun saveRemember(remember: Boolean) { - val prefs: SharedPreferences = requireActivity().getSharedPreferences(PREFS_USER, 0) - val editor = prefs.edit() - editor.putBoolean(REMEMBER, remember) - editor.apply() + val prefsEditor = (mobileApplication).getPrefsEditor() + prefsEditor.putBoolean(REMEMBER, remember) + prefsEditor.apply() } private fun goToMain() { diff --git a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt index 4b531f6a..0e816bec 100644 --- a/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt +++ b/app/src/main/java/es/verdnatura/presentation/view/feature/main/activity/MainActivity.kt @@ -102,17 +102,15 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL private var lastBottomMenuItemSelected: ItemMenuVO? = null private lateinit var customDialog: CustomDialogMainActivity - var firstItem: ItemMenuVO? = null - var fm = supportFragmentManager + private var firstItem: ItemMenuVO? = null + private var fm = supportFragmentManager var mperror: MediaPlayer? = null var mpok: MediaPlayer? = null - var mpErrorRepeat: MediaPlayer? = null + private var mpErrorRepeat: MediaPlayer? = null private var scheduledFuture: ScheduledFuture<*>? = null private var scheduledExecutor: ScheduledExecutorService? = null private val _renewTokenResponse = MutableLiveData() private lateinit var networkUtils: NetworkUtils - - //Tarea #4815 private var myTimeUserInteraction = (System.currentTimeMillis() / 1000 / 3600) private var comeFromDelivery: Boolean? = null override fun getLayoutId(): Int = R.layout.activity_main @@ -120,7 +118,6 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL override fun onPause() { super.onPause() scheduledFuture?.cancel(false) - // networkUtils.unregisterNetworkCallback() } @@ -200,123 +197,36 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL @RequiresApi(Build.VERSION_CODES.O) private fun setFragments() { try { - val extras = intent.extras val uriImage = intent.data - - if (extras != null && extras.containsKey("menu")) { - comeFromDelivery = true - val option = extras.getString("menu") - //Tarea 5613 borrar que se guarde - /* saveDataInt("USERFK", extras.getString("userfk")!!.toInt()) - saveUserAccesPref( - extras.getString("user").toString(), - extras.getString("password").toString() - - )*/ - // A borrar toda esta parte cuando está oficialmente delivery en picking - var app = application as MobileApplication - app.userName = extras.getString("user").toString() - app.userId = extras.getString("userfk").toString().toInt() - app.userPassword = extras.getString("password").toString() - val prefs: SharedPreferences = getSharedPreferences("es.verdnatura.user.prefs", 0) - val editor = prefs.edit() - editor.putString("token", extras.getString("token").toString()) - editor.commit() - - - when (option) { - "log" -> onPasillerosItemClickListener( - PasillerosItemVO( - 30, - R.drawable.expedition_find, - getString(R.string.titleLog), - R.string.titleLog, - getString( - R.string.titleLogDescrip - ) - - ), getString(R.string.titleLog) - ) - - "info" -> onPasillerosItemClickListener( - PasillerosItemVO( - 30, - R.drawable.ic_info, - getString(R.string.titleInfo), - R.string.titleInfo, - getString( - R.string.titleInfoDescription - ) - - ), getString(R.string.titleInfo) - ) - - "summary" -> { - - onPasillerosItemClickListener( - PasillerosItemVO( - 30, - R.drawable.ic_info, - getString(R.string.titleDeliverySummary), - R.string.titleDeliverySummary, - getString( - R.string.titleDeliverySummary - ) - - ), extras.getString("route").toString() + startRepeatingTask( + (application as MobileApplication).getPrefsShared().getLong("renewInterval", 0) + ) + if (uriImage != null && uriImage is Uri) { + onPasillerosItemClickListener( + PasillerosItemVO( + 30, + R.drawable.photo_camera, + getString(R.string.titlePhotos), + R.string.titlePhotos, + getString( + R.string.titlePhotosDescrip ) - } - "unload" -> { - onPasillerosItemClickListener( - PasillerosItemVO( - 30, - R.drawable.ic_info, - getString(R.string.titleInfo), - R.string.titleInfo, - getString( - R.string.titleInfoDescription - ) - - ), getString(R.string.titleInfo) - ) - } - - } - - } else { - //Tarea 5613 - startRepeatingTask( - (application as MobileApplication).getPrefsShared().getLong("renewInterval", 0) + ), uriImage.toString() + ) + } else { + if (haveSector() && havePrinter()) addFragment( + PasilleroFragment.newInstance(getString(R.string.main), true), + R.id.main_frame_layout, + PasilleroFragment.TAG, + false + ) + else addFragment( + AjustesFragment.newInstance(), + R.id.main_frame_layout, + AjustesFragment.TAG, + false ) - if (uriImage != null && uriImage is Uri) { - onPasillerosItemClickListener( - PasillerosItemVO( - 30, - R.drawable.photo_camera, - getString(R.string.titlePhotos), - R.string.titlePhotos, - getString( - R.string.titlePhotosDescrip - ) - - ), uriImage.toString() - ) - } else { - if (haveSector() && havePrinter()) addFragment( - PasilleroFragment.newInstance(getString(R.string.main), true), - R.id.main_frame_layout, - PasilleroFragment.TAG, - false - ) - else addFragment( - AjustesFragment.newInstance(), - R.id.main_frame_layout, - AjustesFragment.TAG, - false - ) - - } } @@ -333,25 +243,6 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } - fun saveDataInt(name: String, value: Int) { - val prefs: SharedPreferences = getSharedPreferences("es.verdnatura.user.prefs", 0) - val editor = prefs.edit() - - when (name) { - name -> editor.putInt(name, value) - } - editor.apply() - - } - - private fun saveUserAccesPref(user: String, password: String) { - val prefs: SharedPreferences = this.getSharedPreferences("es.verdnatura.user.prefs", 0) - val editor = prefs.edit() - editor.putString("user", user) - editor.putString("password", password) - editor.apply() - } - fun havePrinter(): Boolean { val prefs: SharedPreferences = getSharedPreferences("es.verdnatura.user.prefs", 0) val printerFk = prefs.getInt("printerFk", -1) @@ -362,9 +253,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL @DelicateCoroutinesApi fun setBottomMenuFragment() { val bottomMenu = binding.mainBottomNavigation - //iconos abajo sin texto bottomMenu.labelVisibilityMode = LABEL_VISIBILITY_UNLABELED - bottomMenu.itemIconTintList = null GlobalScope.launch(Dispatchers.Main) { val bottomMenuItems: ArrayList = ArrayList() @@ -985,7 +874,7 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL try { fm.executePendingTransactions() } catch (ex: Exception) { - d("${ex.message}") + d("$ex") } if (fm.backStackEntryCount > 0) { @@ -1105,8 +994,6 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL ControlVehiculoFragment.TAG, true ) - //sergio: de esta manera la llamada del fragment no se vuelve a repetir. - // addFragmentOnTop(ControlVehiculoFragment.newInstance(tag)) } fun openSummaryFragment(route: Int, state: String) { @@ -1132,7 +1019,6 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL true ) - //addFragmentOnTop(SacadorFragment.newInstance()) } @@ -1154,16 +1040,11 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } fun openFragmentExpeditionState() { - //delete_Fragments() - // fm.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE) - // addFragment(ExpeditionStateFragment.newInstance("main"),R.id.main_frame_layout, ExpeditionStateFragment.TAG,false) - addFragmentOnTop(ExpeditionStateFragment.newInstance(getString(R.string.titleExpeditionState))) } fun openFragmentReubications(list: MutableList, shelving: String) { - addFragmentOnTop(ReubicationCollectionFragment.newInstance(list, shelving)) } @@ -1204,7 +1085,6 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } - /*Tarea 4815*/ override fun onUserInteraction() { super.onUserInteraction() if ((System.currentTimeMillis() / 1000 / 3600) - myTimeUserInteraction > 4) { @@ -1224,22 +1104,11 @@ class MainActivity : BaseActivity(), OnPasillerosItemClickL } @RequiresApi(Build.VERSION_CODES.O) -//Tarea 5613 fun checkTokenRenew() { val prefs = (application as MobileApplication).getPrefsShared() val renewPeriod = prefs.getLong("renewPeriod", 0) - var min = minOf(prefs.getLong("ttl", 0), renewPeriod) * 1000 - /* println("Renovar: ****************************") - println("Renovar: el min es " + min) - println("Renovar: el ttl es " + prefs.getLong("ttl", 0)) - println("Renovar: el renewPeriod será $renewPeriod") - println("Renovar segundos :" + (min + Date().time) / 1000) - println("Renovar token created :" + prefs.getLong("tokenCreated", 0)) - println("Renovar fecha vida:" + (min + prefs.getLong("ttl", 0))) - println("Renovar fecha hui:" + Date().time) - println("Renovar: ****************************") - */ + val min = minOf(prefs.getLong("ttl", 0), renewPeriod) * 1000 if (Date().time < (min + prefs.getLong("tokenCreated", 0))) { val loginViewModel = LoginViewModel(application as MobileApplication) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 31fbdccc..681cc11b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -690,6 +690,7 @@ Para guardar pulsa el icono del tick de la parte superior. ¿Quieres guardarlos? SI NO + Añadir... diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 3f22ef5e..d6556581 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -690,6 +690,7 @@ Pour sauvegarder, appuyez sur l\'icône de coche en haut. Voulez-vous les sauvegarder ? OUI NON + Añadir... diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index cf485147..a03bce1d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -690,6 +690,7 @@ Para salvar, toque no ícone de marca de seleção na parte superior. Você quer salvá-los? SIM NÃO + Añadir... diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2b1109f0..e1c261af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -689,5 +689,6 @@ To save, tap the checkmark icon at the top. Do you want to save them? YES NO + Añadir...