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 {
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'
}
}

View File

@ -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<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) {
RegisterDeviceRequestDTO registerDeviceRequestDTO = new RegisterDeviceRequestDTO()
.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.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<LatestAppVersionInfoDTO> retrieveUpdatesInfo();
@POST("device/register")
Call<ServiceRESTResponse<Void>> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO);

View File

@ -15,6 +15,32 @@ import retrofit2.Response;
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 {
if (response.isSuccessful()) {
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 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();
}

View File

@ -61,6 +61,8 @@ public class FileDownloader {
}
} catch (Exception e) {
if(downloadFile != null && downloadFile.exists())
downloadFile.delete();
throw e;
} 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.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);