Skip to content

Commit d810af5

Browse files
zhu-xiaoweixiaoweii
andauthored
feat: add configuration for user engagement event (#34)
Co-authored-by: xiaoweii <xiaoweii@amazom.com>
1 parent 18ee39b commit d810af5

File tree

8 files changed

+69
-13
lines changed

8 files changed

+69
-13
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ ClickstreamAnalytics.getClickStreamConfiguration()
9292
.withSendEventsInterval(10000)
9393
.withSessionTimeoutDuration(1800000)
9494
.withTrackScreenViewEvents(false)
95+
.withTrackUserEngagementEvents(false)
9596
.withTrackAppExceptionEvents(false)
9697
.withLogEvents(true)
9798
.withCustomDns(CustomOkhttpDns.getInstance())

clickstream/src/main/java/software/aws/solution/clickstream/AWSClickstreamPlugin.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -167,11 +167,6 @@ public void configure(
167167
pluginConfiguration.getBoolean(ConfigurationKey.COMPRESS_EVENTS.getConfigurationKey()));
168168
}
169169

170-
if (pluginConfiguration.has(ConfigurationKey.TRACK_APP_LIFECYCLE_EVENTS.getConfigurationKey())) {
171-
configurationBuilder.withTrackScreenViewEvents(pluginConfiguration
172-
.getBoolean(ConfigurationKey.TRACK_APP_LIFECYCLE_EVENTS.getConfigurationKey()));
173-
}
174-
175170
if (pluginConfiguration.has(ConfigurationKey.TRACK_APP_EXCEPTION_EVENTS.getConfigurationKey())) {
176171
configurationBuilder.withTrackAppExceptionEvents(pluginConfiguration
177172
.getBoolean(ConfigurationKey.TRACK_APP_EXCEPTION_EVENTS.getConfigurationKey()));
@@ -235,11 +230,6 @@ public enum ConfigurationKey {
235230
*/
236231
COMPRESS_EVENTS("isCompressEvents"),
237232

238-
/**
239-
* Whether to track app lifecycle events automatically.
240-
*/
241-
TRACK_APP_LIFECYCLE_EVENTS("isTrackAppLifecycleEvents"),
242-
243233
/**
244234
* Whether to track app exception events automatically.
245235
*/

clickstream/src/main/java/software/aws/solution/clickstream/AWSClickstreamPluginConfiguration.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@ public final class AWSClickstreamPluginConfiguration {
2929
private final long sendEventsInterval;
3030
private final long callTimeOut;
3131
private final boolean isTrackScreenViewEvents;
32+
private final boolean isTrackUserEngagementEvents;
3233
private final boolean isTrackAppExceptionEvents;
3334
private final boolean isCompressEvents;
3435
private final long sessionTimeOut;
3536

3637
private AWSClickstreamPluginConfiguration(Builder builder) {
3738
this.appId = builder.appId;
3839
this.isTrackScreenViewEvents = builder.isTrackScreenViewEvents;
40+
this.isTrackUserEngagementEvents = builder.isTrackUserEngagementEvents;
3941
this.isTrackAppExceptionEvents = builder.isTrackAppExceptionEvents;
4042
this.callTimeOut = builder.callTimeOut;
4143
this.sendEventsInterval = builder.sendEventsInterval;
@@ -80,6 +82,15 @@ boolean isTrackScreenViewEvents() {
8082
return isTrackScreenViewEvents;
8183
}
8284

85+
/**
86+
* Is auto user engagement tracking enabled.
87+
*
88+
* @return Is auto user engagement tracking enabled.
89+
*/
90+
boolean isTrackUserEngagementEvents() {
91+
return isTrackUserEngagementEvents;
92+
}
93+
8394
/**
8495
* Is auto exception tracking enabled.
8596
*
@@ -136,6 +147,7 @@ static final class Builder {
136147
private final long callTimeOut = DEFAULT_CALL_TIME_OUT;
137148
private boolean isCompressEvents = true;
138149
private boolean isTrackScreenViewEvents = true;
150+
private boolean isTrackUserEngagementEvents = true;
139151
private boolean isTrackAppExceptionEvents = false;
140152

141153
private long sessionTimeOut = DEFAULT_SESSION_TIME_OUT;
@@ -165,6 +177,11 @@ Builder withTrackScreenViewEvents(final boolean trackScreenViewEvents) {
165177
return this;
166178
}
167179

180+
Builder withTrackUserEngagementEvents(final boolean trackUserEngagementEvents) {
181+
this.isTrackUserEngagementEvents = trackUserEngagementEvents;
182+
return this;
183+
}
184+
168185
Builder withTrackAppExceptionEvents(final boolean trackAppExceptionEvents) {
169186
this.isTrackAppExceptionEvents = trackAppExceptionEvents;
170187
return this;

clickstream/src/main/java/software/aws/solution/clickstream/ClickstreamManagerFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ static ClickstreamManager create(Context context,
3737
.withCallTimeOut(clickstreamPluginConfiguration.getCallTimeOut())
3838
.withCompressEvents(clickstreamPluginConfiguration.isCompressEvents())
3939
.withTrackScreenViewEvents(clickstreamPluginConfiguration.isTrackScreenViewEvents())
40+
.withTrackUserEngagementEvents(clickstreamPluginConfiguration.isTrackUserEngagementEvents())
4041
.withTrackAppExceptionEvents(clickstreamPluginConfiguration.isTrackAppExceptionEvents())
4142
.withSessionTimeoutDuration(clickstreamPluginConfiguration.getSessionTimeOut());
4243

clickstream/src/main/java/software/aws/solution/clickstream/client/AutoRecordEventClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ public String getScreenUniqueId(Activity activity) {
134134
*/
135135
public void recordUserEngagement() {
136136
lastEngageTime = endEngageTimestamp - startEngageTimestamp;
137-
if (lastEngageTime > MIN_ENGAGEMENT_TIME) {
137+
if (clickstreamContext.getClickstreamConfiguration().isTrackUserEngagementEvents() &&
138+
lastEngageTime > MIN_ENGAGEMENT_TIME) {
138139
final AnalyticsEvent event =
139140
this.clickstreamContext.getAnalyticsClient().createEvent(Event.PresetEvent.USER_ENGAGEMENT);
140141
event.addAttribute(Event.ReservedAttribute.ENGAGEMENT_TIMESTAMP, lastEngageTime);

clickstream/src/main/java/software/aws/solution/clickstream/client/ClickstreamConfiguration.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class ClickstreamConfiguration {
3232
private long callTimeOut;
3333
private boolean isCompressEvents;
3434
private boolean isTrackScreenViewEvents;
35+
private boolean isTrackUserEngagementEvents;
3536
private boolean isTrackAppExceptionEvents;
3637
private boolean isLogEvents;
3738
private String authCookie;
@@ -192,6 +193,15 @@ public boolean isTrackScreenViewEvents() {
192193
return this.isTrackScreenViewEvents;
193194
}
194195

196+
/**
197+
* Is track user engagement events.
198+
*
199+
* @return Is track user engagement events.
200+
*/
201+
public boolean isTrackUserEngagementEvents() {
202+
return this.isTrackUserEngagementEvents;
203+
}
204+
195205
/**
196206
* Is track app screen view events.
197207
*
@@ -203,6 +213,17 @@ public ClickstreamConfiguration withTrackScreenViewEvents(final boolean isTrackS
203213
return this;
204214
}
205215

216+
/**
217+
* Is track user engagement events.
218+
*
219+
* @param isTrackUserEngagementEvents Is track user engagement events.
220+
* @return the current ClickstreamConfiguration instance.
221+
*/
222+
public ClickstreamConfiguration withTrackUserEngagementEvents(final boolean isTrackUserEngagementEvents) {
223+
this.isTrackUserEngagementEvents = isTrackUserEngagementEvents;
224+
return this;
225+
}
226+
206227
/**
207228
* Is track app exception events.
208229
*

clickstream/src/test/java/software/aws/solution/clickstream/AutoRecordEventClientTest.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ public void setup() {
7979
AWSClickstreamPluginConfiguration.Builder configurationBuilder = AWSClickstreamPluginConfiguration.builder();
8080
configurationBuilder.withAppId("demo-app")
8181
.withEndpoint("http://cs-se-serve-1qtj719j88vwn-1291141553.ap-southeast-1.elb.amazonaws.com/collect")
82-
.withSendEventsInterval(10000).withTrackScreenViewEvents(true);
82+
.withSendEventsInterval(10000)
83+
.withTrackScreenViewEvents(true)
84+
.withTrackUserEngagementEvents(true);
8385
AWSClickstreamPluginConfiguration clickstreamPluginConfiguration = configurationBuilder.build();
8486
ClickstreamManager clickstreamManager =
8587
ClickstreamManagerFactory.create(context, clickstreamPluginConfiguration);
@@ -146,6 +148,28 @@ public void testUserEngagementFail() throws Exception {
146148
}
147149
}
148150

151+
/**
152+
* test record user engagement event when configure is disabled.
153+
*
154+
* @throws Exception exception.
155+
*/
156+
@Test
157+
public void testCloseUserEngagementEvent() throws Exception {
158+
clickstreamContext.getClickstreamConfiguration().withTrackUserEngagementEvents(false);
159+
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_START);
160+
Thread.sleep(1100);
161+
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
162+
try (Cursor cursor = dbUtil.queryAllEvents();) {
163+
List<String> eventList = new ArrayList<>();
164+
while (cursor.moveToNext()) {
165+
String eventString = cursor.getString(2);
166+
JSONObject jsonObject = new JSONObject(eventString);
167+
eventList.add(jsonObject.getString("event_type"));
168+
}
169+
assertFalse(eventList.contains(Event.PresetEvent.USER_ENGAGEMENT));
170+
}
171+
}
172+
149173
/**
150174
* test view only one screen and record an screen view event.
151175
*

clickstream/src/test/java/software/aws/solution/clickstream/SessionClientTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ public void setup() {
5757
AWSClickstreamPluginConfiguration.Builder configurationBuilder = AWSClickstreamPluginConfiguration.builder();
5858
configurationBuilder.withAppId("demo-app")
5959
.withEndpoint("http://cs-se-serve-1qtj719j88vwn-1291141553.ap-southeast-1.elb.amazonaws.com/collect")
60-
.withSendEventsInterval(10000);
60+
.withSendEventsInterval(10000)
61+
.withSessionTimeOut(1800000L);
6162
AWSClickstreamPluginConfiguration clickstreamPluginConfiguration = configurationBuilder.build();
6263
ClickstreamManager clickstreamManager =
6364
ClickstreamManagerFactory.create(context, clickstreamPluginConfiguration);

0 commit comments

Comments
 (0)