Skip to content

Commit b8c5ddc

Browse files
authored
Merge pull request #534 from Countly/staging
Staging 26.1.0
2 parents 2f5706c + 1e9f103 commit b8c5ddc

38 files changed

Lines changed: 4480 additions & 198 deletions

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
1+
## 26.1.0
2+
* Extended server configuration capabilities with server-controlled listing filters:
3+
* Event filters (blacklist/whitelist) to control which events are recorded.
4+
* User property filters (blacklist/whitelist) to control which user properties are recorded.
5+
* Segmentation filters (blacklist/whitelist) to control which segmentation keys are recorded.
6+
* Event-specific segmentation filters (blacklist/whitelist) to control segmentation keys per event.
7+
* Added support for Journey Trigger Events that trigger a content zone refresh when recorded.
8+
* Added a configurable user property cache limit through server configuration.
9+
10+
* Mitigated an issue where closing surveys that were presented via journeys was triggering an exception.
11+
* Mitigated an issue where when a content started loading opening a new activity could have hide it.
12+
13+
## 25.4.9
14+
* Added a new config option `disableViewRestartForManualRecording()` to disable auto close/restart behavior of manual views on app background/foreground actions.
15+
16+
## 25.4.8
17+
* Mitigated an issue where push notifications were not shown when consent was not required and app was killed.
18+
19+
## 25.4.7
20+
* Mitigated an issue where the navigation bar showed an unwanted shadow during content display.
21+
22+
## 25.4.6
23+
* Improved content error handling and display mechanics.
24+
* Updated user properties caching mechanism according to sessions.
25+
126
## 25.4.5
227
* Added a new config flag `setUseSerialExecutor(boolean useSerial)` for selecting immediate request executor type.
328
* Added a new config option `setWebviewDisplayOption(WebViewDisplayOption)` to control how Content and Feedback Widgets are displayed.

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ org.gradle.configureondemand=true
2222
android.useAndroidX=true
2323
android.enableJetifier=true
2424
# RELEASE FIELD SECTION
25-
VERSION_NAME=25.4.5
25+
VERSION_NAME=26.1.0
2626
GROUP=ly.count.android
2727
POM_URL=https://github.com/Countly/countly-sdk-android
2828
POM_SCM_URL=https://github.com/Countly/countly-sdk-android

sdk/build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ dependencies {
6464
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
6565
androidTestImplementation 'junit:junit:4.13.2'
6666

67-
androidTestImplementation "org.mockito:mockito-core:${mockitoVersion}"
6867
androidTestImplementation "org.mockito:mockito-android:${mockitoVersion}"
69-
//androidTestImplementation "com.squareup.okhttp3:mockwebserver:4.9.0"
68+
androidTestImplementation "com.squareup.okhttp3:mockwebserver:4.12.0"
7069
}
7170

7271
//Plugin for generating test coverage reports.

sdk/src/androidTest/AndroidManifest.xml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
3-
4-
<application>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools">
4+
<uses-permission android:name="android.permission.INTERNET"/>
5+
<application
6+
android:usesCleartextTraffic="true"
7+
android:networkSecurityConfig="@xml/network_security_config"
8+
tools:replace="android:networkSecurityConfig,android:usesCleartextTraffic">
59
<activity
610
android:name=".TestUtils$Activity2"
711
android:excludeFromRecents="true"

sdk/src/androidTest/java/ly/count/android/sdk/ConnectionProcessorTests.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ of this software and associated documentation files (the "Software"), to deal
2929
import java.net.HttpURLConnection;
3030
import java.net.URL;
3131
import java.net.URLConnection;
32+
import java.util.Collections;
3233
import java.util.HashMap;
34+
import java.util.HashSet;
3335
import java.util.Map;
36+
import java.util.Set;
37+
import java.util.concurrent.ConcurrentHashMap;
3438
import org.junit.Before;
3539
import org.junit.Test;
3640
import org.junit.runner.RunWith;
@@ -130,6 +134,30 @@ public void setUp() {
130134
@Override public int getRequestTimeoutDurationMillis() {
131135
return 30_000;
132136
}
137+
138+
@Override public int getUserPropertyCacheLimit() {
139+
return 100;
140+
}
141+
142+
@Override public FilterList<Set<String>> getEventFilterList() {
143+
return new FilterList<>(new HashSet<>(), false);
144+
}
145+
146+
@Override public FilterList<Set<String>> getUserPropertyFilterList() {
147+
return new FilterList<>(new HashSet<>(), false);
148+
}
149+
150+
@Override public FilterList<Set<String>> getSegmentationFilterList() {
151+
return new FilterList<>(new HashSet<>(), false);
152+
}
153+
154+
@Override public FilterList<Map<String, Set<String>>> getEventSegmentationFilterList() {
155+
return new FilterList<>(new ConcurrentHashMap<>(), false);
156+
}
157+
158+
@Override public Set<String> getJourneyTriggerEvents() {
159+
return Collections.emptySet();
160+
}
133161
};
134162

135163
Countly.sharedInstance().setLoggingEnabled(true);
@@ -161,7 +189,7 @@ public void setUp() {
161189
}
162190
};
163191

164-
connectionProcessor = new ConnectionProcessor("http://server", mockStore, mockDeviceId, configurationProviderFake, rip, null, null, moduleLog, healthTrackerMock, Mockito.mock(Runnable.class));
192+
connectionProcessor = new ConnectionProcessor("http://server", mockStore, mockDeviceId, configurationProviderFake, rip, null, null, moduleLog, healthTrackerMock, Mockito.mock(Runnable.class), new ConcurrentHashMap<>());
165193
testDeviceId = "123";
166194
}
167195

@@ -170,7 +198,7 @@ public void testConstructorAndGetters() {
170198
final String serverURL = "https://secureserver";
171199
final CountlyStore mockStore = mock(CountlyStore.class);
172200
final DeviceIdProvider mockDeviceId = mock(DeviceIdProvider.class);
173-
final ConnectionProcessor connectionProcessor1 = new ConnectionProcessor(serverURL, mockStore, mockDeviceId, configurationProviderFake, rip, null, null, moduleLog, healthTrackerMock, Mockito.mock(Runnable.class));
201+
final ConnectionProcessor connectionProcessor1 = new ConnectionProcessor(serverURL, mockStore, mockDeviceId, configurationProviderFake, rip, null, null, moduleLog, healthTrackerMock, Mockito.mock(Runnable.class), new ConcurrentHashMap<>());
174202
assertEquals(serverURL, connectionProcessor1.getServerURL());
175203
assertSame(mockStore, connectionProcessor1.getCountlyStore());
176204
}
@@ -237,7 +265,7 @@ public void urlConnectionCustomHeaderValues() throws IOException {
237265
customValues.put("5", "");
238266
customValues.put("6", null);
239267

240-
ConnectionProcessor connectionProcessor = new ConnectionProcessor("http://server", mockStore, mockDeviceId, configurationProviderFake, rip, null, customValues, moduleLog, healthTrackerMock, Mockito.mock(Runnable.class));
268+
ConnectionProcessor connectionProcessor = new ConnectionProcessor("http://server", mockStore, mockDeviceId, configurationProviderFake, rip, null, customValues, moduleLog, healthTrackerMock, Mockito.mock(Runnable.class), new ConcurrentHashMap<>());
241269
final URLConnection urlConnection = connectionProcessor.urlConnectionForServerRequest("eventData", null);
242270

243271
assertEquals("bb", urlConnection.getRequestProperty("aa"));

0 commit comments

Comments
 (0)