Creato nuovo dialog per notificare gli aggiornamenti dell'app
This commit is contained in:
parent
b5f7e12f5a
commit
13ec0c745e
@ -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')
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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) -> {
|
||||
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) {
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<LatestAppVersionInfoDTO> updatesData = new ObservableField<>();
|
||||
|
||||
public void init(LatestAppVersionInfoDTO updatesData) {
|
||||
this.updatesData.set(updatesData);
|
||||
|
||||
}
|
||||
|
||||
public ObservableField<LatestAppVersionInfoDTO> getUpdatesData() {
|
||||
return updatesData;
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
|
||||
|
||||
<path android:fillColor="#FF000000" android:pathData="M23.08,15.33L15,2.57c-0.68,-0.98 -1.81,-1.57 -3,-1.57s-2.32,0.58 -3.03,1.6L0.93,15.31c-1.02,1.46 -1.21,3.21 -0.5,4.56 0.7,1.35 2.17,2.12 4.01,2.12h15.12c1.85,0 3.31,-0.77 4.01,-2.12 0.7,-1.35 0.51,-3.09 -0.49,-4.54ZM11,7c0,-0.55 0.45,-1 1,-1s1,0.45 1,1v6c0,0.55 -0.45,1 -1,1s-1,-0.45 -1,-1L11,7ZM12,19c-0.83,0 -1.5,-0.67 -1.5,-1.5s0.67,-1.5 1.5,-1.5 1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5Z"/>
|
||||
|
||||
</vector>
|
||||
|
||||
5
app/src/main/res/drawable/ic_cloud_download.xml
Normal file
5
app/src/main/res/drawable/ic_cloud_download.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
|
||||
|
||||
<path android:fillColor="#FF000000" android:pathData="M17.974,7.146c-0.332,-0.066 -0.603,-0.273 -0.742,-0.569 -1.552,-3.271 -5.143,-5.1 -8.735,-4.438 -3.272,0.6 -5.837,3.212 -6.384,6.501 -0.162,0.971 -0.15,1.943 0.033,2.89 0.06,0.309 -0.073,0.653 -0.346,0.901 -1.145,1.041 -1.801,2.524 -1.801,4.07 0,3.032 2.467,5.5 5.5,5.5h11c4.136,0 7.5,-3.364 7.5,-7.5 0,-3.565 -2.534,-6.658 -6.026,-7.354ZM15.121,14.708l-2.707,2.707c-0.387,0.387 -0.896,0.582 -1.405,0.584l-0.009,0.002 -0.009,-0.002c-0.509,-0.002 -1.018,-0.197 -1.405,-0.584l-2.707,-2.707c-0.391,-0.391 -0.391,-1.023 0,-1.414s1.023,-0.391 1.414,0l1.707,1.707v-5c0,-0.553 0.448,-1 1,-1s1,0.447 1,1v5l1.707,-1.707c0.391,-0.391 1.023,-0.391 1.414,0s0.391,1.023 0,1.414Z"/>
|
||||
|
||||
</vector>
|
||||
93
app/src/main/res/layout/dialog_update_available.xml
Normal file
93
app/src/main/res/layout/dialog_update_available.xml
Normal file
@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<data>
|
||||
<import type="it.integry.integrywmsnative.R" />
|
||||
<import type="androidx.core.content.ContextCompat" />
|
||||
<import type="android.text.Html" />
|
||||
|
||||
<variable
|
||||
name="viewmodel"
|
||||
type="it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableViewModel" />
|
||||
</data>
|
||||
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
app:cardCornerRadius="16dp"
|
||||
app:cardElevation="0dp">
|
||||
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingHorizontal="16dp"
|
||||
android:paddingVertical="16dp">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:src="@drawable/ic_cloud_download"
|
||||
app:tint="?colorPrimary" />
|
||||
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/title_text"
|
||||
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:maxLines="2"
|
||||
android:text="@string/update_available" />
|
||||
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
app:visibility="@{viewmodel.updatesData.forced}">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:src="@drawable/ic_baseline_warning_24"
|
||||
android:tint="@color/colorWarning"
|
||||
android:layout_marginEnd="6dp"/>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
style="@style/TextAppearance.Material3.BodyMedium"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/mandatory_update"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:src="@drawable/ic_baseline_warning_24"
|
||||
android:tint="@color/colorWarning"
|
||||
android:layout_marginStart="6dp" />
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/description_text"
|
||||
style="@style/TextAppearance.Material3.BodyMedium"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:layout_marginTop="12dp"
|
||||
tools:text="@string/update_description"
|
||||
android:text="@{Html.fromHtml(String.format(ContextCompat.getString(context, R.string.update_description), viewmodel.updatesData.latestVersion))}" />
|
||||
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
</androidx.cardview.widget.CardView>
|
||||
</layout>
|
||||
@ -5,6 +5,11 @@
|
||||
<string name="navigation_drawer_open">Apri menu</string>
|
||||
<string name="navigation_drawer_close">Chiudi menu</string>
|
||||
|
||||
<string name="update_action">Aggiorna</string>
|
||||
<string name="update_available">Aggiornamento disponibile</string>
|
||||
<string name="mandatory_update">Obbligatorio</string>
|
||||
<string name="update_description"><![CDATA[L\'aggiornamento <b>%s</b> è disponibile al download. Scaricando l\'ultimo aggiornamento avrai le ultime funzionalità, migliorie e bug fix.]]></string>
|
||||
|
||||
<string name="waiting">Attendere</string>
|
||||
<string name="loading">Caricamento</string>
|
||||
<string name="completed">Completato</string>
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
<color name="colorAccent">#387ef5</color>
|
||||
<color name="colorRipple">#3f3f51b5</color>
|
||||
<color name="colorPrimaryGray">#757575</color>
|
||||
<color name="colorWarning">#EED202</color>
|
||||
|
||||
<color name="mainGreen">@color/green_500</color>
|
||||
<color name="mainOrange">@color/orange_700</color>
|
||||
|
||||
@ -50,6 +50,10 @@
|
||||
|
||||
<string name="action_settings">Settings</string>
|
||||
|
||||
<string name="update_action">Update</string>
|
||||
<string name="update_available">Update available</string>
|
||||
<string name="mandatory_update">Mandatory</string>
|
||||
<string name="update_description"><![CDATA[Update <b>%s</b> is available for download. Downloading the latest update will give you the latest features, improvements and bug fixes.]]></string>
|
||||
|
||||
<string name="action_customize_server_settings">Custom company settings</string>
|
||||
<string name="waiting">Waiting</string>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user