Merge branch 'develop' into feature/RefactoringGestioneColli

# Conflicts:
#	.idea/deploymentTargetSelector.xml
#	app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java
#	app/src/main/res/values-it/strings.xml
#	app/src/main/res/values/strings.xml
This commit is contained in:
2025-10-02 19:17:38 +02:00
10 changed files with 214 additions and 7 deletions

View File

@@ -155,6 +155,8 @@ import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBat
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule; import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtComponent; import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtComponent;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtModule; import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtModule;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeComponent;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeModule;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoComponent; import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoComponent;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoModule; import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoModule;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent; import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent;
@@ -274,6 +276,8 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva
DialogAskInfoTrasferimentoModule.class, DialogAskInfoTrasferimentoModule.class,
TrasferimentoPedaneEditModule.class, TrasferimentoPedaneEditModule.class,
DialogTrasferimentoPedaneConfirmExportModule.class DialogTrasferimentoPedaneConfirmExportModule.class
DialogChooseArtFromListaArtsModule.class,
DialogDeviceEndOfLifeModule.class
}) })
public interface MainApplicationComponent { public interface MainApplicationComponent {
@@ -460,6 +464,8 @@ public interface MainApplicationComponent {
DialogTrasferimentoPedaneConfirmExportComponent.Factory dialogTrasferimentoPedaneConfirmExportComponent(); DialogTrasferimentoPedaneConfirmExportComponent.Factory dialogTrasferimentoPedaneConfirmExportComponent();
DialogDeviceEndOfLifeComponent.Factory dialogDeviceEndOfLifeComponent();
void inject(MainApplication mainApplication); void inject(MainApplication mainApplication);
void inject(AppContext mainApplication); void inject(AppContext mainApplication);

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.text.SpannableString; import android.text.SpannableString;
@@ -12,8 +13,10 @@ import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch;
import javax.inject.Inject; import javax.inject.Inject;
@@ -27,6 +30,7 @@ import it.integry.integrywmsnative.databinding.ActivitySplashBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.main.MainActivity; import it.integry.integrywmsnative.gest.main.MainActivity;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeView;
public class SplashActivity extends BaseActivity implements MainContext.Listener { public class SplashActivity extends BaseActivity implements MainContext.Listener {
@@ -65,9 +69,24 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
UtilityContext.initMainActivity(this); UtilityContext.initMainActivity(this);
LocalDate endSupportDate = LocalDate.of(2026, 1, 31);
boolean isOldAndroid = Build.VERSION.SDK_INT < Build.VERSION_CODES.O;
executorService.execute(() -> {
if (isOldAndroid)
showDeviceEndOfLifeMessage();
handler.post(() -> {
if (LocalDate.now().isBefore(endSupportDate) || !isOldAndroid) {
initAppVersion(); initAppVersion();
initPermissions(this::init); initPermissions(this::init);
} else {
this.finish();
}
});
});
} }
private void initAppVersion() { private void initAppVersion() {
@@ -105,6 +124,21 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
} }
} }
private void showDeviceEndOfLifeMessage() {
CountDownLatch latch = new CountDownLatch(1);
DialogDeviceEndOfLifeView.newInstance(latch::countDown)
.show(this.getSupportFragmentManager(), "dialog_device_end_of_life");
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
@Override @Override
public void onDBDataLoading(String item) { public void onDBDataLoading(String item) {
handler.post(() -> mBinding.loadingInfoTextview.setText("Caricamento " + item)); handler.post(() -> mBinding.loadingInfoTextview.setText("Caricamento " + item));

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.device_end_of_life;
import dagger.Subcomponent;
@Subcomponent
public interface DialogDeviceEndOfLifeComponent {
@Subcomponent.Factory
interface Factory {
DialogDeviceEndOfLifeComponent create();
}
void inject(DialogDeviceEndOfLifeView dialogDeviceEndOfLifeView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.device_end_of_life;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogDeviceEndOfLifeComponent.class)
public class DialogDeviceEndOfLifeModule {
@Provides
DialogDeviceEndOfLifeViewModel providesDialogDeviceEndOfLifeViewModel() {
return new DialogDeviceEndOfLifeViewModel();
}
}

View File

@@ -0,0 +1,77 @@
package it.integry.integrywmsnative.view.dialogs.device_end_of_life;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.databinding.DialogDeviceEndOfLifeBinding;
public class DialogDeviceEndOfLifeView extends BaseDialogFragment {
@Inject
DialogDeviceEndOfLifeViewModel mViewModel;
private DialogDeviceEndOfLifeBinding mBindings;
private Context mContext;
private final Runnable onComplete;
//Pass here all external parameters
public static DialogDeviceEndOfLifeView newInstance(Runnable onComplete) {
return new DialogDeviceEndOfLifeView(onComplete);
}
private DialogDeviceEndOfLifeView(Runnable onComplete) {
super();
this.onComplete = onComplete;
MainApplication.appComponent
.dialogDeviceEndOfLifeComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogDeviceEndOfLifeBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.i_understand_action, (dialog, which) -> {
if (onComplete != null) onComplete.run();
dismiss();
})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
}

View File

@@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.device_end_of_life;
public class DialogDeviceEndOfLifeViewModel {
}

View File

@@ -1,5 +0,0 @@
<vector android:height="76dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="76dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
</vector>

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.R" />
<import type="androidx.core.content.ContextCompat" />
<import type="android.text.Html" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_baseline_warning_24"
app:tint="?attr/colorError" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="Fine supporto" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_text"
style="@style/TextAppearance.Material3.BodyLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@{Html.fromHtml(ContextCompat.getString(context, R.string.device_end_of_life_message))}"
tools:text="@string/device_end_of_life_message"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@@ -38,6 +38,7 @@
<string name="ops">Ops</string> <string name="ops">Ops</string>
<string name="warning">Attenzione</string> <string name="warning">Attenzione</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="i_understand_action">Ho capito</string>
<string name="abort">Annulla</string> <string name="abort">Annulla</string>
<string name="reset">Resetta</string> <string name="reset">Resetta</string>
<string name="dispatched_abbr">Evasi</string> <string name="dispatched_abbr">Evasi</string>
@@ -529,4 +530,6 @@
<string name="alert_export_trasferimento_pedane_dialog_title">Conferma esportazione</string> <string name="alert_export_trasferimento_pedane_dialog_title">Conferma esportazione</string>
<string name="alert_export_trasferimento_pedane_dialog_text"><![CDATA[Stai confermando il trasferimento delle pedane. Una volta confermato, <b>non sarà più possibile modificarne il contenuto</b>. Vuoi procedere?]]></string> <string name="alert_export_trasferimento_pedane_dialog_text"><![CDATA[Stai confermando il trasferimento delle pedane. Una volta confermato, <b>non sarà più possibile modificarne il contenuto</b>. Vuoi procedere?]]></string>
<string name="device_end_of_life_message"><![CDATA[A partire dal <b>1 febbraio 2026</b>, i dispositivi con una versione di <b>Android inferiore alla 8.0 non saranno più supportati</b>. Per continuare a utilizzare lapp in modo sicuro e con tutte le funzionalità, ti consigliamo di aggiornare il tuo sistema operativo o utilizzare un dispositivo compatibile.]]></string>
</resources> </resources>

View File

@@ -86,6 +86,7 @@
<string name="ops">Ops</string> <string name="ops">Ops</string>
<string name="warning">Warning</string> <string name="warning">Warning</string>
<string name="ok">OK</string> <string name="ok">OK</string>
<string name="i_understand_action">Got it</string>
<string name="abort">Abort</string> <string name="abort">Abort</string>
<string name="reset">Reset</string> <string name="reset">Reset</string>
<string name="dispatched_abbr">Dspch</string> <string name="dispatched_abbr">Dspch</string>
@@ -536,4 +537,6 @@
<string name="alert_export_trasferimento_pedane_dialog_title">Confirm export</string> <string name="alert_export_trasferimento_pedane_dialog_title">Confirm export</string>
<string name="alert_export_trasferimento_pedane_dialog_text"><![CDATA[You are confirming the transfer of the pallets. Once confirmed, <b>it will no longer be possible to modify their contents</b>. Do you want to proceed?]]></string> <string name="alert_export_trasferimento_pedane_dialog_text"><![CDATA[You are confirming the transfer of the pallets. Once confirmed, <b>it will no longer be possible to modify their contents</b>. Do you want to proceed?]]></string>
<string name="device_end_of_life_message"><![CDATA[Starting from <b>February 1, 2026</b>, devices running <b>Android versions earlier than 8.0 will no longer be supported</b>.<br />To continue using the app securely and with full functionality, please update your operating system or switch to a compatible device.]]></string>
</resources> </resources>