diff --git a/app/build.gradle b/app/build.gradle index 5817e59e..d14c9cbf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -164,9 +164,6 @@ dependencies { annotationProcessor "androidx.room:room-compiler:$room_version" implementation "androidx.room:room-rxjava3:$room_version" - //AppUpdate - implementation 'com.github.javiersantos:AppUpdater:2.7' - //Barcode implementation project(':pointmobilescannerlibrary') implementation project(':zebrascannerlibrary') diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 07e82282..0fc058e3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -150,6 +150,8 @@ import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUse import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoModule; import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiComponent; import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiModule; +import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableComponent; +import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableModule; // Definition of the Application graph @Singleton @@ -227,7 +229,8 @@ import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracc DialogAskVettoreModule.class, DialogAskVettoreModule.class, DialogCreateNewArtModule.class, - DialogSwitchUserDepoModule.class + DialogSwitchUserDepoModule.class, + DialogUpdateAvailableModule.class }) public interface MainApplicationComponent { @@ -382,6 +385,8 @@ public interface MainApplicationComponent { ProdRientroMerceOrderListComponent.Factory prodRientroMerceOrderListComponent(); + DialogUpdateAvailableComponent.Factory dialogUpdateAvailableComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); 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 a8703dbf..f09379f8 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 @@ -7,19 +7,17 @@ import android.os.Environment; import androidx.appcompat.app.AppCompatActivity; -import com.github.javiersantos.appupdater.AppUpdater; -import com.github.javiersantos.appupdater.enums.Display; -import com.github.javiersantos.appupdater.enums.UpdateFrom; - import java.io.File; import javax.inject.Singleton; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO; 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; +import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableView; @Singleton public class UpdatesManager { @@ -39,25 +37,33 @@ public class UpdatesManager { systemRESTConsumer.retrieveUpdatesInfo(latestData -> { - if(latestData == null) + if (latestData == null) return; - AppUpdater appUpdater = new AppUpdater(mContext) - .setDisplay(Display.DIALOG) - .setUpdateFrom(UpdateFrom.JSON) - .setUpdateJSON(currentVersionUrl) - .setButtonDoNotShowAgain(null) - .setButtonUpdateClickListener((dialog, which) -> { - installAPK(currentDownloadUrl); - }); + showDialog(latestData, () -> { + installAPK(currentDownloadUrl); + }); - if(latestData.isForced()) - appUpdater.setButtonDismiss(null); - - appUpdater.start(); +// 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)); } + private void showDialog(LatestAppVersionInfoDTO updatesData, Runnable onUpdateStart) { + DialogUpdateAvailableView.newInstance(updatesData, onUpdateStart) + .show(mContext.getSupportFragmentManager(), "dialog-updates"); + } private void installAPK(String downloadURL) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableComponent.java new file mode 100644 index 00000000..49c2b7b1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.update_available; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogUpdateAvailableComponent { + + @Subcomponent.Factory + interface Factory { + DialogUpdateAvailableComponent create(); + } + + void inject(DialogUpdateAvailableView dialogUpdateAvailableView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableModule.java new file mode 100644 index 00000000..8ca9ef55 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.update_available; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogUpdateAvailableComponent.class) +public class DialogUpdateAvailableModule { + + @Provides + DialogUpdateAvailableViewModel providesDialogUpdateAvailableViewModel() { + return new DialogUpdateAvailableViewModel(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableView.java new file mode 100644 index 00000000..4747bed5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableView.java @@ -0,0 +1,82 @@ +package it.integry.integrywmsnative.view.dialogs.update_available; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO; +import it.integry.integrywmsnative.databinding.DialogUpdateAvailableBinding; + +public class DialogUpdateAvailableView extends BaseDialogFragment { + + @Inject + DialogUpdateAvailableViewModel mViewModel; + + private DialogUpdateAvailableBinding mBindings; + private Context mContext; + + private Runnable onStartUpdate; + + //Pass here all external parameters + public static DialogUpdateAvailableView newInstance(LatestAppVersionInfoDTO updatesData, Runnable onStartUpdate) { + return new DialogUpdateAvailableView(updatesData, onStartUpdate); + } + + private DialogUpdateAvailableView(LatestAppVersionInfoDTO updatesData, Runnable onStartUpdate) { + super(); + this.onStartUpdate = onStartUpdate; + + MainApplication.appComponent + .dialogUpdateAvailableComponent() + .create() + .inject(this); + + mViewModel.init(updatesData); + } + + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogUpdateAvailableBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + mBindings.setViewmodel(mViewModel); + + + setCancelable(!mViewModel.getUpdatesData().get().isForced()); + + var alertDialogBuilder = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setCancelable(isCancelable()) + .setPositiveButton(R.string.update_action, (dialog, which) -> { + this.dismiss(); + this.onStartUpdate.run(); + }); + + if(!mViewModel.getUpdatesData().get().isForced()) { + alertDialogBuilder.setNegativeButton(R.string.abort, (dialog, which) -> { + this.dismiss(); + }); + } + + var alertDialog = alertDialogBuilder.create(); + + alertDialog.setCanceledOnTouchOutside(isCancelable()); + alertDialog.setOnShowListener(this); + return alertDialog; + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableViewModel.java new file mode 100644 index 00000000..6cf1b2c5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/update_available/DialogUpdateAvailableViewModel.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.view.dialogs.update_available; + +import androidx.databinding.ObservableField; + +import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO; + +public class DialogUpdateAvailableViewModel { + + private ObservableField updatesData = new ObservableField<>(); + + public void init(LatestAppVersionInfoDTO updatesData) { + this.updatesData.set(updatesData); + + } + + public ObservableField getUpdatesData() { + return updatesData; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_warning_24.xml b/app/src/main/res/drawable/ic_baseline_warning_24.xml index b1726a36..fe4d94db 100644 --- a/app/src/main/res/drawable/ic_baseline_warning_24.xml +++ b/app/src/main/res/drawable/ic_baseline_warning_24.xml @@ -1,5 +1,5 @@ - - + + + + diff --git a/app/src/main/res/drawable/ic_cloud_download.xml b/app/src/main/res/drawable/ic_cloud_download.xml new file mode 100644 index 00000000..b33364b2 --- /dev/null +++ b/app/src/main/res/drawable/ic_cloud_download.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/dialog_update_available.xml b/app/src/main/res/layout/dialog_update_available.xml new file mode 100644 index 00000000..556cbfd4 --- /dev/null +++ b/app/src/main/res/layout/dialog_update_available.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0b70fac6..d2a7e179 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -5,6 +5,11 @@ Apri menu Chiudi menu + Aggiorna + Aggiornamento disponibile + Obbligatorio + %s è disponibile al download. Scaricando l\'ultimo aggiornamento avrai le ultime funzionalità, migliorie e bug fix.]]> + Attendere Caricamento Completato diff --git a/app/src/main/res/values/custom_colors.xml b/app/src/main/res/values/custom_colors.xml index 77a8b4a3..7c03f040 100644 --- a/app/src/main/res/values/custom_colors.xml +++ b/app/src/main/res/values/custom_colors.xml @@ -7,6 +7,7 @@ #387ef5 #3f3f51b5 #757575 + #EED202 @color/green_500 @color/orange_700 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a9d77758..79e3a5bb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -50,6 +50,10 @@ Settings + Update + Update available + Mandatory + %s is available for download. Downloading the latest update will give you the latest features, improvements and bug fixes.]]> Custom company settings Waiting