Aggiunta impostazione che permette di abilitare la ricezione degli aggiornamenti beta

This commit is contained in:
Giuseppe Scorrano 2025-02-25 16:52:09 +01:00
parent 93b18531ab
commit d3b7cd8cd6
11 changed files with 140 additions and 68 deletions

View File

@ -238,8 +238,8 @@ public class MainApplicationModule {
@Provides
@Singleton
SystemRESTConsumer provideSystemRESTConsumer(RESTBuilder restBuilder) {
return new SystemRESTConsumer(restBuilder);
SystemRESTConsumer provideSystemRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) {
return new SystemRESTConsumer(executorService, restBuilder);
}
@Provides

View File

@ -13,6 +13,7 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Type;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.inject.Singleton;
@ -36,9 +37,11 @@ import retrofit2.Response;
@Singleton
public class SystemRESTConsumer extends _BaseRESTConsumer {
private final ExecutorService executorService;
private final RESTBuilder restBuilder;
public SystemRESTConsumer(RESTBuilder restBuilder) {
public SystemRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) {
this.executorService = executorService;
this.restBuilder = restBuilder;
}
@ -161,20 +164,19 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
}
public void sendMail(MailRequestDTO mailDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
public void sendMailSynchronized(MailRequestDTO mailDTO) throws Exception {
SystemRESTConsumerService service = restBuilder.getService(SystemRESTConsumerService.class);
service.sendMail(mailDTO).enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<String>> call, Response<ServiceRESTResponse<String>> response) {
if (onComplete != null) onComplete.run();
}
var response = service.sendMail(mailDTO).execute();
analyzeAnswer(response, "sendMail");
}
@Override
public void onFailure(Call<ServiceRESTResponse<String>> call, @NonNull final Exception e) {
if (onFailed != null) {
onFailed.run(e);
}
public void sendMail(MailRequestDTO mailDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
sendMailSynchronized(mailDTO);
if (onComplete != null) onComplete.run();
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}

View File

@ -32,6 +32,6 @@ public interface SystemRESTConsumerService {
Call<ServiceRESTResponse<List<AvailableCodMdepsDTO>>> getAvailableCodMdeps();
@POST("sendEmail")
Call<ServiceRESTResponse<String>> sendMail(@Body MailRequestDTO mailDto);
Call<ServiceRESTResponse<Void>> sendMail(@Body MailRequestDTO mailDto);
}

View File

@ -3,8 +3,8 @@ package it.integry.integrywmsnative.gest.settings;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.os.Handler;
import android.os.Looper;
import android.util.Base64;
import android.widget.Toast;
@ -31,6 +31,7 @@ import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject;
@ -46,8 +47,8 @@ import it.integry.integrywmsnative.core.rest.model.MailAttachmentDTO;
import it.integry.integrywmsnative.core.rest.model.MailRequestDTO;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView;
public class MainSettingsFragment extends PreferenceFragmentCompat implements ITitledFragment, Preference.OnPreferenceChangeListener {
@ -126,8 +127,12 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
var triggerScanModeListPref = (ListPreference) findPreference(KEY_TRIGGER_SCAN_MODE);
if (triggerScanModeListPref != null) {
var scanModes = BarcodeSetting.getTriggerScanModes();
triggerScanModeListPref.setEntries(scanModes);
triggerScanModeListPref.setEntryValues(scanModes);
var values = scanModes.keySet().toArray(new String[0]);
var descriptions = scanModes.values().toArray(new CharSequence[0]);
triggerScanModeListPref.setEntries(descriptions);
triggerScanModeListPref.setEntryValues(values);
triggerScanModeListPref.setOnPreferenceChangeListener(this);
}
}
@ -150,15 +155,15 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
if (!btPairedDevices.isEmpty()) {
CharSequence[] entries = new CharSequence[btPairedDevices.size()];
Stream.of(btPairedDevices)
btPairedDevices.stream()
.map(BluetoothDevice::getName)
.toList()
.collect(Collectors.toList())
.toArray(entries);
CharSequence[] entryValues = new CharSequence[btPairedDevices.size()];
Stream.of(btPairedDevices)
btPairedDevices.stream()
.map(BluetoothDevice::getAddress)
.toList()
.collect(Collectors.toList())
.toArray(entryValues);
lp.setEntries(entries);
@ -230,7 +235,12 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
private void exportLog() {
var handler = new Handler(Looper.getMainLooper());
DialogYesNoView.newInstance("Esportazione log", "Vuoi inviare il log degli eventi al supporto?", result -> {
if (result == DialogConsts.Results.NO || result == DialogConsts.Results.ABORT)
return;
this.openProgress();
executorService.execute(() -> {
@ -246,7 +256,7 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
try {
List<MailAttachmentDTO> attachmentDTOList = new ArrayList<>();
if(fileToShare != null) {
if (fileToShare != null) {
var htmlContent = createAppLogAttachment(fileToShare);
byte[] buffer = htmlContent.getBytes();//specify the size to allow.
@ -265,7 +275,7 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
dbFiles[1] = requireContext().getDatabasePath("integry_wms-shm");
dbFiles[2] = requireContext().getDatabasePath("integry_wms-wal");
for(int i = 0; i < dbFiles.length; i++){
for (int i = 0; i < dbFiles.length; i++) {
byte[] dbFileBytes = new byte[(int) dbFiles[i].length()];
FileInputStream inputStream = new FileInputStream(dbFiles[i]);
final int read = inputStream.read(dbFileBytes);
@ -284,25 +294,14 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
.setAttachments(attachmentDTOList);
systemRESTConsumer.sendMail(mailRequest, this::closeProgress, ex -> {
this.closeProgress();
requireActivity().runOnUiThread(() -> {
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(requireActivity().getSupportFragmentManager(), "tag");
});
});
} catch (Exception ex) {
UtilityExceptions.defaultException(requireContext(), ex);
this.closeProgress();
systemRESTConsumer.sendMailSynchronized(mailRequest);
// requireActivity().runOnUiThread(() -> {
// DialogSimpleMessageView
// .makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
// .show(requireActivity().getSupportFragmentManager(), "tag");
// });
//
// FirebaseCrashlytics.getInstance().recordException(ex);
this.closeProgress();
} catch (Exception ex) {
handler.post(() -> {
this.closeProgress();
UtilityExceptions.defaultException(requireContext(), ex);
});
}
});
})
@ -310,16 +309,15 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
}
private void openProgress() {
// executorService.execute(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager());
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager());
// });
}
private void closeProgress() {
// executorService.execute(() -> {
mCurrentProgress.dismiss();
mCurrentProgress.dismiss();
// });
}
@ -334,7 +332,7 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
while ((line = br.readLine()) != null) {
if(!line.matches("\\d{13}.*")) {
if (!line.matches("\\d{13}.*")) {
int lastNewLineChar = text.lastIndexOf("\n");
text.deleteCharAt(text.length() - 1);
}
@ -411,7 +409,7 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
}
htmlContent.append("""
<script type="text/javascript">
document.querySelectorAll(".message").forEach(el => el.innerHTML = el.innerHTML.replaceAll(/at it\\.integry.*?(?:<br>)/g, '<b>$&</b>'));
</script>

View File

@ -0,0 +1,55 @@
package it.integry.integrywmsnative.view.components;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.SwitchPreferenceCompat;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView;
public class ConfirmSwitchPreferenceCompat extends SwitchPreferenceCompat {
private final String confirmTitle;
private final String confirmMessage;
public ConfirmSwitchPreferenceCompat(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ConfirmSwitchPreferenceCompat);
String confirmTitle = a.getString(R.styleable.ConfirmSwitchPreferenceCompat_confirmTitle);
String confirmMessage = a.getString(R.styleable.ConfirmSwitchPreferenceCompat_confirmMessage);
a.recycle();
if(confirmTitle == null) confirmTitle = "Confirm";
if(confirmMessage == null) confirmMessage = "Are you sure you want to change this setting?";
this.confirmMessage = confirmMessage;
this.confirmTitle = confirmTitle;
}
@Override
protected void onClick() {
if (isChecked()) {
// showConfirmationDialog(false);
setChecked(false);
} else {
showConfirmationDialog(true);
}
}
private void showConfirmationDialog(final boolean newValue) {
DialogYesNoView.newInstance(confirmTitle, confirmMessage, result -> {
if(result == DialogConsts.Results.YES) {
setChecked(newValue);
}
}).show(((FragmentActivity) getContext()).getSupportFragmentManager(), "dialog-enable-beta");
}
}

View File

@ -2,7 +2,6 @@ package it.integry.integrywmsnative.view.dialogs.yes_no;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import androidx.annotation.NonNull;
@ -39,7 +38,7 @@ public class DialogYesNoView extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
var binding = DialogYesNoBinding.inflate(LayoutInflater.from(requireContext()));
var binding = DialogYesNoBinding.inflate(getLayoutInflater());
binding.executePendingBindings();
if (UtilityString.isNullOrEmpty(title)) {

View File

@ -458,8 +458,10 @@
<string name="action_print_production_SSCC">Stampa etichetta lavorazione</string>
<string name="scanner_settings">Impostazioni scanner</string>
<string name="developer_settings">Svilupppo</string>
<string name="developer_settings_title">Esporta log</string>
<string name="developer_settings_summary">Esporta il log degli eventi</string>
<string name="developer_settings_export_log_title">Esporta log</string>
<string name="developer_settings_export_log_summary">Esporta il log degli eventi</string>
<string name="developer_settings_enable_beta_version_title">Aggiornamenti beta</string>
<string name="developer_settings_enable_beta_version_summary">Abilita aggiornamenti beta (fortemente sconsigliato)</string>
<string name="scanner_settings_scanner_delay_title">Ritardo scansione</string>
<string name="scanner_settings_scanner_delay_summary">Imposta un ritardo di lettura per la scansione</string>
<string name="scanner_settings_trigger_scan_mode_title">Modalità scansione</string>

View File

@ -20,4 +20,10 @@
<attr name="backgroundView" />
<attr name="parentView" />
</declare-styleable>
<declare-styleable name="ConfirmSwitchPreferenceCompat">
<attr name="confirmTitle" format="string" />
<attr name="confirmMessage" format="string" />
</declare-styleable>
</resources>

View File

@ -463,8 +463,10 @@
<string name="action_print_production_SSCC">Print production label</string>
<string name="scanner_settings">Scanner settings</string>
<string name="developer_settings">Developer settings</string>
<string name="developer_settings_title">Esporta log</string>
<string name="developer_settings_summary">Esporta il log degli eventi</string>
<string name="developer_settings_export_log_title">Export log</string>
<string name="developer_settings_export_log_summary">Export event log</string>
<string name="developer_settings_enable_beta_version_title">Beta updates</string>
<string name="developer_settings_enable_beta_version_summary">Enable beta updates (strongly discouraged)</string>
<string name="scanner_settings_scanner_delay_title">Scan delay</string>
<string name="scanner_settings_scanner_delay_summary">Set reading scanner delay</string>
<string name="scanner_settings_trigger_scan_mode_title">Modalità scansione</string>

View File

@ -67,10 +67,20 @@
app:title="@string/developer_settings"
app:iconSpaceReserved="false">
<it.integry.integrywmsnative.view.components.ConfirmSwitchPreferenceCompat
android:title="@string/developer_settings_enable_beta_version_title"
android:key="ENABLE_BETA"
android:summary="@string/developer_settings_enable_beta_version_summary"
app:iconSpaceReserved="false"
android:defaultValue="false"
app:confirmTitle="@string/developer_settings_enable_beta_version_title"
app:confirmMessage="Sei sicuro di voler abilitare gli aggiornamenti beta? Se accetti dovrai chiudere e riaprire l'app per scaricare l'aggiornamento."
/>
<Preference
android:title="@string/developer_settings_title"
android:title="@string/developer_settings_export_log_title"
android:key="EXPORT_LOG"
android:summary="@string/developer_settings_summary"
android:summary="@string/developer_settings_export_log_summary"
app:iconSpaceReserved="false"
/>

View File

@ -1,7 +1,6 @@
package it.integry.barcode_base_android_library.model;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
public class BarcodeSetting {
@ -13,14 +12,13 @@ public class BarcodeSetting {
public static final String P_TRIGGER_SCAN_DELAY = "TRIG_SCAN_DELAY";
public static CharSequence[] getTriggerScanModes() {
List<String> keys = new ArrayList<>();
keys.add(V_TRIGGER_SCAN_MODE_READ_ON_RELEASE);
keys.add(V_TRIGGER_SCAN_MODE_ONE_SHOT);
// keys.add(V_TRIGGER_SCAN_MODE_CONTINUOS);
// keys.add(V_TRIGGER_SCAN_MODE_READ_ON_SECOND_TRIGGER_PRESS);
return keys.toArray(new String[0]);
public static HashMap<String, CharSequence> getTriggerScanModes() {
return new HashMap<>() {{
put(V_TRIGGER_SCAN_MODE_READ_ON_RELEASE, "Read on release");
put(V_TRIGGER_SCAN_MODE_ONE_SHOT, "One shot");
// put(V_TRIGGER_SCAN_MODE_CONTINUOS, "Continuous");
// put(V_TRIGGER_SCAN_MODE_READ_ON_SECOND_TRIGGER_PRESS, "Read on second trigger press");
}};
}
}