diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 7a399af8..5357de36 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/app/build.gradle b/app/build.gradle
index da57a5d7..f1b02707 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,10 +9,11 @@ android {
applicationId "it.integry.integrywmsnative"
minSdkVersion 21
targetSdkVersion 28
- versionCode 5
- versionName "1.0.2"
+ versionCode 6
+ versionName "1.0.3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
+
buildTypes {
release {
minifyEnabled false
@@ -48,6 +49,9 @@ dependencies {
implementation 'org.parceler:parceler-api:1.1.10'
annotationProcessor 'org.parceler:parceler:1.1.10'
implementation 'com.annimon:stream:1.2.1'
+
+ implementation 'com.github.someshkumar049:permissionmadeeasy:1.1.1'
+
//MVVM
implementation 'android.arch.lifecycle:extensions:1.1.1'
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
index 1f5340a0..c23a40c3 100644
--- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
@@ -30,6 +30,7 @@ import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.update.UpdatesManager;
+import it.integry.integrywmsnative.core.utility.PermissionsHelper;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.databinding.ActivityMainBinding;
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment;
@@ -45,18 +46,20 @@ import it.integry.plugins.waterfalltoolbar.WaterfallToolbar;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
- //@BindView(R.id.drawer_username) TextView mDrawerUsername;
- //@BindView(R.id.drawer_logoAzienda) ImageView mDrawerLogo;
-
private ActivityMainBinding mBinding;
private boolean firstCheckExecution = true;
private boolean mIsOnline = false;
+
+ private PermissionsHelper permissionsHelper = new PermissionsHelper(this);
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ permissionsHelper.askPermissions();
+
if(SettingsManager.i().user.username == null && SettingsManager.i().user.password == null){
startLoginActivity();
} else {
diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java
index 1457a234..cc031601 100644
--- a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java
+++ b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java
@@ -11,6 +11,7 @@ import com.orhanobut.logger.Logger;
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
+import it.integry.integrywmsnative.core.exception.ExceptionsHandler;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.settings.Stash;
import it.integry.integrywmsnative.core.update.UpdatesManager;
@@ -30,6 +31,8 @@ public class MainApplication extends Application {
super.onCreate();
Stash.init(this);
+ new ExceptionsHandler(this);
+
SettingsManager.init(this);
ServerStatusChecker.init();
BarcodeManager.init(this);
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/ExceptionsHandler.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/ExceptionsHandler.java
index c87d9a82..a188a7a0 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/exception/ExceptionsHandler.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/ExceptionsHandler.java
@@ -8,375 +8,60 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Debug;
+import android.os.Environment;
import android.support.annotation.NonNull;
import android.util.Log;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
-public class ExceptionsHandler implements Thread.UncaughtExceptionHandler{
+import it.integry.integrywmsnative.core.utility.UtilityLogger;
+public class ExceptionsHandler implements Thread.UncaughtExceptionHandler {
- private ExceptionsHandler(Activity activity){
+ private final static String TAG = ExceptionsHandler.class.getSimpleName();
+ private final static String ERROR_FILE = ExceptionsHandler.class.getSimpleName() + ".error";
- mPackageName = getPackageName(activity);
+ private final Context context;
+ private final Thread.UncaughtExceptionHandler rootHandler;
+
+ public ExceptionsHandler(Context context) {
+ this.context = context;
+ // we should store the current exception handler -- to invoke it for all not handled exceptions ...
+ rootHandler = Thread.getDefaultUncaughtExceptionHandler();
+ // we replace the exception handler now with us -- we will properly dispatch the exceptions ...
+ Thread.setDefaultUncaughtExceptionHandler(this);
}
-
-
- public static ExceptionsHandler getINSTANCE(Activity activity){
-
- if (mExceptionsHandler == null){
-
- mExceptionsHandler = new ExceptionsHandler(activity);
- }
-
- return mExceptionsHandler;
- }
-
-
- private static String getPackageName(Context pContext){
-
- String packageName = "";
-
- try{
-
- ActivityManager activityManager = (ActivityManager) pContext
- .getSystemService(Context.ACTIVITY_SERVICE);
-
- if (Build.VERSION.SDK_INT > 20){
-
- packageName = activityManager.getRunningAppProcesses().get(0).processName;
- }else{
-
- //
- packageName = activityManager.getRunningTasks(1).get(0).topActivity
- .getPackageName();
- }
-
- // There is a limit to the tag length of 23.
- packageName = packageName
- .substring(0, packageName.length() > 22 ? 22 : packageName.length());
-
- }catch (Exception ex){
- }
-
- if (packageName.isEmpty()){
- packageName = pContext.getPackageName();
- }
-
- return packageName;
- }
-
-
-
-
- public static void toCatch(Activity activity){
-
- Thread.setDefaultUncaughtExceptionHandler(getINSTANCE(activity));
- }
-
-
-
-
-
-
-
- public static void logError(String message){
-
- if (message.isEmpty()){
-
- return;
- }
-
- logError(new Throwable(message.trim()));
- }
-
-
-
-
- public static void logError(Throwable exception){
-
- try{
-
- logCrash(exception);
-
- }catch (Exception e){
-
- Log.e(mPackageName, e.getMessage());
- }
- }
-
-
-
- // Return the last error message
- public static String getErrorMessage(){
-
- return mErrorMessage;
- }
-
-
-
-
- public static void setErrorMessage(String errMsg){
-
- mErrorMessage = errMsg;
- }
-
-
-
- // Return the last crash information
- public static ApplicationErrorReport.CrashInfo crashInfo(){
-
- return mCrashInfo;
- }
-
-
-
-
- private static String getAppLabel(Context pContext){
-
- PackageManager lPackageManager = pContext.getPackageManager();
-
- ApplicationInfo lApplicationInfo = null;
-
- try{
-
- lApplicationInfo = lPackageManager
- .getApplicationInfo(pContext.getApplicationInfo().packageName, 0);
-
- }catch (final PackageManager.NameNotFoundException e){
- }
-
- return (String) (lApplicationInfo != null ? lPackageManager
- .getApplicationLabel(lApplicationInfo) : "Unknown");
- }
-
-
-
- public static boolean inDebugger(){
-
- // If in Debugger Environment
- boolean debugging = Debug.isDebuggerConnected();
-
- return debugging;
- }
-
-
- @NonNull
- private static String errorMsg(Throwable exception, String exceptError){
-
- if (!exceptError.contains("error")){
-
- mReportBuilder.append(reportError(exception));
- }
-
- if (!exceptError.contains("callstack")){
-
- mReportBuilder.append(reportCallStack(exception));
- }
-
- if (!exceptError.contains("deviceinfo")){
-
- mReportBuilder.append(reportDeviceInfo());
- }
-
- if (!exceptError.contains("firmware")){
-
- mReportBuilder.append(reportFirmware());
- }
-
- return mReportBuilder.toString();
- }
-
-
-
-
- private static String reportError(Throwable exception){
-
- mCrashInfo = new ApplicationErrorReport.CrashInfo(exception);
-
- if (mCrashInfo.exceptionMessage == null){
-
- mErrorMessage = "";
- }else{
-
- mErrorMessage = mCrashInfo.exceptionMessage
- .replace(": " + mCrashInfo.exceptionClassName, "");
- }
-
- String throwFile = mCrashInfo.throwFileName == null ? ""
- : mCrashInfo.throwFileName;
-
- return "\n************ " + mCrashInfo.exceptionClassName + " ************\n"
- + mErrorMessage + LINE_SEPARATOR
- + "\n File: " + throwFile
- + "\n Method: " + mCrashInfo.throwMethodName + "()"
- + "\n Line No.: " + Integer.toString(mCrashInfo.throwLineNumber)
- + LINE_SEPARATOR;
- // + "Class: " + crashInfo.throwClassName + LINE_SEPARATOR
- }
-
-
-
-
- private static String reportCallStack(Throwable exception){
-
- StringWriter stackTrace = new StringWriter();
-
- exception.printStackTrace(new PrintWriter(stackTrace));
-
- String callStack = stackTrace.toString();
-
- String errMsg = exception.toString();
-
- return "\n************ CALLSTACK ************\n"
- + callStack.replace(errMsg, "")
- + LINE_SEPARATOR;
- }
-
-
-
-
- private static String reportDeviceInfo(){
-
- return "\n************ DEVICE INFORMATION ***********\n"
- + "Brand: "
- + Build.BRAND
- + LINE_SEPARATOR
- + "Device: "
- + Build.DEVICE
- + LINE_SEPARATOR
- + "Model: "
- + Build.MODEL
- + LINE_SEPARATOR
- + "Id: "
- + Build.ID
- + LINE_SEPARATOR
- + "Product: "
- + Build.PRODUCT
- + LINE_SEPARATOR;
- }
-
-
-
-
- private static String reportFirmware(){
-
- return "\n************ FIRMWARE ************\n"
- + "SDK: "
- + Build.VERSION.SDK_INT
- + LINE_SEPARATOR
- + "Release: "
- + Build.VERSION.RELEASE
- + LINE_SEPARATOR
- + "Incremental: "
- + Build.VERSION.INCREMENTAL
- + LINE_SEPARATOR;
- }
-
-
-
-
- // Empty the report as it is begin re-populated.
- private static void reportEmptied(){
-
- // No need to empty
- if (mReportBuilder.length() == 0){
-
- return;
- }
-
- mReportBuilder.setLength(0);
-
- mReportBuilder.trimToSize();
- }
-
-
-
-
@Override
- public void uncaughtException(Thread thread, Throwable exception){
-
- // Don't re-enter -- avoid infinite loops if crash-reporting crashes.
- if (mCrashing) return;
-
- mCrashing = true;
-
- catchException(thread, exception);
-
- defaultExceptionHandler(thread, exception);
- }
-
-
-
-
- public String catchException(Thread thread, Throwable exception){
-
- String errorMsg = "";
-
- try{
-
- errorMsg = logCrash(exception);
-
- }catch (Exception ex){
-
- Log.e(mPackageName, ex.getMessage());
+ public void uncaughtException(final Thread thread, final Throwable ex) {
+ try {
+ UtilityLogger.errorMe(new Exception(ex));
+ } catch (Exception e) {
+ Log.e(TAG, "Exception Logger failed!", e);
}
- return errorMsg;
+ appendToFile(new Exception(ex));
}
+ public void appendToFile(Exception e) {
+ try {
+ File yourFile = new File(Environment.getExternalStorageDirectory(), "log.txt");
-
-
- public static void defaultExceptionHandler(Thread thread, Throwable exception){
-
- try{
-
- // Execute the old handler.
- if (mOldHandler != null){
-
- mOldHandler.uncaughtException(thread, exception);
- }
-
- }catch (Exception ex){
-
- Log.e(mPackageName, ex.getMessage());
+ //String dataFolder = yourFile.getPath();
+ FileWriter fstream = new FileWriter(yourFile.getPath(), true);
+ BufferedWriter out = new BufferedWriter(fstream);
+ PrintWriter pWriter = new PrintWriter(out, true);
+ e.printStackTrace(pWriter);
+ }
+ catch (Exception ie) {
+ throw new RuntimeException("Could not write Exception to file", ie);
}
}
-
-
-
-
- public static String logCrash(Throwable exception){
-
- return errorMsg(exception, "deviceinfo firmware");
- }
-
-
-
-
- public void onDestroy(){
-
- mExceptionsHandler = null;
- }
-
- // Prevents infinite loops.
- private static volatile boolean mCrashing = false;
-
- private static final StringBuilder mReportBuilder = new StringBuilder();
-
- private static final String LINE_SEPARATOR = "\n";
-
- private static final Thread.UncaughtExceptionHandler mOldHandler = Thread
- .getDefaultUncaughtExceptionHandler();
-
- private static ExceptionsHandler mExceptionsHandler;
-
- private static String mPackageName;
-
- private static ApplicationErrorReport.CrashInfo mCrashInfo;
-
- private static String mErrorMessage = "";
}
\ No newline at end of file
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
new file mode 100644
index 00000000..9900085f
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java
@@ -0,0 +1,46 @@
+package it.integry.integrywmsnative.core.utility;
+
+import android.app.Activity;
+import android.support.annotation.NonNull;
+
+import com.somesh.permissionmadeeasy.enums.Permission;
+import com.somesh.permissionmadeeasy.helper.PermissionHelper;
+import com.somesh.permissionmadeeasy.intefaces.PermissionListener;
+
+import java.util.ArrayList;
+
+import it.integry.integrywmsnative.MainApplication;
+import it.integry.integrywmsnative.R;
+
+public class PermissionsHelper implements PermissionListener {
+
+ private Activity mActivity;
+ private Integer REQUEST_CODE = 1;
+
+ public PermissionsHelper(Activity activity) {
+ this.mActivity = activity;
+ }
+
+ public void askPermissions() {
+ PermissionHelper permissionHelper = PermissionHelper.Builder()
+ .with(this.mActivity)
+ .requestCode(REQUEST_CODE)
+ .setPermissionResultCallback(this)
+ .askFor(Permission.STORAGE)
+ .rationalMessage(mActivity.getResources().getString(R.string.permission_request_message)) //Optional
+ .build();
+
+ permissionHelper.requestPermissions();
+ }
+
+
+ @Override
+ public void onPermissionsGranted(int i, ArrayList arrayList) {
+
+ }
+
+ @Override
+ public void onPermissionsDenied(int i, ArrayList arrayList) {
+
+ }
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java
index 466cc490..eb0fb013 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java
@@ -57,6 +57,10 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
mBinding.setViewmodel(mRettificaGiacenzeViewModel);
init();
+
+ Integer a = null;
+ String b = a.toString();
+
return mBinding.getRoot();
}
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index fbb5fea5..67ffcef4 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -22,6 +22,8 @@
Resetta
Evasi
+ Questi permessi sono necessari al funzionamento dell\'app
+
Impostazioni
Personalizza impostazioni azienda
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 013bdebe..e4cda8ed 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -13,6 +13,8 @@
Completed
Search...
+ Permissions are required for app to work properly
+
%s of %s]]>
%s of %s]]>
diff --git a/build.gradle b/build.gradle
index 703e4837..53464802 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,7 +15,7 @@ buildscript {
google()
}
dependencies {
- classpath "com.android.tools.build:gradle:$gradle_version"
+ classpath "com.android.tools.build:gradle:3.2.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong