diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 06522412..455afe1e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
index e893395e..efd31b11 100644
--- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
@@ -12,6 +12,8 @@ import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
+
+import android.os.StrictMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -53,7 +55,7 @@ public class MainActivity extends AppCompatActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- //ExceptionsHandler.init(this);
+
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false);
setContentView(mBinding.getRoot());
@@ -80,9 +82,9 @@ public class MainActivity extends AppCompatActivity
private void startLoginActivity(){
+ this.finish();
Intent myIntent = new Intent(this, LoginActivity.class);
startActivity(myIntent);
- this.finish();
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java
index 316a4e36..4b6f7e69 100644
--- a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java
@@ -4,8 +4,6 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
-import android.app.Activity;
-import android.os.Handler;
import android.text.SpannableString;
import android.widget.TextView;
@@ -31,13 +29,17 @@ public class SplashActivity extends AppCompatActivity {
initAppVersion();
-
PermissionsHelper.askPermissions(this, () -> {
init();
}, permanentlyDenied -> {
if(permanentlyDenied) {
DialogSimpleMessageHelper.makeErrorDialog(this,
- new SpannableString(getText(R.string.permissions_permanrntly_denied)), null, () -> {
+ new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> {
+ this.finish();
+ }).show();
+ } else {
+ DialogSimpleMessageHelper.makeErrorDialog(this,
+ new SpannableString(getText(R.string.permissions_denied)), null, () -> {
this.finish();
}).show();
}
@@ -71,19 +73,15 @@ public class SplashActivity extends AppCompatActivity {
private void startLoginActivity(){
+ this.finish();
Intent myIntent = new Intent(this, LoginActivity.class);
startActivity(myIntent);
- this.finish();
}
private void startMainActivity(){
- new Handler().postDelayed(() -> {
- Intent myIntent = new Intent(this, MainActivity.class);
- startActivity(myIntent);
- this.finish();
- }, 3000);
-
-
+ this.finish();
+ Intent myIntent = new Intent(this, MainActivity.class);
+ startActivity(myIntent);
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/GenericFileProvider.java b/app/src/main/java/it/integry/integrywmsnative/core/update/GenericFileProvider.java
new file mode 100644
index 00000000..ac8670af
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/update/GenericFileProvider.java
@@ -0,0 +1,5 @@
+package it.integry.integrywmsnative.core.update;
+
+import androidx.core.content.FileProvider;
+
+public class GenericFileProvider extends FileProvider {}
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java
new file mode 100644
index 00000000..32f4fa16
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java
@@ -0,0 +1,60 @@
+package it.integry.integrywmsnative.core.update;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class UpdateApp extends AsyncTask {
+ private Context context;
+ public void setContext(Context contextf){
+ context = contextf;
+ }
+
+ @Override
+ protected Void doInBackground(String... arg0) {
+ try {
+ URL url = new URL(arg0[0]);
+ HttpURLConnection c = (HttpURLConnection) url.openConnection();
+ c.setRequestMethod("GET");
+ c.setDoOutput(true);
+ c.connect();
+
+ File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+ file.mkdirs();
+ File outputFile = new File(file, "update.apk");
+ if(outputFile.exists()){
+ outputFile.delete();
+ }
+ FileOutputStream fos = new FileOutputStream(outputFile);
+
+ InputStream is = c.getInputStream();
+
+ byte[] buffer = new byte[1024];
+ int len1 = 0;
+ while ((len1 = is.read(buffer)) != -1) {
+ fos.write(buffer, 0, len1);
+ }
+ fos.close();
+ is.close();
+
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setDataAndType(Uri.fromFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)), "application/vnd.android.package-archive");
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
+ context.startActivity(intent);
+
+
+ } catch (Exception e) {
+ Log.e("UpdateAPP", "Update error! " + e.getMessage());
+ }
+ return null;
+ }
+}
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 4e70739a..930b4f6f 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,21 +1,94 @@
package it.integry.integrywmsnative.core.update;
+import android.app.Activity;
+import android.app.DownloadManager;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
import com.github.javiersantos.appupdater.AppUpdater;
+import com.github.javiersantos.appupdater.AppUpdaterUtils;
+import com.github.javiersantos.appupdater.enums.AppUpdaterError;
import com.github.javiersantos.appupdater.enums.Display;
import com.github.javiersantos.appupdater.enums.UpdateFrom;
+import com.github.javiersantos.appupdater.objects.Update;
+import java.io.File;
+
+import androidx.core.content.FileProvider;
+import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UpdatesManager {
- public static void init(Context context) {
+ public static void init(Activity context) {
+ String currentVersionUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/currentVersion";
+ String currentDownloadUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/android-release_v2.apk";
+
+
AppUpdater appUpdater = new AppUpdater(context)
.setDisplay(Display.DIALOG)
.setUpdateFrom(UpdateFrom.JSON)
- .setUpdateJSON("http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/currentVersion");
+ .setUpdateJSON(currentVersionUrl)
+ .setButtonUpdateClickListener((dialog, which) -> {
+
+ installAPK(context, currentDownloadUrl);
+ });
appUpdater.start();
}
+
+ private static void installAPK(Activity context, String downloadURL) {
+ String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
+ String fileName = context.getResources().getString(R.string.app_name) + ".apk";
+ destination += fileName;
+ final Uri uri = Uri.parse("file://" + destination);
+
+ //Delete update file if exists
+ final File file = new File(destination);
+ if (file.exists())
+ file.delete();
+
+ //set downloadmanager
+ DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadURL));
+ request.setDescription(context.getString(R.string.notification_update_download));
+ request.setTitle(context.getString(R.string.app_name));
+
+ //set destination
+ request.setDestinationUri(uri);
+
+ // get download service and enqueue file
+ final DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
+ manager.enqueue(request);
+
+ //set BroadcastReceiver to install app when .apk is downloaded
+ BroadcastReceiver onComplete = new BroadcastReceiver() {
+ public void onReceive(Context ctxt, Intent i) {
+
+ Uri fileLoc;
+ Intent intent;
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
+ fileLoc = GenericFileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".core.update.GenericFileProvider", file);
+ } else {
+ intent = new Intent(Intent.ACTION_VIEW);
+ fileLoc = Uri.fromFile(file);
+ }
+
+ intent.setDataAndType(fileLoc, "application/vnd.android.package-archive");
+ intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+
+ context.startActivity(intent);
+ }
+ };
+
+ //register receiver for when .apk download is compete
+ context.registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
+ }
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java
index e62203d5..09cebce1 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java
@@ -1,12 +1,14 @@
package it.integry.integrywmsnative.core.utility;
import android.Manifest;
-import android.app.Activity;
+import android.os.Build;
import com.emreeran.permissionlivedata.PermissionLiveData;
import com.emreeran.permissionlivedata.Status;
import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import androidx.appcompat.app.AppCompatActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -15,26 +17,62 @@ public class PermissionsHelper {
public static void askPermissions(AppCompatActivity activity, Runnable onPermissionsConfirmed, RunnableArgs onPermissionsDenied) {
- PermissionLiveData permissionLiveData = PermissionLiveData.create(
- activity,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- );
+ List permissionsToAsk = new ArrayList<>();
+ permissionsToAsk.add(Manifest.permission.READ_EXTERNAL_STORAGE);
+ permissionsToAsk.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ permissionsToAsk.add(Manifest.permission.INTERNET);
+ permissionsToAsk.add(Manifest.permission.ACCESS_WIFI_STATE);
- permissionLiveData.observe(activity, permission -> {
- if (permission.getStatus() == Status.RECEIVED) {
- if (permission.getGranted()) {
+
+ if(Build.VERSION.SDK_INT >= 23) {
+ //permissionsToAsk.add(Manifest.permission.REQUEST_INSTALL_PACKAGES);
+ }
+
+ String[] permissionArray = new String[permissionsToAsk.size()];
+ permissionsToAsk.toArray(permissionArray);
+
+ PermissionLiveData permissionLiveData = PermissionLiveData.create(
+ activity, permissionArray);
+
+ AtomicInteger permissionStatusCounter = new AtomicInteger();
+ AtomicInteger permissionGrantedCounter = new AtomicInteger();
+ AtomicInteger permissionPendingCounter = new AtomicInteger();
+ AtomicInteger permissionDeniedCounter = new AtomicInteger();
+ AtomicInteger permissionPermDeniedCounter = new AtomicInteger();
+
+ Runnable checkPermissionIfDone = () -> {
+ if(permissionStatusCounter.get() == permissionArray.length){
+
+ if(permissionGrantedCounter.get() == permissionStatusCounter.get()) {
onPermissionsConfirmed.run();
- //UtilityToast.showToast("Permission " + permission.getName() + " was granted.");
- } else if (permission.getShouldShowRequestPermissionRationale()) {
+ } else if(permissionPendingCounter.get() > 0) {
+ onPermissionsDenied.run(false);
+ } else if(permissionPermDeniedCounter.get() > 0) {
onPermissionsDenied.run(true);
- //UtilityToast.showToast("Permission " + permission.getName() + " was denied without ask never again checked.");
} else {
onPermissionsDenied.run(false);
- //UtilityToast.showToast("Permission " + permission.getName() + " was denied.");
+ }
+ }
+ };
+
+ permissionLiveData.observe(activity, permission -> {
+
+ permissionStatusCounter.getAndIncrement();
+
+ if (permission.getStatus() == Status.RECEIVED) {
+ if (permission.getGranted()) {
+ permissionGrantedCounter.getAndIncrement();
+ checkPermissionIfDone.run();
+ } else if (permission.getShouldShowRequestPermissionRationale()) {
+ permissionPermDeniedCounter.getAndIncrement();
+ checkPermissionIfDone.run();
+ } else {
+ permissionDeniedCounter.getAndIncrement();
+ checkPermissionIfDone.run();
}
} else if (permission.getStatus() == Status.PENDING) {
- //UtilityToast.showToast(String.format("Pending request for %s", permission.getName()));
+ permissionPendingCounter.getAndIncrement();
+ checkPermissionIfDone.run();
}
});
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java
index 5da0036b..4ce1974e 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java
@@ -233,13 +233,12 @@ public class LoginViewModel {
public void onLoginCompleted() {
loginButtonEnabled.set(true);
-
SettingsManager.update();
+ mActivity.finish();
+
Intent myIntent = new Intent(mActivity, MainActivity.class);
mActivity.startActivity(myIntent);
-
- mActivity.finish();
}
}
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index b7566829..90685803 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -163,6 +163,8 @@
Livello
Non valido
-
+
+ Tutti i permessi sono stati declinati, riapri l\'applicazione per continuare.
+ Download aggiornamento
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3b0dba4f..165ab8ae 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -171,6 +171,8 @@
Multiple LU found
Do you want print the label?
Please scan a Position barcode
- Please note that all permissions are required. Application will close now.
+ Please note that all permissions are required. Application will close now.
+ All permissions are required, please reopen the app.
+ Downloading update
diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml
new file mode 100644
index 00000000..ffa74ab5
--- /dev/null
+++ b/app/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file