From 73b1a77a12ac01ba6e4adec96d006778b2416d3a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Fri, 6 Dec 2024 11:37:09 +0100 Subject: [PATCH] Migliorata gestione degli Updates in modo da forzare gli aggiornamenti di default a meno che non venga specificato forced=false nel file version.txt --- app/build.gradle | 2 +- .../rest/consumers/SystemRESTConsumer.java | 23 +++++++--- .../consumers/SystemRESTConsumerService.java | 4 ++ .../rest/consumers/_BaseRESTConsumer.java | 26 +++++++++++ .../model/system/LatestAppVersionInfoDTO.java | 44 +++++++++++++++++++ .../core/update/UpdatesManager.java | 38 +++++++++++----- .../core/utility/FileDownloader.java | 2 + .../gest/main/MainActivity.java | 6 ++- 8 files changed, 127 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/rest/model/system/LatestAppVersionInfoDTO.java diff --git a/app/build.gradle b/app/build.gradle index fd88aa00..fcb68f41 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -75,7 +75,7 @@ android { build { doLast { delete "$projectDir/build/outputs/apk/release/version.txt" - file("$projectDir/build/outputs/apk/release/version.txt").text = appVersionCode + '\n' + appVersionName + file("$projectDir/build/outputs/apk/release/version.txt").text = appVersionCode + '\n' + appVersionName + '\n' + 'forced=true' } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java index fd8bbbda..da5fd31c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java @@ -4,9 +4,6 @@ import android.text.TextUtils; import android.util.Log; import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonParseException; import com.orhanobut.logger.Logger; import java.io.ByteArrayInputStream; @@ -15,7 +12,6 @@ import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Type; import java.net.ConnectException; -import java.util.Date; import java.util.List; import javax.inject.Singleton; @@ -29,9 +25,9 @@ import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.rest.model.MailRequestDTO; import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO; import it.integry.integrywmsnative.core.rest.model.system.RegisterDeviceRequestDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityGson; import it.integry.integrywmsnative.core.utility.UtilityString; import retrofit2.Call; @@ -42,6 +38,23 @@ import retrofit2.Response; public class SystemRESTConsumer extends _BaseRESTConsumer { + public void retrieveUpdatesInfo(final RunnableArgs onSuccess, final RunnableArgs onFailed) { + SystemRESTConsumerService systemRESTConsumerService = RESTBuilder.getService(SystemRESTConsumerService.class); + systemRESTConsumerService.retrieveUpdatesInfo() + .enqueue(new Callback<>() { + @Override + public void onResponse(Call call, Response response) { + analyzeAnswerGeneric(response, "updates", onSuccess, onFailed); + } + + @Override + public void onFailure(Call call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + public void registerDevice(final Runnable onSuccess, final RunnableArgs onFailed) { RegisterDeviceRequestDTO registerDeviceRequestDTO = new RegisterDeviceRequestDTO() .setApp("WMS"); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumerService.java index 2ed64fbe..7c6f0662 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumerService.java @@ -6,6 +6,7 @@ import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.rest.model.MailRequestDTO; import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO; import it.integry.integrywmsnative.core.rest.model.system.RegisterDeviceRequestDTO; import retrofit2.Call; import retrofit2.http.Body; @@ -15,6 +16,9 @@ import retrofit2.http.Query; public interface SystemRESTConsumerService { + @GET("wms/currentVersion") + Call retrieveUpdatesInfo(); + @POST("device/register") Call> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java index e513aeca..01cc92cc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java @@ -15,6 +15,32 @@ import retrofit2.Response; public abstract class _BaseRESTConsumer { + + public static void analyzeAnswerGeneric(Response response, String logTitle, RunnableArgs onComplete, RunnableArgs onFailed) { + try { + var data = analyzeAnswerGeneric(response, logTitle); + onComplete.run(data); + } catch (Exception e) { + onFailed.run(e); + } + } + + public static T analyzeAnswerGeneric(Response response, String logTitle) throws Exception { + if (response.isSuccessful()) { + return response.body(); + } else { + if (response.code() == 404) { + Log.e(logTitle, "Errore " + response.code() + ": risorsa non trovata (" + response.raw().request().url() + ")"); + throw new Exception("Errore " + response.code() + ": risorsa non trovata (" + logTitle + ")"); + } else if (response.code() == 550) + throw new InvalidLicenseException(); + else { + Log.e(logTitle, "Status " + response.code() + ": " + response.message()); + throw new Exception("Status " + response.code() + ": " + response.message()); + } + } + } + public static T analyzeAnswer(Response> response, String logTitle) throws Exception { if (response.isSuccessful()) { if (response.body() != null) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/system/LatestAppVersionInfoDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/system/LatestAppVersionInfoDTO.java new file mode 100644 index 00000000..ccc61710 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/system/LatestAppVersionInfoDTO.java @@ -0,0 +1,44 @@ +package it.integry.integrywmsnative.core.rest.model.system; + +public class LatestAppVersionInfoDTO { + private String latestVersion; + private int latestVersionCode; + private String url; + private boolean forced; + + public String getLatestVersion() { + return latestVersion; + } + + public LatestAppVersionInfoDTO setLatestVersion(String latestVersion) { + this.latestVersion = latestVersion; + return this; + } + + public int getLatestVersionCode() { + return latestVersionCode; + } + + public LatestAppVersionInfoDTO setLatestVersionCode(int latestVersionCode) { + this.latestVersionCode = latestVersionCode; + return this; + } + + public String getUrl() { + return url; + } + + public LatestAppVersionInfoDTO setUrl(String url) { + this.url = url; + return this; + } + + public boolean isForced() { + return forced; + } + + public LatestAppVersionInfoDTO setForced(boolean forced) { + this.forced = forced; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java index e776427a..3aaee7d8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java @@ -15,16 +15,19 @@ import java.io.File; import javax.inject.Singleton; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.FileDownloader; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.view.dialogs.DialogProgressView; @Singleton public class UpdatesManager { + private AppCompatActivity mContext; - public void init(AppCompatActivity activityContext) { + public void init(AppCompatActivity activityContext, SystemRESTConsumer systemRESTConsumer) { this.mContext = activityContext; final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() + @@ -34,15 +37,22 @@ public class UpdatesManager { final String currentDownloadUrl = baseEndpoint + "/ems-api/wms/android-release.apk"; - AppUpdater appUpdater = new AppUpdater(mContext) - .setDisplay(Display.DIALOG) - .setUpdateFrom(UpdateFrom.JSON) - .setUpdateJSON(currentVersionUrl) - .setButtonDoNotShowAgain(null) - .setButtonUpdateClickListener((dialog, which) -> { - installAPK(currentDownloadUrl); - }); - appUpdater.start(); + systemRESTConsumer.retrieveUpdatesInfo(latestData -> { + + AppUpdater appUpdater = new AppUpdater(mContext) + .setDisplay(Display.DIALOG) + .setUpdateFrom(UpdateFrom.JSON) + .setUpdateJSON(currentVersionUrl) + .setButtonDoNotShowAgain(null) + .setButtonUpdateClickListener((dialog, which) -> { + installAPK(currentDownloadUrl); + }); + + if(latestData.isForced()) + appUpdater.setButtonDismiss(null); + + appUpdater.start(); + }, ex -> UtilityExceptions.defaultException(mContext, ex)); } @@ -67,6 +77,11 @@ public class UpdatesManager { mContext.runOnUiThread(() -> { progressDialogBuilder.dismiss(); + if (!destination.exists()) { + UtilityExceptions.defaultException(mContext, new Exception("Errore durante il download dell'aggiornamento")); + return; + } + Uri fileLoc; Intent intent; @@ -93,7 +108,8 @@ public class UpdatesManager { try { fileDownloader.download(); } catch (Exception e) { - e.printStackTrace(); + progressDialogBuilder.dismissAllowingStateLoss(); + UtilityExceptions.defaultException(mContext, e); } }).start(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/FileDownloader.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/FileDownloader.java index 4e51b26d..fd9fc64e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/FileDownloader.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/FileDownloader.java @@ -61,6 +61,8 @@ public class FileDownloader { } } catch (Exception e) { + if(downloadFile != null && downloadFile.exists()) + downloadFile.delete(); throw e; } finally { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java index 64941217..58603a94 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java @@ -41,6 +41,7 @@ import it.integry.integrywmsnative.core.interfaces.ISearchableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.menu.MenuService; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.core.utility.UtilityContext; @@ -69,6 +70,9 @@ public class MainActivity extends BaseActivity @Inject UpdatesManager updatesManager; + @Inject + SystemRESTConsumer systemRESTConsumer; + @Inject DialogProgressView mDialogProgressView; @@ -85,7 +89,7 @@ public class MainActivity extends BaseActivity mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); setContentView(mBinding.getRoot()); - updatesManager.init(this); + updatesManager.init(this, systemRESTConsumer); UtilityContext.initMainActivity(this); setSupportActionBar(mBinding.appBarMain.toolbar);