From 63db8d2d0c9b69533fe52927f3f5e4af53722550 Mon Sep 17 00:00:00 2001 From: Alexander Semenov Date: Mon, 15 Aug 2016 14:26:34 +0300 Subject: [PATCH] Added possibility to track events send result through Future --- .../tracking/android/WoopraTracker.java | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/com/woopra/tracking/android/WoopraTracker.java b/src/com/woopra/tracking/android/WoopraTracker.java index b21b2da..6307ff0 100755 --- a/src/com/woopra/tracking/android/WoopraTracker.java +++ b/src/com/woopra/tracking/android/WoopraTracker.java @@ -19,8 +19,10 @@ import java.net.URLEncoder; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -34,7 +36,7 @@ public class WoopraTracker { private static final String TAG = WoopraTracker.class.getName(); private static final String W_EVENT_ENDPOINT = "http://www.woopra.com/track/ce/"; - + private ScheduledExecutorService pingScheduler; private final ExecutorService executor; private final String domain; @@ -47,7 +49,7 @@ public class WoopraTracker { // private String referer = null, deviceType=null; private WoopraVisitor visitor = null; - + WoopraTracker(ExecutorService executor, String domain, WoopraVisitor vistor, WoopraClientInfo clientInfo) { this.executor = executor; @@ -56,16 +58,40 @@ public class WoopraTracker { this.domain = domain; } + /** + * Tracks given event. This is asynchronous method. + * + * This method is deprecated, use {@link #trackEventWithFuture(WoopraEvent)} + * @param event event to track + * @return false, if failed to add event to queue + */ + @Deprecated public boolean trackEvent(WoopraEvent event) { EventRunner runner = new EventRunner(event); try { - executor.execute(runner); + executor.submit(runner); } catch (Exception e) { return false; } return true; } + /** + * Tracks given event. This is asynchronous method. + * @param event event to track + * @return future object, allows to track progress of execution or null, if failed to add event to queue + */ + public Future trackEventWithFuture(WoopraEvent event) { + EventRunner runner = new EventRunner(event); + try { + return executor.submit(runner); + } catch (Exception e) { + return null; + } + } + + + private boolean trackEventImpl(WoopraEvent event) { // generate request url StringBuilder urlBuilder = new StringBuilder(); @@ -208,7 +234,7 @@ public synchronized void setVisitorProperties(Map newProperties) getVisitor().setProperties(newProperties); } - class EventRunner implements Runnable { + class EventRunner implements Callable { WoopraEvent event = null; public EventRunner(WoopraEvent event) { @@ -216,9 +242,9 @@ public EventRunner(WoopraEvent event) { } @Override - public void run() { + public Boolean call() { // send track event - trackEventImpl(event); + return trackEventImpl(event); } } }