From 73adec7b3beaecd786955d27f3412c205ac8c4e2 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Thu, 13 Apr 2017 11:55:58 +0200 Subject: [PATCH 1/6] Upgrade gradle and SDK --- AutomatticTracks/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AutomatticTracks/build.gradle b/AutomatticTracks/build.gradle index 5aec98ff..b738dcc7 100644 --- a/AutomatticTracks/build.gradle +++ b/AutomatticTracks/build.gradle @@ -3,7 +3,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.2' + classpath 'com.android.tools.build:gradle:2.3.1' classpath 'com.novoda:bintray-release:0.3.4' } } @@ -20,8 +20,8 @@ dependencies { } android { - compileSdkVersion 24 - buildToolsVersion "23.0.3" + compileSdkVersion 25 + buildToolsVersion "25.0.2" defaultConfig { versionName "1.1.1" From 2a559fe4df87507b399a8f88d90bf356a8319170 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Thu, 13 Apr 2017 11:56:32 +0200 Subject: [PATCH 2/6] Make sure event name is not empty --- .../src/main/java/com/automattic/android/tracks/Event.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java b/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java index 301e0ac2..2c9109aa 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java @@ -1,5 +1,6 @@ package com.automattic.android.tracks; +import android.text.TextUtils; import android.util.Log; import com.automattic.android.tracks.Exceptions.EventNameException; @@ -48,6 +49,10 @@ private void checkEventName(String name) throws EventNameException { return; } + if (TextUtils.isEmpty(name)) { + throw new EventNameException("Event name must not ne empty or null"); + } + if (name.contains("-")) { String errorMessage = "Event name must not contains dashes."; throw new EventNameException(errorMessage); From 85586f0dbf6937dc4030fe354a10ab974de9a38c Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Thu, 13 Apr 2017 12:08:00 +0200 Subject: [PATCH 3/6] Check event details before creating it. --- .../com/automattic/android/tracks/Event.java | 18 ++++++++++++++++-- .../Exceptions/EventDetailsException.java | 7 +++++++ .../automattic/android/tracks/StringUtils.java | 9 +++++++++ .../android/tracks/TracksClient.java | 5 +++-- 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 AutomatticTracks/src/main/java/com/automattic/android/tracks/Exceptions/EventDetailsException.java diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java b/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java index 2c9109aa..81efb946 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/Event.java @@ -3,6 +3,7 @@ import android.text.TextUtils; import android.util.Log; +import com.automattic.android.tracks.Exceptions.EventDetailsException; import com.automattic.android.tracks.Exceptions.EventNameException; import org.json.JSONException; @@ -34,12 +35,25 @@ public class Event implements Serializable { private JSONObject mCustomEventProps; public Event(String mEventName, String userID, TracksClient.NosaraUserType uType, - String userAgent, long timeStamp) throws EventNameException { + String userAgent, long timeStamp) throws EventNameException, EventDetailsException { + checkEventName(mEventName); + if (TextUtils.isEmpty(userID)) { + throw new EventDetailsException("Username cannot be empty!"); + } + + if (uType == null) { + throw new EventDetailsException("NosaraUserType cannot be null!"); + } + + if (TextUtils.isEmpty(userAgent)) { + Log.w(LOGTAG, "User Agent string is empty!"); + } + this.mEventName = mEventName; this.mUser = userID; this.mUserType = uType; - this.mUserAgent = userAgent; + this.mUserAgent = StringUtils.notNullStr(userAgent); this.mTimeStamp = timeStamp; } diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/Exceptions/EventDetailsException.java b/AutomatticTracks/src/main/java/com/automattic/android/tracks/Exceptions/EventDetailsException.java new file mode 100644 index 00000000..c97dd5e8 --- /dev/null +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/Exceptions/EventDetailsException.java @@ -0,0 +1,7 @@ +package com.automattic.android.tracks.Exceptions; + +public class EventDetailsException extends Exception { + public EventDetailsException(String detailMessage) { + super(detailMessage); + } +} diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/StringUtils.java b/AutomatticTracks/src/main/java/com/automattic/android/tracks/StringUtils.java index 6128f111..628d2c59 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/StringUtils.java +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/StringUtils.java @@ -42,4 +42,13 @@ public static boolean containsWhiteSpace(final String testCode) { return false; } + /* + * returns empty string if passed string is null, otherwise returns passed string + */ + public static String notNullStr(String s) { + if (s == null) { + return ""; + } + return s; + } } diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/TracksClient.java b/AutomatticTracks/src/main/java/com/automattic/android/tracks/TracksClient.java index 12e04c03..dd0a5b4a 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/TracksClient.java +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/TracksClient.java @@ -5,6 +5,7 @@ import android.os.Handler; import android.util.Log; +import com.automattic.android.tracks.Exceptions.EventDetailsException; import com.automattic.android.tracks.Exceptions.EventNameException; import com.automattic.android.tracks.datasets.EventTable; @@ -368,7 +369,7 @@ public void track(String eventName, String user, NosaraUserType userType) { } public void track(String eventName, JSONObject customProps, String user, NosaraUserType userType) { - Event event = null; + Event event; try { event = new Event( eventName, @@ -377,7 +378,7 @@ public void track(String eventName, JSONObject customProps, String user, NosaraU getUserAgent(), System.currentTimeMillis() ); - } catch (EventNameException e) { + } catch (EventNameException | EventDetailsException e) { Log.e(LOGTAG, "Cannot create the event: " +eventName, e); return; } From 24dc87efce8ddfbbb8689d6b8bab25d9bb1739fe Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Thu, 13 Apr 2017 12:15:06 +0200 Subject: [PATCH 4/6] Catch IllegalArgumentException when inserting the event into the DB and log the error --- .../com/automattic/android/tracks/datasets/EventTable.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java b/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java index 6174e04c..f60d5061 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java @@ -77,7 +77,7 @@ public static void insertEvent(Context ctx, Event event) { stmt.bindString(1, event.getEventName()); stmt.bindString(2, event.getUser()); stmt.bindString(3, event.getUserAgent()); - stmt.bindLong(4, event.getUserType().ordinal()); + stmt.bindLong(4, event.getUserType().ordinal()); if (event.getUserProperties() != null) { stmt.bindString(5, event.getUserProperties().toString()); @@ -97,11 +97,13 @@ public static void insertEvent(Context ctx, Event event) { } stmt.bindLong(8, event.getTimeStamp()); - stmt.bindLong(9, event.getRetryCount()); + stmt.bindLong(9, event.getRetryCount()); stmt.execute(); db.setTransactionSuccessful(); + } catch(IllegalArgumentException e) { + Log.e(TracksDatabaseHelper.LOGTAG, "Cannot insert the current event. Please check the details of the event!", e); } finally { db.endTransaction(); SqlUtils.closeStatement(stmt); From fc93c5e9156cb361c4a334a28e1ad077eaa941c0 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Thu, 13 Apr 2017 12:18:14 +0200 Subject: [PATCH 5/6] Bump version name to 1.1.2 --- AutomatticTracks/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AutomatticTracks/build.gradle b/AutomatticTracks/build.gradle index b738dcc7..de5f0f75 100644 --- a/AutomatticTracks/build.gradle +++ b/AutomatticTracks/build.gradle @@ -24,9 +24,9 @@ android { buildToolsVersion "25.0.2" defaultConfig { - versionName "1.1.1" + versionName "1.1.2" minSdkVersion 14 - targetSdkVersion 24 + targetSdkVersion 25 } compileOptions { From b0ea0d9175336b1e403a2a61a0c6d2ccdef46fdb Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Thu, 13 Apr 2017 13:01:02 +0200 Subject: [PATCH 6/6] Checkstyle: Added missing space --- .../java/com/automattic/android/tracks/datasets/EventTable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java b/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java index f60d5061..dad3a946 100644 --- a/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java +++ b/AutomatticTracks/src/main/java/com/automattic/android/tracks/datasets/EventTable.java @@ -102,7 +102,7 @@ public static void insertEvent(Context ctx, Event event) { stmt.execute(); db.setTransactionSuccessful(); - } catch(IllegalArgumentException e) { + } catch (IllegalArgumentException e) { Log.e(TracksDatabaseHelper.LOGTAG, "Cannot insert the current event. Please check the details of the event!", e); } finally { db.endTransaction();