Skip to content

Commit b6393c9

Browse files
committed
Fix null exception in rescheduling when custom deserialization happens
1 parent 8c5b541 commit b6393c9

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

com.unity.mobile.notifications/Runtime/Android/Plugins/com/unity/androidnotifications/UnityNotificationUtilities.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,9 @@ private static Object deserializeNotification(Context context, byte[] bytes) {
225225
if (notification != null)
226226
return notification;
227227
data.reset();
228-
Notification.Builder builder = deserializeNotificationCustom(in);
228+
Notification.Builder builder = deserializeNotificationCustom(context, in);
229229
if (builder == null) {
230-
builder = deserializedFromOldIntent(bytes);
230+
builder = deserializedFromOldIntent(context, bytes);
231231
}
232232
return builder;
233233
}
@@ -268,7 +268,7 @@ private static Notification deserializeNotificationParcelable(DataInputStream in
268268
return null;
269269
}
270270

271-
private static Notification.Builder deserializeNotificationCustom(DataInputStream in) {
271+
private static Notification.Builder deserializeNotificationCustom(Context context, DataInputStream in) {
272272
try {
273273
if (!readAndCheckMagicNumber(in, UNITY_MAGIC_NUMBER))
274274
return null;
@@ -329,7 +329,7 @@ private static Notification.Builder deserializeNotificationCustom(DataInputStrea
329329
String sortKey = deserializeString(in);
330330
long when = showWhen ? in.readLong() : 0;
331331

332-
Notification.Builder builder = UnityNotificationManager.mUnityNotificationManager.createNotificationBuilder(channelId);
332+
Notification.Builder builder = UnityNotificationManager.createNotificationBuilder(context, channelId);
333333
if (extras != null)
334334
builder.setExtras(extras);
335335
else {
@@ -377,7 +377,7 @@ private static Notification.Builder deserializeNotificationCustom(DataInputStrea
377377
return null;
378378
}
379379

380-
private static Notification.Builder deserializedFromOldIntent(byte[] bytes) {
380+
private static Notification.Builder deserializedFromOldIntent(Context context, byte[] bytes) {
381381
try {
382382
Parcel p = Parcel.obtain();
383383
p.unmarshall(bytes, 0, bytes.length);
@@ -405,7 +405,7 @@ private static Notification.Builder deserializedFromOldIntent(byte[] bytes) {
405405
int groupAlertBehaviour = bundle.getInt("groupAlertBehaviour", -1);
406406
boolean showTimestamp = bundle.getBoolean("showTimestamp", false);
407407

408-
Notification.Builder builder = UnityNotificationManager.mUnityNotificationManager.createNotificationBuilder(channelId);
408+
Notification.Builder builder = UnityNotificationManager.createNotificationBuilder(context, channelId);
409409
builder.getExtras().putInt(KEY_ID, id);
410410
builder.setContentTitle(textTitle);
411411
builder.setContentText(textContent);

com.unity.mobile.notifications/Tests/Runtime/Android/AndroidNotificationSimpleTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,10 @@ AndroidNotificationIntentData SerializeDeserializeNotificationWithFunc(AndroidJa
221221
using (var byteStream = new AndroidJavaObject("java.io.ByteArrayInputStream", serializedBytes))
222222
{
223223
var dataStream = new AndroidJavaObject("java.io.DataInputStream", byteStream);
224+
var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
225+
var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
224226
// don't dispose notification, it is kept in AndroidNotificationIntentData
225-
using (var deserializedNotificationBuilder = utilsClass.CallStatic<AndroidJavaObject>("deserializeNotificationCustom", dataStream))
227+
using (var deserializedNotificationBuilder = utilsClass.CallStatic<AndroidJavaObject>("deserializeNotificationCustom", activity, dataStream))
226228
{
227229
Assert.IsNotNull(deserializedNotificationBuilder);
228230
var deserializedNotification = deserializedNotificationBuilder.Call<AndroidJavaObject>("build");

0 commit comments

Comments
 (0)