Gestita installazione delle versioni beta

This commit is contained in:
Giuseppe Scorrano 2025-02-26 10:04:02 +01:00
parent d3b7cd8cd6
commit 6105c44dab
6 changed files with 59 additions and 38 deletions

View File

@ -132,8 +132,8 @@ public class MainApplicationModule {
@Provides
@Singleton
UpdatesManager provideUpdatesManager() {
return new UpdatesManager();
UpdatesManager provideUpdatesManager(ExecutorService executorService, Handler handler, SystemRESTConsumer systemRESTConsumer) {
return new UpdatesManager(executorService, handler, systemRESTConsumer);
}
@Provides

View File

@ -45,25 +45,16 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
this.restBuilder = restBuilder;
}
public void retrieveUpdatesInfo(final RunnableArgs<LatestAppVersionInfoDTO> onSuccess, final RunnableArgs<Exception> onFailed) {
public LatestAppVersionInfoDTO retrieveUpdatesInfoSynchronized(boolean betaVersion) throws Exception {
SystemRESTConsumerService systemRESTConsumerService = restBuilder.getService(SystemRESTConsumerService.class);
systemRESTConsumerService.retrieveUpdatesInfo()
.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<LatestAppVersionInfoDTO> call, Response<LatestAppVersionInfoDTO> response) {
var response = systemRESTConsumerService.retrieveUpdatesInfo(betaVersion ? "beta" : null)
.execute();
if (response.code() == 404) {
onSuccess.run(null);
return;
return null;
}
analyzeAnswerGeneric(response, "updates", onSuccess, onFailed);
}
@Override
public void onFailure(Call<LatestAppVersionInfoDTO> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
return analyzeAnswerGeneric(response, "updates");
}

View File

@ -17,7 +17,7 @@ import retrofit2.http.Query;
public interface SystemRESTConsumerService {
@GET("wms/currentVersion")
Call<LatestAppVersionInfoDTO> retrieveUpdatesInfo();
Call<LatestAppVersionInfoDTO> retrieveUpdatesInfo(@Query("suffix") String suffix);
@POST("device/register")
Call<ServiceRESTResponse<Void>> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO);

View File

@ -1,13 +1,17 @@
package it.integry.integrywmsnative.core.update;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceManager;
import java.io.File;
import java.util.concurrent.ExecutorService;
import javax.inject.Singleton;
@ -17,37 +21,62 @@ import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDT
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.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableView;
@Singleton
public class UpdatesManager {
private final ExecutorService executorService;
private final Handler handler;
private final SystemRESTConsumer systemRESTConsumer;
private AppCompatActivity mContext;
public void init(AppCompatActivity activityContext, SystemRESTConsumer systemRESTConsumer) {
public UpdatesManager(ExecutorService executorService, Handler handler, SystemRESTConsumer systemRESTConsumer) {
this.executorService = executorService;
this.handler = handler;
this.systemRESTConsumer = systemRESTConsumer;
}
public void init(AppCompatActivity activityContext) {
this.mContext = activityContext;
executorService.execute(() -> {
try {
final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() +
(SettingsManager.i().getServer().getPort() > 0 ? ":" + SettingsManager.i().getServer().getPort() : "");
final String currentVersionUrl = baseEndpoint + "/ems-api/wms/currentVersion";
final String currentDownloadUrl = baseEndpoint + "/ems-api/wms/android-release.apk";
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activityContext);
var betaEnabled = sharedPreferences.getBoolean(MainSettingsFragment.KEY_BUTTON_ENABLE_BETA, false);
systemRESTConsumer.retrieveUpdatesInfo(latestData -> {
LatestAppVersionInfoDTO latestData = systemRESTConsumer.retrieveUpdatesInfoSynchronized(betaEnabled);
if (latestData == null)
return;
if(latestData.getLatestVersionCode() <= BuildConfig.VERSION_CODE)
if (latestData.getLatestVersionCode() < BuildConfig.VERSION_CODE)
return;
boolean currentVersionIsBeta = BuildConfig.VERSION_NAME.contains("beta");
if(currentVersionIsBeta == betaEnabled && latestData.getLatestVersionCode() == BuildConfig.VERSION_CODE)
return;
String currentDownloadUrl = baseEndpoint + latestData.getUrl();
showDialog(latestData, () -> {
installAPK(currentDownloadUrl);
});
}, ex -> UtilityExceptions.defaultException(mContext, ex));
} catch (Exception e) {
handler.post(() -> {
UtilityExceptions.defaultException(mContext, e);
});
}
});
}
private void showDialog(LatestAppVersionInfoDTO updatesData, Runnable onUpdateStart) {
@ -67,13 +96,13 @@ public class UpdatesManager {
.setDestFolder(destination)
.setUrlString(downloadURL)
.setOnProgressUpdate(progress -> {
mContext.runOnUiThread(() -> {
handler.post(() -> {
progressDialogBuilder.setProgress(progress);
});
})
.setOnDownloadCompleted(destPath -> {
mContext.runOnUiThread(() -> {
handler.post(() -> {
progressDialogBuilder.dismiss();
if (!destination.exists()) {
@ -103,13 +132,13 @@ public class UpdatesManager {
});
new Thread(() -> {
executorService.execute(() -> {
try {
fileDownloader.download();
} catch (Exception e) {
progressDialogBuilder.dismissAllowingStateLoss();
UtilityExceptions.defaultException(mContext, e);
}
}).start();
});
}
}

View File

@ -89,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, systemRESTConsumer);
updatesManager.init(this);
UtilityContext.initMainActivity(this);
setSupportActionBar(mBinding.appBarMain.toolbar);

View File

@ -76,6 +76,7 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
public static final String KEY_PALLET_BT_DEVICE = "pallet_scale_bt_device";
public static final String KEY_TRIGGER_SCAN_MODE = "TRIG_SCAN_MODE";
public static final String KEY_TRIGGER_SCAN_DELAY = "TRIG_SCAN_DELAY";
public static final String KEY_BUTTON_ENABLE_BETA = "ENABLE_BETA";
public static final String KEY_BUTTON_EXPORT_LOG = "EXPORT_LOG";
private Collection<BluetoothDevice> btPairedDevices;