Migliorata gestione degli Updates in modo da forzare gli aggiornamenti di default a meno che non venga specificato forced=false nel file version.txt

This commit is contained in:
Giuseppe Scorrano 2024-12-06 11:37:09 +01:00
parent 98f520427e
commit 73b1a77a12
8 changed files with 127 additions and 18 deletions

View File

@ -75,7 +75,7 @@ android {
build { build {
doLast { doLast {
delete "$projectDir/build/outputs/apk/release/version.txt" 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'
} }
} }

View File

@ -4,9 +4,6 @@ import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.google.gson.Gson; 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 com.orhanobut.logger.Logger;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
@ -15,7 +12,6 @@ import java.io.InputStreamReader;
import java.io.Reader; import java.io.Reader;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.net.ConnectException; import java.net.ConnectException;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.inject.Singleton; 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.MailRequestDTO;
import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; 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.rest.model.system.RegisterDeviceRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; 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.UtilityGson;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import retrofit2.Call; import retrofit2.Call;
@ -42,6 +38,23 @@ import retrofit2.Response;
public class SystemRESTConsumer extends _BaseRESTConsumer { public class SystemRESTConsumer extends _BaseRESTConsumer {
public void retrieveUpdatesInfo(final RunnableArgs<LatestAppVersionInfoDTO> onSuccess, final RunnableArgs<Exception> onFailed) {
SystemRESTConsumerService systemRESTConsumerService = RESTBuilder.getService(SystemRESTConsumerService.class);
systemRESTConsumerService.retrieveUpdatesInfo()
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<LatestAppVersionInfoDTO> call, Response<LatestAppVersionInfoDTO> response) {
analyzeAnswerGeneric(response, "updates", onSuccess, onFailed);
}
@Override
public void onFailure(Call<LatestAppVersionInfoDTO> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void registerDevice(final Runnable onSuccess, final RunnableArgs<Exception> onFailed) { public void registerDevice(final Runnable onSuccess, final RunnableArgs<Exception> onFailed) {
RegisterDeviceRequestDTO registerDeviceRequestDTO = new RegisterDeviceRequestDTO() RegisterDeviceRequestDTO registerDeviceRequestDTO = new RegisterDeviceRequestDTO()
.setApp("WMS"); .setApp("WMS");

View File

@ -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.MailRequestDTO;
import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; 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.rest.model.system.RegisterDeviceRequestDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
@ -15,6 +16,9 @@ import retrofit2.http.Query;
public interface SystemRESTConsumerService { public interface SystemRESTConsumerService {
@GET("wms/currentVersion")
Call<LatestAppVersionInfoDTO> retrieveUpdatesInfo();
@POST("device/register") @POST("device/register")
Call<ServiceRESTResponse<Void>> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO); Call<ServiceRESTResponse<Void>> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO);

View File

@ -15,6 +15,32 @@ import retrofit2.Response;
public abstract class _BaseRESTConsumer { public abstract class _BaseRESTConsumer {
public static <T> void analyzeAnswerGeneric(Response<T> response, String logTitle, RunnableArgs<T> onComplete, RunnableArgs<Exception> onFailed) {
try {
var data = analyzeAnswerGeneric(response, logTitle);
onComplete.run(data);
} catch (Exception e) {
onFailed.run(e);
}
}
public static <T> T analyzeAnswerGeneric(Response<T> 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> T analyzeAnswer(Response<ServiceRESTResponse<T>> response, String logTitle) throws Exception { public static <T> T analyzeAnswer(Response<ServiceRESTResponse<T>> response, String logTitle) throws Exception {
if (response.isSuccessful()) { if (response.isSuccessful()) {
if (response.body() != null) { if (response.body() != null) {

View File

@ -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;
}
}

View File

@ -15,16 +15,19 @@ import java.io.File;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.FileDownloader; import it.integry.integrywmsnative.core.utility.FileDownloader;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
@Singleton @Singleton
public class UpdatesManager { public class UpdatesManager {
private AppCompatActivity mContext; private AppCompatActivity mContext;
public void init(AppCompatActivity activityContext) { public void init(AppCompatActivity activityContext, SystemRESTConsumer systemRESTConsumer) {
this.mContext = activityContext; this.mContext = activityContext;
final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() + final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() +
@ -34,6 +37,8 @@ public class UpdatesManager {
final String currentDownloadUrl = baseEndpoint + "/ems-api/wms/android-release.apk"; final String currentDownloadUrl = baseEndpoint + "/ems-api/wms/android-release.apk";
systemRESTConsumer.retrieveUpdatesInfo(latestData -> {
AppUpdater appUpdater = new AppUpdater(mContext) AppUpdater appUpdater = new AppUpdater(mContext)
.setDisplay(Display.DIALOG) .setDisplay(Display.DIALOG)
.setUpdateFrom(UpdateFrom.JSON) .setUpdateFrom(UpdateFrom.JSON)
@ -42,7 +47,12 @@ public class UpdatesManager {
.setButtonUpdateClickListener((dialog, which) -> { .setButtonUpdateClickListener((dialog, which) -> {
installAPK(currentDownloadUrl); installAPK(currentDownloadUrl);
}); });
if(latestData.isForced())
appUpdater.setButtonDismiss(null);
appUpdater.start(); appUpdater.start();
}, ex -> UtilityExceptions.defaultException(mContext, ex));
} }
@ -67,6 +77,11 @@ public class UpdatesManager {
mContext.runOnUiThread(() -> { mContext.runOnUiThread(() -> {
progressDialogBuilder.dismiss(); progressDialogBuilder.dismiss();
if (!destination.exists()) {
UtilityExceptions.defaultException(mContext, new Exception("Errore durante il download dell'aggiornamento"));
return;
}
Uri fileLoc; Uri fileLoc;
Intent intent; Intent intent;
@ -93,7 +108,8 @@ public class UpdatesManager {
try { try {
fileDownloader.download(); fileDownloader.download();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); progressDialogBuilder.dismissAllowingStateLoss();
UtilityExceptions.defaultException(mContext, e);
} }
}).start(); }).start();
} }

View File

@ -61,6 +61,8 @@ public class FileDownloader {
} }
} catch (Exception e) { } catch (Exception e) {
if(downloadFile != null && downloadFile.exists())
downloadFile.delete();
throw e; throw e;
} finally { } finally {

View File

@ -41,6 +41,7 @@ import it.integry.integrywmsnative.core.interfaces.ISearchableFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.menu.MenuService; 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.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.core.update.UpdatesManager;
import it.integry.integrywmsnative.core.utility.UtilityContext; import it.integry.integrywmsnative.core.utility.UtilityContext;
@ -69,6 +70,9 @@ public class MainActivity extends BaseActivity
@Inject @Inject
UpdatesManager updatesManager; UpdatesManager updatesManager;
@Inject
SystemRESTConsumer systemRESTConsumer;
@Inject @Inject
DialogProgressView mDialogProgressView; DialogProgressView mDialogProgressView;
@ -85,7 +89,7 @@ public class MainActivity extends BaseActivity
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false);
setContentView(mBinding.getRoot()); setContentView(mBinding.getRoot());
updatesManager.init(this); updatesManager.init(this, systemRESTConsumer);
UtilityContext.initMainActivity(this); UtilityContext.initMainActivity(this);
setSupportActionBar(mBinding.appBarMain.toolbar); setSupportActionBar(mBinding.appBarMain.toolbar);