Skip to content

Commit 7c9353a

Browse files
committed
release: SDK 1.17.2
1 parent af04acf commit 7c9353a

20 files changed

+9035
-51
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ The Batch Android SDK allows you to build meaningful communication experience in
77
Our [📕 setup documentation](https://doc.batch.com/ios/prerequisites) details the steps to take for an easy and successful integration.
88

99
# Prerequisites
10-
The Batch iOS SDK requires Android Studio 4 and Android API 14.
10+
The Batch Android SDK requires Android Studio 4 and Android API 15.
1111

1212
# Documentation
1313
- [Setup guide](https://doc.batch.com/android/prerequisites): start your implementation here!

Sources/.idea/compiler.xml

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/.idea/runConfigurations.xml

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ buildscript {
1010
jcenter()
1111
}
1212
dependencies {
13-
classpath 'com.android.tools.build:gradle:4.1.1'
13+
classpath 'com.android.tools.build:gradle:4.2.0'
1414
classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.21.1"
1515
// NOTE: Do not place your application dependencies here; they belong
1616
// in the individual module build.gradle files
5.84 KB
Binary file not shown.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
#Tue Jun 02 12:12:04 CEST 2020
21
distributionBase=GRADLE_USER_HOME
32
distributionPath=wrapper/dists
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip

Sources/gradlew

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,20 @@
1-
#!/usr/bin/env bash
1+
#!/usr/bin/env sh
2+
3+
#
4+
# Copyright 2015 the original author or authors.
5+
#
6+
# Licensed under the Apache License, Version 2.0 (the "License");
7+
# you may not use this file except in compliance with the License.
8+
# You may obtain a copy of the License at
9+
#
10+
# https://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
#
218

319
##############################################################################
420
##
@@ -28,16 +44,16 @@ APP_NAME="Gradle"
2844
APP_BASE_NAME=`basename "$0"`
2945

3046
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31-
DEFAULT_JVM_OPTS=""
47+
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
3248

3349
# Use the maximum available, or set MAX_FD != -1 to use that value.
3450
MAX_FD="maximum"
3551

36-
warn ( ) {
52+
warn () {
3753
echo "$*"
3854
}
3955

40-
die ( ) {
56+
die () {
4157
echo
4258
echo "$*"
4359
echo
@@ -66,6 +82,7 @@ esac
6682

6783
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
6884

85+
6986
# Determine the Java command to use to start the JVM.
7087
if [ -n "$JAVA_HOME" ] ; then
7188
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -109,10 +126,11 @@ if $darwin; then
109126
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110127
fi
111128

112-
# For Cygwin, switch paths to Windows format before running java
113-
if $cygwin ; then
129+
# For Cygwin or MSYS, switch paths to Windows format before running java
130+
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
114131
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115132
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133+
116134
JAVACMD=`cygpath --unix "$JAVACMD"`
117135

118136
# We build the pattern for arguments to be converted via cygpath
@@ -138,32 +156,30 @@ if $cygwin ; then
138156
else
139157
eval `echo args$i`="\"$arg\""
140158
fi
141-
i=$((i+1))
159+
i=`expr $i + 1`
142160
done
143161
case $i in
144-
(0) set -- ;;
145-
(1) set -- "$args0" ;;
146-
(2) set -- "$args0" "$args1" ;;
147-
(3) set -- "$args0" "$args1" "$args2" ;;
148-
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149-
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150-
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151-
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152-
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153-
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
162+
0) set -- ;;
163+
1) set -- "$args0" ;;
164+
2) set -- "$args0" "$args1" ;;
165+
3) set -- "$args0" "$args1" "$args2" ;;
166+
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167+
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168+
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169+
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170+
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171+
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154172
esac
155173
fi
156174

157-
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
158-
function splitJvmOpts() {
159-
JVM_OPTS=("$@")
175+
# Escape application args
176+
save () {
177+
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
178+
echo " "
160179
}
161-
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
162-
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
180+
APP_ARGS=`save "$@"`
163181

164-
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
165-
if [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]]; then
166-
cd "$(dirname "$0")"
167-
fi
182+
# Collect all arguments for the java command, following the shell quoting and substitution rules
183+
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
168184

169-
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
185+
exec "$JAVACMD" "$@"

Sources/gradlew.bat

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
@rem
2+
@rem Copyright 2015 the original author or authors.
3+
@rem
4+
@rem Licensed under the Apache License, Version 2.0 (the "License");
5+
@rem you may not use this file except in compliance with the License.
6+
@rem You may obtain a copy of the License at
7+
@rem
8+
@rem https://www.apache.org/licenses/LICENSE-2.0
9+
@rem
10+
@rem Unless required by applicable law or agreed to in writing, software
11+
@rem distributed under the License is distributed on an "AS IS" BASIS,
12+
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
@rem See the License for the specific language governing permissions and
14+
@rem limitations under the License.
15+
@rem
16+
117
@if "%DEBUG%" == "" @echo off
218
@rem ##########################################################################
319
@rem
@@ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=.
1329
set APP_BASE_NAME=%~n0
1430
set APP_HOME=%DIRNAME%
1531

32+
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
33+
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34+
1635
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17-
set DEFAULT_JVM_OPTS=
36+
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
1837

1938
@rem Find java.exe
2039
if defined JAVA_HOME goto findJavaFromJavaHome
@@ -65,6 +84,7 @@ set CMD_LINE_ARGS=%*
6584

6685
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
6786

87+
6888
@rem Execute Gradle
6989
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
7090

Sources/sdk/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ android {
2626
minSdkVersion 15
2727
targetSdkVersion 30
2828
versionCode 1
29-
versionName "1.17.1"
29+
versionName "1.17.2"
3030
buildConfigField "String", SDK_VERSION, "\"$versionName\""
31-
buildConfigField "Integer", API_LEVEL, '35'
31+
buildConfigField "Integer", API_LEVEL, '36'
3232
buildConfigField "Integer", MESSAGING_API_LEVEL, '10'
3333
buildConfigField "String", WS_DOMAIN, '"ws.batch.com"'
3434

Sources/sdk/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<uses-permission android:name="${applicationId}.batch.permission.INTERNAL_BROADCAST" />
1515

1616
<queries>
17+
<package android:name="com.android.vending" />
1718
<package android:name="com.huawei.appmarket" />
1819
</queries>
1920

Sources/sdk/src/main/java/com/batch/android/BatchInboxFetcher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void markAsDeleted(BatchInboxNotificationContent notification)
105105
/**
106106
* Returns a copy of all notifications that have been fetched until now, ordered by reverse chronological order (meaning that the first message is the newest one, and the last one the oldest).
107107
* Note that this array will be empty until you call {@link #fetchNewNotifications(OnNewNotificationsFetchedListener)}, and will only grow on subsequent fetches.
108-
* On this beta, this operation is quite extensive: you should cache this result until you call fetch*.
108+
* This operation is quite extensive: you should cache this result until you call fetch*.
109109
*/
110110
@NonNull
111111
public List<BatchInboxNotificationContent> getFetchedNotifications()

Sources/sdk/src/main/java/com/batch/android/BatchUserDataEditor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public BatchUserDataEditor setRegion(final @Nullable String region)
9090

9191
/**
9292
* Set the user identifier.<br>
93-
* Be careful: you should make sure the identifier uniquely identifies a user. When pushing an identifier, all installations with that identifier will get the Push, which can cause some privacy issues if done wrong. Also affects Unlock offer delivery and restore.
93+
* Be careful: you should make sure the identifier uniquely identifies a user. When pushing an identifier, all installations with that identifier will get the Push, which can cause some privacy issues if done wrong.
9494
*
9595
* @param identifier Identifier string
9696
* @return This object instance, for method chaining

Sources/sdk/src/main/java/com/batch/android/actions/UserEventBuiltinActionRunnable.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,14 @@ public class UserEventBuiltinActionRunnable implements UserActionRunnable
2828

2929
private Date parseDate(String date)
3030
{
31-
DateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US);
31+
DateFormat isoFormat = null;
32+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
33+
isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US);
34+
} else {
35+
isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
36+
// Java 6 doesn't parse dates with timezones well
37+
date = date.replaceAll("Z$", "+0000");
38+
}
3239
try {
3340
return isoFormat.parse(date);
3441
} catch (ParseException e) {

Sources/sdk/src/main/java/com/batch/android/query/response/LocalCampaignsResponse.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import androidx.annotation.NonNull;
77
import androidx.annotation.Nullable;
8+
import androidx.annotation.VisibleForTesting;
89

910
import com.batch.android.core.Logger;
1011
import com.batch.android.date.TimezoneAwareDate;
@@ -27,6 +28,7 @@
2728
import java.util.List;
2829
import java.util.Locale;
2930
import java.util.Set;
31+
import java.util.UUID;
3032

3133
/**
3234
* Response for {@link LocalCampaignsQuery}
@@ -125,12 +127,11 @@ private void parseResponse(JSONObject response) throws JSONException
125127
//TODO: This should manually be done, not on class instaniation!
126128
if (autosave) {
127129
JSONObject responseCopy = new JSONObject();
130+
//TODO: Temporary fix for ch24046
131+
responseCopy.put("id", response.reallyOptString("id", "dummy_id"));
128132
responseCopy.put("campaigns", new JSONArray(persistCampaigns));
129133

130-
// Save response
131-
CampaignManagerProvider.get().saveCampaignsResponseAsync(
132-
getContext(),
133-
responseCopy);
134+
saveResponse(responseCopy);
134135
}
135136
}
136137

@@ -291,4 +292,11 @@ private LocalCampaign.Trigger parseTrigger(JSONObject json) throws JSONException
291292
throw new JSONException("Unknown campaign triggers \"" + type + "\"");
292293
}
293294
}
295+
296+
@VisibleForTesting
297+
protected void saveResponse(@NonNull JSONObject response) {
298+
CampaignManagerProvider.get().saveCampaignsResponseAsync(
299+
getContext(),
300+
response);
301+
}
294302
}

Sources/sdk/src/test/java/com/batch/android/actions/UserEventActionTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import androidx.test.filters.MediumTest;
88

99
import com.batch.android.Batch;
10-
import com.batch.android.Config;
1110
import com.batch.android.di.DITestUtils;
1211
import com.batch.android.di.providers.RuntimeManagerProvider;
1312
import com.batch.android.json.JSONException;
@@ -29,9 +28,12 @@
2928
import org.powermock.core.classloader.annotations.PowerMockIgnore;
3029
import org.powermock.core.classloader.annotations.PrepareForTest;
3130
import org.powermock.modules.junit4.rule.PowerMockRule;
31+
import org.robolectric.annotation.Config;
3232
import org.robolectric.res.android.Asset;
3333
import org.robolectric.shadows.ShadowLog;
3434

35+
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
36+
import static android.os.Build.VERSION_CODES.P;
3537
import static org.mockito.ArgumentMatchers.eq;
3638

3739
@RunWith(AndroidJUnit4.class)
@@ -138,6 +140,7 @@ public void testTrackEventWithTagsAction() throws JSONException
138140
}
139141

140142
@Test
143+
@Config(sdk = {JELLY_BEAN_MR2, P})
141144
public void testTrackEventWithAttrAction() throws JSONException
142145
{
143146
ActionModule actionModule = new ActionModule();

0 commit comments

Comments
 (0)