diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index 66990239..8ccd1b09 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -11,6 +11,7 @@ import android.widget.EditText; import android.widget.FrameLayout; import android.widget.RadioButton; import android.widget.RadioGroup; +import android.widget.TextView; import androidx.annotation.ColorRes; import androidx.appcompat.widget.AppCompatCheckBox; @@ -37,6 +38,8 @@ import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; import java.util.Locale; @@ -45,6 +48,7 @@ import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.LocaleDecimalKeyListener; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityNumber; @@ -975,4 +979,64 @@ public class Converters { view.setLayoutParams(layoutParams); } -} \ No newline at end of file + /** + * BindingAdapter per bindare una LocalDate diretta su una TextView con un formato specificato. + * Esempio di utilizzo in XML: + * app:localDateText="@{myLocalDate}" app:dateFormat="@{@string/my_date_format}" + */ + @BindingAdapter(value = {"localDateText", "dateFormat"}, requireAll = false) + public static void bindLocalDateText(TextView view, LocalDate date, String dateFormat) { + if (date == null) { + view.setText(""); + return; + } + String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); + view.setText(date.format(formatter)); + } + + @BindingAdapter(value = {"localDateTimeText", "dateFormat"}, requireAll = false) + public static void bindLocalDateText(TextView view, LocalDateTime date, String dateFormat) { + if (date == null) { + view.setText(""); + return; + } + String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy hh:mm"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); + view.setText(date.format(formatter)); + } + + /** + * BindingAdapter per bindare una ObservableField su una TextView con un formato specificato. + * Esempio di utilizzo in XML: + * app:localDateObservableText="@{myObservableLocalDate}" app:dateFormat="@{@string/my_date_format}" + */ + @BindingAdapter(value = {"localDateObservableText", "dateFormat"}, requireAll = false) + public static void bindObservableLocalDateText(TextView view, ObservableField observableDate, String dateFormat) { + if (observableDate == null) { + view.setText(""); + return; + } + LocalDate date = observableDate.get(); + if (date == null) { + view.setText(""); + return; + } + String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy"; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); + view.setText(date.format(formatter)); + } + + /** + * BindingAdapter che applica automaticamente il KeyListener localizzato + * ai campi con inputType numberDecimal, permettendo l'uso della virgola + * come separatore decimale in base al locale del dispositivo. + */ + @BindingAdapter("useLocaleDecimalInput") + public static void setLocaleDecimalInput(EditText view, boolean useLocaleInput) { + if (useLocaleInput) { + view.setKeyListener(LocaleDecimalKeyListener.getInstance()); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/DecimalInputFilter.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/DecimalInputFilter.java new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/DecimalInputFilter.java @@ -0,0 +1 @@ + diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/LocaleDecimalKeyListener.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/LocaleDecimalKeyListener.java new file mode 100644 index 00000000..18db4ddd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/LocaleDecimalKeyListener.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.core.utility; + +import android.text.method.DigitsKeyListener; + +import java.text.DecimalFormatSymbols; +import java.util.Locale; + +/** + * KeyListener personalizzato che accetta numeri decimali + * usando il separatore decimale del locale corrente (virgola per italiano) + */ +public class LocaleDecimalKeyListener { + + /** + * Ottiene un'istanza del KeyListener per il locale corrente + */ + public static DigitsKeyListener getInstance() { + return getInstance(Locale.getDefault()); + } + + /** + * Ottiene un'istanza del KeyListener per un locale specifico + */ + public static DigitsKeyListener getInstance(Locale locale) { + DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale); + char decimalSeparator = symbols.getDecimalSeparator(); + return DigitsKeyListener.getInstance("0123456789" + decimalSeparator); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityResources.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityResources.java index bf222acf..dabced17 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityResources.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityResources.java @@ -3,9 +3,15 @@ package it.integry.integrywmsnative.core.utility; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.content.res.ColorStateList; +import android.util.TypedValue; +import androidx.annotation.AttrRes; +import androidx.annotation.ColorInt; +import androidx.annotation.ColorRes; import androidx.annotation.RawRes; import androidx.annotation.StringRes; +import androidx.core.content.ContextCompat; import java.io.BufferedReader; import java.io.IOException; @@ -69,4 +75,23 @@ public class UtilityResources { return 0; } + + + + + // Funzione di utilità per ottenere un colore da un attributo del tema + public static @ColorRes int getColorResourceFromAttr(Context context, @AttrRes int attrRes) { + TypedValue typedValue = new TypedValue(); + context.getTheme().resolveAttribute(attrRes, typedValue, true); + return typedValue.data; + } + + public static @ColorInt int getColorFromAttr(Context context, @AttrRes int attrRes) { + return ContextCompat.getColor(context, getColorResourceFromAttr(context, attrRes)); + } + + public static ColorStateList getColorStateListFromAttr(Context context, @AttrRes int attrRes) { + return ColorStateList.valueOf(getColorResourceFromAttr(context, attrRes)); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java index bf8f8a83..6010f2e8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/ui/AccettazioneBollaPickingListAdapter.java @@ -114,7 +114,7 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd } else if (position % 2 == 1) { holder.mBinding.getRoot().setBackgroundColor(Color.WHITE); } else { - holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBGLight)); } holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/ui/AccettazioneOrdiniPickingListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/ui/AccettazioneOrdiniPickingListAdapter.java index eb21ba04..4ec1481a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/ui/AccettazioneOrdiniPickingListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/ui/AccettazioneOrdiniPickingListAdapter.java @@ -114,7 +114,7 @@ public class AccettazioneOrdiniPickingListAdapter extends SectionedRecyclerViewA } else if (position % 2 == 1) { holder.mBinding.getRoot().setBackgroundColor(Color.WHITE); } else { - holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBGLight)); } holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java index 9450607c..dc770015 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java @@ -251,6 +251,9 @@ public class OrdiniUscitaElencoFiltroViewModel { .distinct() .toList(); + if(codMdeps.isEmpty()) + return new ArrayList<>(); + return Stream.of(Objects.requireNonNull(mtbDepoFullList)) .filter(x -> codMdeps.contains(x.getCodMdep())) .distinct() diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java index b7af8dfe..859915af 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java @@ -102,7 +102,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter 0) { holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); } else if (position % 2 == 1) { - holder.mBinding.getRoot().setBackgroundColor(Color.WHITE); + holder.mBinding.getRoot().setBackgroundColor(0); } else { - holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + holder.mBinding.getRoot().setBackgroundColor(UtilityResources.getColorResourceFromAttr(mContext, R.attr.colorLetturaFacilitataSurface)); } holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); @@ -135,8 +136,10 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter + app:binding="@{view.currentPesoCollo}" + app:useLocaleDecimalInput="@{true}" /> diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml index 958bdcfe..34899652 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml @@ -799,7 +799,8 @@ android:hint="@string/qty_x_pck" android:imeOptions="actionDone" android:inputType="numberDecimal" - app:binding="@{view.currentQtaCnf}" /> + app:binding="@{view.currentQtaCnf}" + app:useLocaleDecimalInput="@{true}" /> @@ -822,7 +823,8 @@ android:digits="0123456789" android:hint="@string/tot_qty" android:inputType="number" - app:binding="@{view.currentQtaTot}" /> + app:binding="@{view.currentQtaTot}" + app:useLocaleDecimalInput="@{true}" /> @@ -857,7 +859,8 @@ android:hint="@string/tare_art" android:inputType="number" android:textColor="@color/gray_400" - app:binding="@{view.currentTaraArticolo}" /> + app:binding="@{view.currentTaraArticolo}" + app:useLocaleDecimalInput="@{true}" /> @@ -881,7 +884,8 @@ android:imeOptions="actionDone" android:inputType="numberDecimal" android:textColor="@color/gray_400" - app:binding="@{view.currentTaraTot}" /> + app:binding="@{view.currentTaraTot}" + app:useLocaleDecimalInput="@{true}" /> @@ -904,7 +908,8 @@ android:hint="@string/LU_weight" android:inputType="number" android:visibility="@{view.enabledNotes ? View.VISIBLE : View.GONE }" - app:binding="@{view.currentPesoLordo}" /> + app:binding="@{view.currentPesoLordo}" + app:useLocaleDecimalInput="@{true}" /> diff --git a/app/src/main/res/layout/activity_spedizione.xml b/app/src/main/res/layout/activity_spedizione.xml index 588cff86..09c86213 100644 --- a/app/src/main/res/layout/activity_spedizione.xml +++ b/app/src/main/res/layout/activity_spedizione.xml @@ -20,7 +20,6 @@ @@ -44,7 +43,6 @@ android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/full_white" android:minHeight="?attr/actionBarSize"> diff --git a/app/src/main/res/layout/dialog_choose_batch_lot.xml b/app/src/main/res/layout/dialog_choose_batch_lot.xml index 2c98b991..72c1922f 100644 --- a/app/src/main/res/layout/dialog_choose_batch_lot.xml +++ b/app/src/main/res/layout/dialog_choose_batch_lot.xml @@ -41,6 +41,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:gravity="center_horizontal" + android:maxLines="2" android:text="@string/select_batch_lot" /> diff --git a/app/src/main/res/layout/dialog_create_new_art.xml b/app/src/main/res/layout/dialog_create_new_art.xml index 4133b5e7..c5af8a04 100644 --- a/app/src/main/res/layout/dialog_create_new_art.xml +++ b/app/src/main/res/layout/dialog_create_new_art.xml @@ -258,7 +258,8 @@ android:inputType="numberDecimal" android:nextFocusDown="@id/input_default_pos_text" android:singleLine="true" - app:binding="@{viewmodel.qtaCnf}" /> + app:binding="@{viewmodel.qtaCnf}" + app:useLocaleDecimalInput="@{true}" /> diff --git a/app/src/main/res/layout/dialog_input_lu_prod.xml b/app/src/main/res/layout/dialog_input_lu_prod.xml index ec50c34a..a3c5ac33 100644 --- a/app/src/main/res/layout/dialog_input_lu_prod.xml +++ b/app/src/main/res/layout/dialog_input_lu_prod.xml @@ -203,7 +203,8 @@ android:hint="@string/kg_x_pck" android:imeOptions="actionDone" android:inputType="numberDecimal" - app:binding="@{view.currentPesoCollo}" /> + app:binding="@{view.currentPesoCollo}" + app:useLocaleDecimalInput="@{true}" /> diff --git a/app/src/main/res/layout/dialog_input_quantity_v2.xml b/app/src/main/res/layout/dialog_input_quantity_v2.xml index 845a6c88..23f3dcd6 100644 --- a/app/src/main/res/layout/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout/dialog_input_quantity_v2.xml @@ -623,6 +623,7 @@ android:layout_gravity="center" android:orientation="horizontal"> + + app:binding="@{view.currentQtaCnf}" + app:useLocaleDecimalInput="@{true}" /> @@ -839,7 +841,8 @@ android:imeOptions="actionDone" android:inputType="number" android:selectAllOnFocus="true" - app:binding="@{view.currentQtaTot}" /> + app:binding="@{view.currentQtaTot}" + app:useLocaleDecimalInput="@{true}" /> @@ -874,7 +877,8 @@ android:hint="@string/tare_art" android:inputType="number" android:textColor="@color/gray_400" - app:binding="@{view.currentTaraArticolo}" /> + app:binding="@{view.currentTaraArticolo}" + app:useLocaleDecimalInput="@{true}" /> @@ -898,7 +902,8 @@ android:imeOptions="actionDone" android:inputType="numberDecimal" android:textColor="@color/gray_400" - app:binding="@{view.currentTaraTot}" /> + app:binding="@{view.currentTaraTot}" + app:useLocaleDecimalInput="@{true}" /> @@ -921,7 +926,8 @@ android:layout_height="wrap_content" android:hint="@string/LU_weight" android:inputType="number" - app:binding="@{view.currentPesoLordo}" /> + app:binding="@{view.currentPesoLordo}" + app:useLocaleDecimalInput="@{true}" /> diff --git a/app/src/main/res/layout/dialog_pv_edit_articolo.xml b/app/src/main/res/layout/dialog_pv_edit_articolo.xml index 62bae6e3..4676cdc6 100644 --- a/app/src/main/res/layout/dialog_pv_edit_articolo.xml +++ b/app/src/main/res/layout/dialog_pv_edit_articolo.xml @@ -534,6 +534,7 @@ android:layout_gravity="center" android:orientation="horizontal"> + + app:binding="@{view.currentQtaCnf}" + app:useLocaleDecimalInput="@{true}" /> diff --git a/app/src/main/res/layout/fragment_main_ordini_uscita.xml b/app/src/main/res/layout/fragment_main_ordini_uscita.xml index cdd15b7f..ff4619ec 100644 --- a/app/src/main/res/layout/fragment_main_ordini_uscita.xml +++ b/app/src/main/res/layout/fragment_main_ordini_uscita.xml @@ -48,7 +48,9 @@ android:id="@+id/vendita_main_list" android:scrollbars="vertical" android:layout_width="match_parent" - android:layout_height="match_parent"/> + android:layout_height="match_parent" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:listitem="@layout/fragment_main_ordini_uscita__list_group_model"/> + android:src="@drawable/ic_playlist_add_check_24dp" + android:tint="?attr/colorControlNormal" /> diff --git a/app/src/main/res/layout/fragment_main_ordini_uscita__list_group_model.xml b/app/src/main/res/layout/fragment_main_ordini_uscita__list_group_model.xml index 9bf0e87e..29c6b4be 100644 --- a/app/src/main/res/layout/fragment_main_ordini_uscita__list_group_model.xml +++ b/app/src/main/res/layout/fragment_main_ordini_uscita__list_group_model.xml @@ -1,6 +1,8 @@ + + + android:paddingVertical="8dp" + android:background="?attr/selectableItemBackground"> - + app:layout_constraintTop_toTopOf="parent"/> - + app:layout_constraintTop_toBottomOf="@+id/descrizione"/> - - + app:layout_constraintTop_toBottomOf="@id/right_descrizione" /> \ No newline at end of file diff --git a/app/src/main/res/layout/spedizione_main_list__group_item.xml b/app/src/main/res/layout/spedizione_main_list__group_item.xml index 9ea33c06..b99b32cf 100644 --- a/app/src/main/res/layout/spedizione_main_list__group_item.xml +++ b/app/src/main/res/layout/spedizione_main_list__group_item.xml @@ -5,8 +5,7 @@ + android:layout_height="wrap_content"> @@ -72,7 +70,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" - android:textColor="@android:color/black" style="@style/TextAppearance.Material3.BodyLarge" tools:text="QTA" /> @@ -81,7 +78,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" - android:textColor="@android:color/black" android:layout_marginStart="4dp" android:textAllCaps="true" android:layout_gravity="center_vertical" @@ -109,9 +105,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" - android:textSize="16sp" - android:textColor="@android:color/black" - style="@style/TextAppearance.Material3.BodyMedium" + style="@style/TextAppearance.Material3.BodyLarge" tools:text="DESCRIZIONE" /> @@ -138,7 +131,6 @@ android:id="@+id/subdescrizione2" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textSize="14sp" style="@style/TextAppearance.Material3.BodyMedium" tools:text="SUB DESCRIZIONE" /> @@ -181,7 +173,7 @@ android:layout_alignTop="@id/content_view_child" android:layout_alignBottom="@id/content_view_child" android:alpha="0.15" - android:background="@android:color/black" /> + android:background="?attr/colorDisabledSurface" /> \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index c817c91c..96508226 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -27,5 +27,7 @@ @color/md_theme_dark_inverseOnSurface @color/md_theme_dark_inverseSurface @color/md_theme_dark_inversePrimary + @android:color/white + @color/letturaFacilitataBGDark diff --git a/app/src/main/res/values/attr.xml b/app/src/main/res/values/attr.xml index 318884eb..6a6cd4f5 100644 --- a/app/src/main/res/values/attr.xml +++ b/app/src/main/res/values/attr.xml @@ -26,4 +26,18 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3b7bb0a5..82bc2659 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,8 +7,8 @@ #08006C #0059C5 #FFFFFF - #D8E2FF - #001A43 + #FFE0C2 + #4C2700 #795369 #FFFFFF #FFD8EC @@ -17,6 +17,14 @@ #FFDAD6 #FFFFFF #410002 + #006E1C + #D1FADF + #FFFFFF + #00210A + #FFB300 + #FFF8E1 + #212121 + #664400 #F6FEFF #001F24 #F6FEFF @@ -46,6 +54,14 @@ #93000A #690005 #FFDAD6 + #5FF59C + #00531A + #003915 + #85FFB8 + #FFD54F + #534300 + #332200 + #FFF8E1 #001F24 #97F0FF #001F24 diff --git a/app/src/main/res/values/custom_colors.xml b/app/src/main/res/values/custom_colors.xml index 72dab875..c940865c 100644 --- a/app/src/main/res/values/custom_colors.xml +++ b/app/src/main/res/values/custom_colors.xml @@ -13,7 +13,8 @@ @color/green_500 @color/orange_700 - #eeeeee + #eeeeee + #111111 #B2000000 diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index eaa0adc1..e98060f6 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -27,6 +27,8 @@ @color/md_theme_light_inverseOnSurface @color/md_theme_light_inverseSurface @color/md_theme_light_inversePrimary + @android:color/black + @color/letturaFacilitataBGLight @font/google_sans_regular