Skip to content

Commit d25a3c7

Browse files
runnerrunner
authored andcommitted
Release 4.4.0
1 parent 0decafb commit d25a3c7

File tree

35 files changed

+707
-183
lines changed

35 files changed

+707
-183
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.unity3d.ads.example"
88
minSdkVersion 19
99
targetSdkVersion 30
10-
versionCode = 4300
11-
versionName = "4.3.0"
10+
versionCode = 4400
11+
versionName = "4.4.0"
1212
}
1313

1414
buildTypes {

unity-ads/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ if (project.rootProject.file('local.properties').exists()) {
1010
ext {
1111
GROUP_ID = "com.unity3d.ads"
1212
ARTIFACT_ID = "unity-ads"
13-
VERSION_ID = "4.3.0"
14-
VERSION_CODE = 4300
13+
VERSION_ID = "4.4.0"
14+
VERSION_CODE = 4400
1515
SIGN_AAR = properties.getProperty("SIGN_AAR") ?: false
1616
}
1717

@@ -51,8 +51,8 @@ android {
5151

5252
buildTypes {
5353
release {
54-
minifyEnabled true
55-
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
54+
minifyEnabled false
55+
proguardFiles getDefaultProguardFile('proguard-android.txt')
5656
consumerProguardFiles 'proguard-rules.pro'
5757
}
5858
debug {

unity-ads/proguard-rules.pro

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,17 @@
44
# Keep JavascriptInterface for WebView bridge
55
-keepattributes JavascriptInterface
66

7-
-keepattributes Signature,Exceptions
8-
9-
# Keep the parameter names for our Public APIs
10-
-keepparameternames
11-
12-
-keeppackagenames
13-
14-
# Keep Javascript annotation class name
15-
-keep public class android.webkit.JavascriptInterface
16-
17-
# Keep publicly exposed SDK APIs.
18-
-keep public class com.unity3d.ads.* { public *; }
19-
-keep public class com.unity3d.ads.metadata.* { *; }
20-
-keep public class com.unity3d.services.banners.* { public *; }
21-
22-
# Keep internal libraries from being removed in optimization.
23-
-keep public class com.unity3d.scar.** { public *; }
24-
25-
# Keep webview accessed APIs
26-
-keep public class com.unity3d.services.**.api.** { public *; }
27-
-keep public class com.unity3d.services.**.configuration.** { public *; }
28-
-keep public class com.unity3d.services.core.webview.bridge.WebViewExposed
29-
30-
-keep public class com.unity3d.services.core.webview.WebView
31-
32-
# Don't warn about compile time depencencies
33-
-dontwarn com.google.ar.core.**
34-
-dontwarn com.google.android.gms.ads.**
7+
# Sometimes keepattributes is not enough to keep annotations
8+
-keep class android.webkit.JavascriptInterface {
9+
*;
10+
}
11+
12+
# Keep all classes in Unity Ads package
13+
-keep class com.unity3d.ads.** {
14+
*;
15+
}
16+
17+
# Keep all classes in Unity Services package
18+
-keep class com.unity3d.services.** {
19+
*;
20+
}

unity-ads/src/androidTest/java/com/unity3d/ads/test/InstrumentationTestSuite.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import com.unity3d.ads.test.instrumentation.services.ads.webplayer.WebPlayerViewCacheTest;
1212
import com.unity3d.ads.test.instrumentation.services.ads.webplayer.WebPlayerViewSettingsCacheTest;
1313
import com.unity3d.ads.test.instrumentation.services.banners.BannerViewCacheTests;
14+
import com.unity3d.ads.test.instrumentation.services.core.configuration.ExperimentObjectTest;
15+
import com.unity3d.ads.test.instrumentation.services.core.configuration.ExperimentObjectsTest;
1416
import com.unity3d.ads.test.instrumentation.services.core.configuration.ExperimentsReaderTest;
1517
import com.unity3d.ads.test.instrumentation.services.core.configuration.ExperimentsTest;
1618
import com.unity3d.ads.test.instrumentation.services.core.configuration.InitializationNotificationCenterTest;
@@ -49,6 +51,8 @@
4951
UnityAnalyticsTest.class,
5052
AcquisitionTypeTest.class,
5153
InitializationNotificationCenterTest.class,
54+
ExperimentObjectTest.class,
55+
ExperimentObjectsTest.class,
5256
ExperimentsTest.class,
5357
ExperimentsReaderTest.class,
5458
PrivacyConfigStatusTest.class,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.unity3d.ads.test.instrumentation.services.core.configuration;
2+
3+
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
4+
5+
import com.unity3d.services.core.configuration.ExperimentAppliedRule;
6+
import com.unity3d.services.core.configuration.ExperimentObject;
7+
8+
import org.json.JSONException;
9+
import org.json.JSONObject;
10+
import org.junit.Assert;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
14+
@RunWith(AndroidJUnit4ClassRunner.class)
15+
public class ExperimentObjectTest {
16+
17+
@Test
18+
public void testExperimentObjectWithNull() {
19+
ExperimentObject exp = new ExperimentObject(null);
20+
Assert.assertFalse(exp.getBooleanValue());
21+
Assert.assertEquals(ExperimentAppliedRule.NEXT, exp.getAppliedRule());
22+
}
23+
24+
@Test
25+
public void testExperimentObjectWithInvalid() throws JSONException {
26+
ExperimentObject exp = new ExperimentObject(new JSONObject("{\"something\": false}"));
27+
Assert.assertFalse(exp.getBooleanValue());
28+
Assert.assertEquals(ExperimentAppliedRule.NEXT, exp.getAppliedRule());
29+
}
30+
31+
@Test
32+
public void testExperimentObjectWithValueOnly() throws JSONException {
33+
ExperimentObject exp = new ExperimentObject(new JSONObject("{\"value\": \"true\"}"));
34+
Assert.assertTrue(exp.getBooleanValue());
35+
}
36+
37+
@Test
38+
public void testExperimentObjectWithValueAndAppliedRuleNext() throws JSONException {
39+
ExperimentObject exp = new ExperimentObject(new JSONObject("{\"value\": \"true\", \"applied\": \"next\"}"));
40+
Assert.assertTrue(exp.getBooleanValue());
41+
Assert.assertEquals(ExperimentAppliedRule.NEXT, exp.getAppliedRule());
42+
}
43+
44+
@Test
45+
public void testExperimentObjectWithValueAndAppliedRuleImmediate() throws JSONException {
46+
ExperimentObject exp = new ExperimentObject(new JSONObject("{\"value\": \"true\", \"applied\": \"immediate\"}"));
47+
Assert.assertTrue(exp.getBooleanValue());
48+
Assert.assertEquals(ExperimentAppliedRule.IMMEDIATE, exp.getAppliedRule());
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.unity3d.ads.test.instrumentation.services.core.configuration;
2+
3+
import com.unity3d.services.core.configuration.ExperimentAppliedRule;
4+
import com.unity3d.services.core.configuration.ExperimentObject;
5+
import com.unity3d.services.core.configuration.ExperimentObjects;
6+
import com.unity3d.services.core.configuration.IExperiments;
7+
8+
import org.json.JSONException;
9+
import org.json.JSONObject;
10+
import org.junit.Assert;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.mockito.junit.MockitoJUnitRunner;
14+
15+
@RunWith(MockitoJUnitRunner.class)
16+
public class ExperimentObjectsTest {
17+
18+
@Test
19+
public void testExperimentObjectsNull() {
20+
IExperiments expo = new ExperimentObjects(null);
21+
Assert.assertFalse(expo.isTwoStageInitializationEnabled());
22+
Assert.assertFalse(expo.isNativeTokenEnabled());
23+
}
24+
25+
@Test
26+
public void testExperimentObjectsWithInvalid() throws JSONException {
27+
ExperimentObjects expo = new ExperimentObjects(new JSONObject("{\"something\": false}"));
28+
Assert.assertFalse(expo.isTwoStageInitializationEnabled());
29+
Assert.assertFalse(expo.isNativeTokenEnabled());
30+
}
31+
32+
@Test
33+
public void testExperimentObjects() throws JSONException {
34+
IExperiments expo = new ExperimentObjects(new JSONObject("{\"tsi\": {\"value\": \"true\"}}"));
35+
Assert.assertTrue(expo.isTwoStageInitializationEnabled());
36+
Assert.assertFalse(expo.isNativeTokenEnabled());
37+
}
38+
39+
@Test
40+
public void testExperimentObjectsCurrentSession() throws JSONException {
41+
IExperiments expo = new ExperimentObjects(new JSONObject("{\"tsi\": {\"value\": \"true\", \"applied\": \"next\"},"
42+
+ "\"fff\": {\"value\": \"true\", \"applied\": \"immediate\"}}"));
43+
Assert.assertFalse(expo.getCurrentSessionExperiments().has("tsi"));
44+
Assert.assertTrue(expo.getCurrentSessionExperiments().has("fff"));
45+
}
46+
47+
@Test
48+
public void testExperimentObjectsNextSession() throws JSONException {
49+
IExperiments expo = new ExperimentObjects(new JSONObject("{\"tsi\": {\"value\": \"true\", \"applied\": \"next\"},"
50+
+ "\"fff\": {\"value\": \"true\", \"applied\": \"immediate\"}}"));
51+
Assert.assertTrue(expo.getNextSessionExperiments().has("tsi"));
52+
Assert.assertFalse(expo.getNextSessionExperiments().has("fff"));
53+
}
54+
}

unity-ads/src/androidTest/java/com/unity3d/ads/test/instrumentation/services/core/configuration/ExperimentsReaderTest.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.unity3d.services.core.configuration.Experiments;
44
import com.unity3d.services.core.configuration.ExperimentsReader;
5+
import com.unity3d.services.core.configuration.IExperiments;
56

67
import org.json.JSONException;
78
import org.json.JSONObject;
@@ -37,58 +38,61 @@ public void testExperimentsReaderWithLocalOnly() {
3738

3839
@Test
3940
public void testExperimentsReaderWithRemoteOnly() throws JSONException {
40-
Mockito.when(_remoteExperimentsMock.getExperimentData()).thenReturn(new JSONObject("{\"tsi\":true, \"fff\": true}"));
41+
Mockito.when(_remoteExperimentsMock.getNextSessionExperiments()).thenReturn(new JSONObject("{\"tsi\":true}"));
42+
Mockito.when(_remoteExperimentsMock.getCurrentSessionExperiments()).thenReturn(new JSONObject("{\"fff\":true}"));
4143

4244
ExperimentsReader experimentsReader = new ExperimentsReader();
4345
experimentsReader.updateRemoteExperiments(_remoteExperimentsMock);
4446

45-
Experiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
47+
IExperiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
4648
Assert.assertFalse("Expected TSI flag to be false", resultExperiments.isTwoStageInitializationEnabled());
4749
Assert.assertTrue("Expected FFF flag to be true", resultExperiments.isForwardExperimentsToWebViewEnabled());
4850

4951
}
5052

5153
@Test
5254
public void testExperimentsReaderWithLocalTsiEnabledRemoteTsiDisabled() throws JSONException {
53-
Mockito.when(_localExperimentsMock.getExperimentData()).thenReturn(new JSONObject("{\"tsi\":true}"));
54-
Mockito.when(_remoteExperimentsMock.getExperimentData()).thenReturn(new JSONObject("{\"tsi\":false}"));
55+
Mockito.when(_localExperimentsMock.getNextSessionExperiments()).thenReturn(new JSONObject("{\"tsi\":true}"));
56+
Mockito.when(_remoteExperimentsMock.getNextSessionExperiments()).thenReturn(new JSONObject("{\"tsi\":false}"));
5557

5658
ExperimentsReader experimentsReader = new ExperimentsReader();
5759
experimentsReader.updateLocalExperiments(_localExperimentsMock);
5860
experimentsReader.updateRemoteExperiments(_remoteExperimentsMock);
5961

60-
Experiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
62+
IExperiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
6163
Assert.assertTrue("Expected TSI flag to be true", resultExperiments.isTwoStageInitializationEnabled());
6264
}
6365

6466
@Test
6567
public void testExperimentsReaderWithLocalTsiDisabledRemoteTsiEnabled() throws JSONException {
66-
Mockito.when(_localExperimentsMock.getExperimentData()).thenReturn(new JSONObject("{\"tsi\":false}"));
67-
Mockito.when(_remoteExperimentsMock.getExperimentData()).thenReturn(new JSONObject("{\"tsi\":true}"));
68+
Mockito.when(_localExperimentsMock.getNextSessionExperiments()).thenReturn(new JSONObject("{\"tsi\":false}"));
69+
Mockito.when(_remoteExperimentsMock.getNextSessionExperiments()).thenReturn(new JSONObject("{\"tsi\":true}"));
6870

6971
ExperimentsReader experimentsReader = new ExperimentsReader();
7072
experimentsReader.updateLocalExperiments(_localExperimentsMock);
7173
experimentsReader.updateRemoteExperiments(_remoteExperimentsMock);
7274

73-
Experiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
75+
IExperiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
7476
Assert.assertFalse("Expected TSI flag to be true", resultExperiments.isTwoStageInitializationEnabled());
7577
}
7678

7779
@Test
7880
public void testExperimentsReaderWithLocalTsiEnabledAndRemoteFffEnabled() throws JSONException {
79-
Mockito.when(_localExperimentsMock.getExperimentData()).thenReturn(new JSONObject("{\"tsi\":true, \"fff\":false}"));
80-
Mockito.when(_remoteExperimentsMock.getExperimentData()).thenReturn(new JSONObject("{\"tsi\":true, \"fff\": true}"));
81+
Mockito.when(_localExperimentsMock.getNextSessionExperiments()).thenReturn(new JSONObject("{\"tsi\":true}"));
82+
Mockito.when(_localExperimentsMock.getCurrentSessionExperiments()).thenReturn(new JSONObject("{\"fff\":false}"));
83+
Mockito.when(_remoteExperimentsMock.getNextSessionExperiments()).thenReturn(new JSONObject("{\"tsi\":true}"));
84+
Mockito.when(_remoteExperimentsMock.getCurrentSessionExperiments()).thenReturn(new JSONObject("{\"fff\":true}"));
8185

8286
ExperimentsReader experimentsReader = new ExperimentsReader();
8387
experimentsReader.updateLocalExperiments(_localExperimentsMock);
8488
experimentsReader.updateRemoteExperiments(_remoteExperimentsMock);
8589

86-
Experiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
90+
IExperiments resultExperiments = experimentsReader.getCurrentlyActiveExperiments();
8791
Assert.assertTrue("Expected TSI flag to be true", resultExperiments.isTwoStageInitializationEnabled());
8892
Assert.assertTrue("Expected FFF flag to be true", resultExperiments.isForwardExperimentsToWebViewEnabled());
8993
}
9094

91-
private void validateDefaultExperiments(Experiments experiments) {
95+
private void validateDefaultExperiments(IExperiments experiments) {
9296
Assert.assertFalse(experiments.shouldNativeTokenAwaitPrivacy());
9397
Assert.assertFalse(experiments.isTwoStageInitializationEnabled());
9498
Assert.assertFalse(experiments.isNativeWebViewCacheEnabled());

unity-ads/src/androidTest/java/com/unity3d/ads/test/instrumentation/services/core/configuration/ExperimentsTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,20 @@ public void testExperimentsDefault() {
9393
validateDefaultExperiments(experiments);
9494
}
9595

96+
@Test
97+
public void testExperimentsGetNextSessionExperiments() throws JSONException {
98+
JSONObject experimentJson = new JSONObject("{\"tsi\": true, \"fff\":false}");
99+
Experiments experiments = new Experiments(experimentJson);
100+
Assert.assertTrue(experiments.getNextSessionExperiments().getBoolean("tsi"));
101+
}
102+
103+
@Test
104+
public void testExperimentsGetCurrentSessionExperiments() throws JSONException {
105+
JSONObject experimentJson = new JSONObject("{\"tsi\": true, \"fff\":true}");
106+
Experiments experiments = new Experiments(experimentJson);
107+
Assert.assertTrue(experiments.getCurrentSessionExperiments().getBoolean("fff"));
108+
}
109+
96110
private void validateDefaultExperiments(Experiments experiments) {
97111
Assert.assertFalse(experiments.shouldNativeTokenAwaitPrivacy());
98112
Assert.assertFalse(experiments.isTwoStageInitializationEnabled());

0 commit comments

Comments
 (0)