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"
|
annotationProcessor "androidx.room:room-compiler:$room_version"
|
||||||
implementation "androidx.room:room-rxjava3:$room_version"
|
implementation "androidx.room:room-rxjava3:$room_version"
|
||||||
|
|
||||||
//AppUpdate
|
|
||||||
implementation 'com.github.javiersantos:AppUpdater:2.7'
|
|
||||||
|
|
||||||
//Barcode
|
//Barcode
|
||||||
implementation project(':pointmobilescannerlibrary')
|
implementation project(':pointmobilescannerlibrary')
|
||||||
implementation project(':zebrascannerlibrary')
|
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.switch_user_depo.DialogSwitchUserDepoModule;
|
||||||
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiComponent;
|
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiComponent;
|
||||||
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiModule;
|
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
|
// Definition of the Application graph
|
||||||
@Singleton
|
@Singleton
|
||||||
@ -227,7 +229,8 @@ import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracc
|
|||||||
DialogAskVettoreModule.class,
|
DialogAskVettoreModule.class,
|
||||||
DialogAskVettoreModule.class,
|
DialogAskVettoreModule.class,
|
||||||
DialogCreateNewArtModule.class,
|
DialogCreateNewArtModule.class,
|
||||||
DialogSwitchUserDepoModule.class
|
DialogSwitchUserDepoModule.class,
|
||||||
|
DialogUpdateAvailableModule.class
|
||||||
})
|
})
|
||||||
public interface MainApplicationComponent {
|
public interface MainApplicationComponent {
|
||||||
|
|
||||||
@ -382,6 +385,8 @@ public interface MainApplicationComponent {
|
|||||||
|
|
||||||
ProdRientroMerceOrderListComponent.Factory prodRientroMerceOrderListComponent();
|
ProdRientroMerceOrderListComponent.Factory prodRientroMerceOrderListComponent();
|
||||||
|
|
||||||
|
DialogUpdateAvailableComponent.Factory dialogUpdateAvailableComponent();
|
||||||
|
|
||||||
void inject(MainApplication mainApplication);
|
void inject(MainApplication mainApplication);
|
||||||
|
|
||||||
void inject(AppContext mainApplication);
|
void inject(AppContext mainApplication);
|
||||||
|
|||||||
@ -7,19 +7,17 @@ import android.os.Environment;
|
|||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
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 java.io.File;
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
|
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.settings.SettingsManager;
|
||||||
import it.integry.integrywmsnative.core.utility.FileDownloader;
|
import it.integry.integrywmsnative.core.utility.FileDownloader;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||||
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
|
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
|
||||||
|
import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAvailableView;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class UpdatesManager {
|
public class UpdatesManager {
|
||||||
@ -39,25 +37,33 @@ public class UpdatesManager {
|
|||||||
|
|
||||||
systemRESTConsumer.retrieveUpdatesInfo(latestData -> {
|
systemRESTConsumer.retrieveUpdatesInfo(latestData -> {
|
||||||
|
|
||||||
if(latestData == null)
|
if (latestData == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
AppUpdater appUpdater = new AppUpdater(mContext)
|
showDialog(latestData, () -> {
|
||||||
.setDisplay(Display.DIALOG)
|
|
||||||
.setUpdateFrom(UpdateFrom.JSON)
|
|
||||||
.setUpdateJSON(currentVersionUrl)
|
|
||||||
.setButtonDoNotShowAgain(null)
|
|
||||||
.setButtonUpdateClickListener((dialog, which) -> {
|
|
||||||
installAPK(currentDownloadUrl);
|
installAPK(currentDownloadUrl);
|
||||||
});
|
});
|
||||||
|
|
||||||
if(latestData.isForced())
|
// AppUpdater appUpdater = new AppUpdater(mContext)
|
||||||
appUpdater.setButtonDismiss(null);
|
// .setDisplay(Display.DIALOG)
|
||||||
|
// .setUpdateFrom(UpdateFrom.JSON)
|
||||||
appUpdater.start();
|
// .setUpdateJSON(currentVersionUrl)
|
||||||
|
// .setButtonDoNotShowAgain(null)
|
||||||
|
// .setButtonUpdateClickListener((dialog, which) -> {
|
||||||
|
// installAPK(currentDownloadUrl);
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// if (latestData.isForced())
|
||||||
|
// appUpdater.setButtonDismiss(null);
|
||||||
|
//
|
||||||
|
// appUpdater.start();
|
||||||
}, ex -> UtilityExceptions.defaultException(mContext, ex));
|
}, 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) {
|
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"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
|
||||||
android:viewportHeight="24" android:viewportWidth="24"
|
|
||||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
<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"/>
|
||||||
<path android:fillColor="@android:color/white" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
|
|
||||||
</vector>
|
</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_open">Apri menu</string>
|
||||||
<string name="navigation_drawer_close">Chiudi 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="waiting">Attendere</string>
|
||||||
<string name="loading">Caricamento</string>
|
<string name="loading">Caricamento</string>
|
||||||
<string name="completed">Completato</string>
|
<string name="completed">Completato</string>
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
<color name="colorAccent">#387ef5</color>
|
<color name="colorAccent">#387ef5</color>
|
||||||
<color name="colorRipple">#3f3f51b5</color>
|
<color name="colorRipple">#3f3f51b5</color>
|
||||||
<color name="colorPrimaryGray">#757575</color>
|
<color name="colorPrimaryGray">#757575</color>
|
||||||
|
<color name="colorWarning">#EED202</color>
|
||||||
|
|
||||||
<color name="mainGreen">@color/green_500</color>
|
<color name="mainGreen">@color/green_500</color>
|
||||||
<color name="mainOrange">@color/orange_700</color>
|
<color name="mainOrange">@color/orange_700</color>
|
||||||
|
|||||||
@ -50,6 +50,10 @@
|
|||||||
|
|
||||||
<string name="action_settings">Settings</string>
|
<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="action_customize_server_settings">Custom company settings</string>
|
||||||
<string name="waiting">Waiting</string>
|
<string name="waiting">Waiting</string>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user