diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index 3c1c74c5..8d774307 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -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 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 59da80b3..5bcf2c54 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 @@ -45,25 +45,16 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { this.restBuilder = restBuilder; } - public void retrieveUpdatesInfo(final RunnableArgs onSuccess, final RunnableArgs onFailed) { + public LatestAppVersionInfoDTO retrieveUpdatesInfoSynchronized(boolean betaVersion) throws Exception { SystemRESTConsumerService systemRESTConsumerService = restBuilder.getService(SystemRESTConsumerService.class); - systemRESTConsumerService.retrieveUpdatesInfo() - .enqueue(new ManagedErrorCallback<>() { - @Override - public void onResponse(Call call, Response response) { - if(response.code() == 404) { - onSuccess.run(null); - return; - } + var response = systemRESTConsumerService.retrieveUpdatesInfo(betaVersion ? "beta" : null) + .execute(); - analyzeAnswerGeneric(response, "updates", onSuccess, onFailed); - } + if (response.code() == 404) { + return null; + } - @Override - public void onFailure(Call call, @NonNull final Exception e) { - onFailed.run(e); - } - }); + return analyzeAnswerGeneric(response, "updates"); } 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 3391b423..97e88112 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 @@ -17,7 +17,7 @@ import retrofit2.http.Query; public interface SystemRESTConsumerService { @GET("wms/currentVersion") - Call retrieveUpdatesInfo(); + Call retrieveUpdatesInfo(@Query("suffix") String suffix); @POST("device/register") Call> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO); 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 00bc43a7..845ec1cf 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 @@ -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; - final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() + - (SettingsManager.i().getServer().getPort() > 0 ? ":" + SettingsManager.i().getServer().getPort() : ""); + executorService.execute(() -> { - final String currentVersionUrl = baseEndpoint + "/ems-api/wms/currentVersion"; - final String currentDownloadUrl = baseEndpoint + "/ems-api/wms/android-release.apk"; + try { + final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() + + (SettingsManager.i().getServer().getPort() > 0 ? ":" + SettingsManager.i().getServer().getPort() : ""); + 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 == null) + return; - if(latestData.getLatestVersionCode() <= BuildConfig.VERSION_CODE) - return; + if (latestData.getLatestVersionCode() < BuildConfig.VERSION_CODE) + return; - showDialog(latestData, () -> { - installAPK(currentDownloadUrl); - }); - }, ex -> UtilityExceptions.defaultException(mContext, ex)); + 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); + }); + + } 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(); + }); } } 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 58603a94..3fd0f3ad 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 @@ -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); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java index d98f7541..deba4b71 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java @@ -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 btPairedDevices;