From e06dd72d1d138846fd9f1f3211b39136fa3b73ae Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Thu, 28 Jun 2018 20:36:49 -0700 Subject: [PATCH 01/10] add crash handling --- .../src/main/java/com/leanplum/Leanplum.java | 2 + .../main/java/com/leanplum/internal/Util.java | 10 +++++ .../monitoring/LeanplumCrashHandler.java | 41 +++++++++++++++++++ .../monitoring/LeanplumCrashReporting.java | 5 +++ 4 files changed, 58 insertions(+) create mode 100644 AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java create mode 100644 AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java diff --git a/AndroidSDKCore/src/main/java/com/leanplum/Leanplum.java b/AndroidSDKCore/src/main/java/com/leanplum/Leanplum.java index 036d3f410..8c65ec6a8 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/Leanplum.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/Leanplum.java @@ -581,6 +581,8 @@ protected Void doInBackground(Void... params) { return null; } }); + + Util.initExceptionHandling(context); } catch (Throwable t) { Util.handleException(t); } diff --git a/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java b/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java index 4a55d2b07..68055ccd2 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java @@ -47,6 +47,7 @@ import com.leanplum.LeanplumException; import com.leanplum.internal.Constants.Methods; import com.leanplum.internal.Constants.Params; +import com.leanplum.monitoring.LeanplumCrashHandler; import com.leanplum.utils.SharedPreferencesUtil; import org.json.JSONException; @@ -837,10 +838,19 @@ private static void setUpdateTime(Map params, PackageManager pac } } + /** + * Initialize exception handling in the SDK. + */ + public static void initExceptionHandling(Context context) { + LeanplumCrashHandler.getInstance().setContext(context); + } + /** * Handles uncaught exceptions in the SDK. */ public static void handleException(Throwable t) { + LeanplumCrashHandler.getInstance().reportException(t); + if (t instanceof OutOfMemoryError) { if (Constants.isDevelopmentModeEnabled) { throw (OutOfMemoryError) t; diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java new file mode 100644 index 000000000..a8e4c377f --- /dev/null +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java @@ -0,0 +1,41 @@ +package com.leanplum.monitoring; + +import android.content.Context; + +import com.leanplum.internal.Log; + +import java.lang.reflect.Constructor; + +public class LeanplumCrashHandler { + private static final String RAYGUN_CRASH_REPORTER_CLASS = + "com.leanplum.monitoring.internal.RaygunCrashReporter"; + private static final LeanplumCrashHandler ourInstance = new LeanplumCrashHandler(); + + public static LeanplumCrashHandler getInstance() { + return ourInstance; + } + + private LeanplumCrashReporting crashReporter; + + private LeanplumCrashHandler() {} + + public void setContext(Context context) { + try { + Class clazz = Class.forName(RAYGUN_CRASH_REPORTER_CLASS); + Constructor constructor = clazz.getConstructor(Context.class); + crashReporter = (LeanplumCrashReporting) constructor.newInstance(context); + } catch (Throwable t) { + Log.e("LeanplumCrashHandler", t); + } + } + + public void reportException(Throwable exception) { + if (crashReporter != null) { + try { + crashReporter.reportException(exception); + } catch (Throwable t) { + Log.e("LeanplumCrashHandler", t); + } + } + } +} diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java new file mode 100644 index 000000000..7e078e753 --- /dev/null +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java @@ -0,0 +1,5 @@ +package com.leanplum.monitoring; + +public interface LeanplumCrashReporting { + void reportException(Throwable t); +} From 83b50e8c889b635a88ee2fedc40b037ba8053b06 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Fri, 29 Jun 2018 15:59:01 -0700 Subject: [PATCH 02/10] review changes --- .../monitoring/LeanplumCrashHandler.java | 41 ------------------- .../monitoring/LeanplumCrashReporting.java | 5 --- 2 files changed, 46 deletions(-) delete mode 100644 AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java delete mode 100644 AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java deleted file mode 100644 index a8e4c377f..000000000 --- a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.leanplum.monitoring; - -import android.content.Context; - -import com.leanplum.internal.Log; - -import java.lang.reflect.Constructor; - -public class LeanplumCrashHandler { - private static final String RAYGUN_CRASH_REPORTER_CLASS = - "com.leanplum.monitoring.internal.RaygunCrashReporter"; - private static final LeanplumCrashHandler ourInstance = new LeanplumCrashHandler(); - - public static LeanplumCrashHandler getInstance() { - return ourInstance; - } - - private LeanplumCrashReporting crashReporter; - - private LeanplumCrashHandler() {} - - public void setContext(Context context) { - try { - Class clazz = Class.forName(RAYGUN_CRASH_REPORTER_CLASS); - Constructor constructor = clazz.getConstructor(Context.class); - crashReporter = (LeanplumCrashReporting) constructor.newInstance(context); - } catch (Throwable t) { - Log.e("LeanplumCrashHandler", t); - } - } - - public void reportException(Throwable exception) { - if (crashReporter != null) { - try { - crashReporter.reportException(exception); - } catch (Throwable t) { - Log.e("LeanplumCrashHandler", t); - } - } - } -} diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java deleted file mode 100644 index 7e078e753..000000000 --- a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/LeanplumCrashReporting.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.leanplum.monitoring; - -public interface LeanplumCrashReporting { - void reportException(Throwable t); -} From 684f21e6fd5267e25ed949d11ef22961d64a5ab5 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Fri, 29 Jun 2018 16:02:18 -0700 Subject: [PATCH 03/10] add renamed files --- .../com/leanplum/monitoring/CrashHandler.java | 41 +++++++++++++++++++ .../monitoring/ExceptionReporting.java | 5 +++ 2 files changed, 46 insertions(+) create mode 100644 AndroidSDKCore/src/main/java/com/leanplum/monitoring/CrashHandler.java create mode 100644 AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/CrashHandler.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/CrashHandler.java new file mode 100644 index 000000000..bbe8fb645 --- /dev/null +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/CrashHandler.java @@ -0,0 +1,41 @@ +package com.leanplum.monitoring; + +import android.content.Context; + +import com.leanplum.internal.Log; + +import java.lang.reflect.Constructor; + +public class CrashHandler { + private static final String RAYGUN_CRASH_REPORTER_CLASS = + "com.leanplum.monitoring.internal.RaygunCrashReporter"; + private static final CrashHandler instance = new CrashHandler(); + + private ExceptionReporting exceptionReporting; + + private CrashHandler() {} + + public static CrashHandler getInstance() { + return instance; + } + + public void setContext(Context context) { + try { + Class clazz = Class.forName(RAYGUN_CRASH_REPORTER_CLASS); + Constructor constructor = clazz.getConstructor(Context.class); + exceptionReporting = (ExceptionReporting) constructor.newInstance(context); + } catch (Throwable t) { + Log.e("LeanplumCrashHandler", t); + } + } + + public void reportException(Throwable exception) { + if (exceptionReporting != null) { + try { + exceptionReporting.reportException(exception); + } catch (Throwable t) { + Log.e("LeanplumCrashHandler", t); + } + } + } +} diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java new file mode 100644 index 000000000..f18f0e97f --- /dev/null +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java @@ -0,0 +1,5 @@ +package com.leanplum.monitoring; + +public interface ExceptionReporting { + void reportException(Throwable t); +} From e53a8796798df32adab979d64f8a79964fd9f565 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Fri, 29 Jun 2018 16:06:21 -0700 Subject: [PATCH 04/10] rename files fixes --- .../src/main/java/com/leanplum/internal/Util.java | 6 +++--- .../monitoring/{CrashHandler.java => ExceptionHandler.java} | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) rename AndroidSDKCore/src/main/java/com/leanplum/monitoring/{CrashHandler.java => ExceptionHandler.java} (86%) diff --git a/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java b/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java index 68055ccd2..9149f5762 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java @@ -47,7 +47,7 @@ import com.leanplum.LeanplumException; import com.leanplum.internal.Constants.Methods; import com.leanplum.internal.Constants.Params; -import com.leanplum.monitoring.LeanplumCrashHandler; +import com.leanplum.monitoring.CrashHandler; import com.leanplum.utils.SharedPreferencesUtil; import org.json.JSONException; @@ -842,14 +842,14 @@ private static void setUpdateTime(Map params, PackageManager pac * Initialize exception handling in the SDK. */ public static void initExceptionHandling(Context context) { - LeanplumCrashHandler.getInstance().setContext(context); + ExceptionHandler.getInstance().setContext(context); } /** * Handles uncaught exceptions in the SDK. */ public static void handleException(Throwable t) { - LeanplumCrashHandler.getInstance().reportException(t); + ExceptionHandler.getInstance().reportException(t); if (t instanceof OutOfMemoryError) { if (Constants.isDevelopmentModeEnabled) { diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/CrashHandler.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java similarity index 86% rename from AndroidSDKCore/src/main/java/com/leanplum/monitoring/CrashHandler.java rename to AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java index bbe8fb645..7bae62f12 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/CrashHandler.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java @@ -6,16 +6,16 @@ import java.lang.reflect.Constructor; -public class CrashHandler { +public class ExceptionHandler { private static final String RAYGUN_CRASH_REPORTER_CLASS = "com.leanplum.monitoring.internal.RaygunCrashReporter"; - private static final CrashHandler instance = new CrashHandler(); + private static final ExceptionHandler instance = new ExceptionHandler(); private ExceptionReporting exceptionReporting; private CrashHandler() {} - public static CrashHandler getInstance() { + public static ExceptionHandler getInstance() { return instance; } From 37177ff6ac878c37283421287fc3d5e4bbaa89a3 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Fri, 29 Jun 2018 16:12:58 -0700 Subject: [PATCH 05/10] fix error --- .../src/main/java/com/leanplum/monitoring/ExceptionHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java index 7bae62f12..6712fdcb5 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java @@ -13,7 +13,7 @@ public class ExceptionHandler { private ExceptionReporting exceptionReporting; - private CrashHandler() {} + private ExceptionHandler() {} public static ExceptionHandler getInstance() { return instance; From e967d69b1c18fb103d4104f60796e914345fd4b7 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Fri, 29 Jun 2018 16:27:09 -0700 Subject: [PATCH 06/10] fix error ugh --- AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java b/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java index 9149f5762..acd311bfe 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/internal/Util.java @@ -47,7 +47,7 @@ import com.leanplum.LeanplumException; import com.leanplum.internal.Constants.Methods; import com.leanplum.internal.Constants.Params; -import com.leanplum.monitoring.CrashHandler; +import com.leanplum.monitoring.ExceptionHandler; import com.leanplum.utils.SharedPreferencesUtil; import org.json.JSONException; From 323b730816a480ff646e3753bf2e34e0ab381973 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Fri, 29 Jun 2018 21:24:23 -0700 Subject: [PATCH 07/10] fix class name --- AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java | 2 ++ .../src/main/java/com/leanplum/monitoring/ExceptionHandler.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java b/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java index 240c4d5ef..4298bf14f 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java @@ -570,6 +570,8 @@ private void sendRequests() { JSONObject responseBody; HttpURLConnection op = null; + + try { try { op = Util.operation( diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java index 6712fdcb5..7905cacb9 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java @@ -8,7 +8,7 @@ public class ExceptionHandler { private static final String RAYGUN_CRASH_REPORTER_CLASS = - "com.leanplum.monitoring.internal.RaygunCrashReporter"; + "com.leanplum.monitoring.internal.RaygunExceptionReporter"; private static final ExceptionHandler instance = new ExceptionHandler(); private ExceptionReporting exceptionReporting; From d9b076614a1ef0c822f302d3d6bfcd59b6437610 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Tue, 3 Jul 2018 11:42:38 -0700 Subject: [PATCH 08/10] static initializer instead of reflection --- .../leanplum/monitoring/ExceptionHandler.java | 26 +++++++++++-------- .../monitoring/ExceptionReporting.java | 3 +++ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java index 7905cacb9..a3831af41 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionHandler.java @@ -4,14 +4,11 @@ import com.leanplum.internal.Log; -import java.lang.reflect.Constructor; - public class ExceptionHandler { - private static final String RAYGUN_CRASH_REPORTER_CLASS = - "com.leanplum.monitoring.internal.RaygunExceptionReporter"; + private static final String LEANPLUM_CRASH_REPORTER_CLASS = + "com.leanplum.monitoring.internal.LeanplumExceptionReporter"; private static final ExceptionHandler instance = new ExceptionHandler(); - - private ExceptionReporting exceptionReporting; + public ExceptionReporting exceptionReporter = null; private ExceptionHandler() {} @@ -21,18 +18,25 @@ public static ExceptionHandler getInstance() { public void setContext(Context context) { try { - Class clazz = Class.forName(RAYGUN_CRASH_REPORTER_CLASS); - Constructor constructor = clazz.getConstructor(Context.class); - exceptionReporting = (ExceptionReporting) constructor.newInstance(context); + // Class.forName runs the static initializer in LeanplumExceptionReporter + // which sets the exceptionReporter on the singleton + Class.forName(LEANPLUM_CRASH_REPORTER_CLASS); + if (exceptionReporter != null) { + try { + exceptionReporter.setContext(context); + } catch (Throwable t) { + Log.e("LeanplumCrashHandler", t); + } + } } catch (Throwable t) { Log.e("LeanplumCrashHandler", t); } } public void reportException(Throwable exception) { - if (exceptionReporting != null) { + if (exceptionReporter != null) { try { - exceptionReporting.reportException(exception); + exceptionReporter.reportException(exception); } catch (Throwable t) { Log.e("LeanplumCrashHandler", t); } diff --git a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java index f18f0e97f..288bbbf9e 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/monitoring/ExceptionReporting.java @@ -1,5 +1,8 @@ package com.leanplum.monitoring; +import android.content.Context; + public interface ExceptionReporting { + void setContext(Context context); void reportException(Throwable t); } From 2bb45e7a6f9af2fe2b29fe7e3e7176b31ddbaf00 Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Tue, 3 Jul 2018 11:57:56 -0700 Subject: [PATCH 09/10] revert unwanted change --- AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java | 1 - 1 file changed, 1 deletion(-) diff --git a/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java b/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java index 4298bf14f..08a57bc2b 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java @@ -571,7 +571,6 @@ private void sendRequests() { JSONObject responseBody; HttpURLConnection op = null; - try { try { op = Util.operation( From f2632bdb68101cb17e183ff3d66fee05ce84a4dd Mon Sep 17 00:00:00 2001 From: Mayank Sanganeria Date: Tue, 3 Jul 2018 12:00:44 -0700 Subject: [PATCH 10/10] there were 2 lines, whoa --- AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java | 1 - 1 file changed, 1 deletion(-) diff --git a/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java b/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java index 08a57bc2b..240c4d5ef 100644 --- a/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java +++ b/AndroidSDKCore/src/main/java/com/leanplum/internal/Request.java @@ -570,7 +570,6 @@ private void sendRequests() { JSONObject responseBody; HttpURLConnection op = null; - try { try { op = Util.operation(