Skip to content

Commit 6e169cb

Browse files
authored
Merge pull request #204 from Unity-Technologies/maintain-time-type
Maintain time type when querying
2 parents efb66d1 + 8ba0657 commit 6e169cb

File tree

3 files changed

+63
-12
lines changed

3 files changed

+63
-12
lines changed

com.unity.mobile.notifications/Runtime/iOS/Plugins/UnityNotificationData.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ iOSNotificationData UNNotificationRequestToiOSNotificationData(UNNotificationReq
151151
notificationData.trigger.calendar.hour = (int)date.hour;
152152
notificationData.trigger.calendar.minute = (int)date.minute;
153153
notificationData.trigger.calendar.second = (int)date.second;
154+
notificationData.trigger.calendar.repeats = (int)calendarTrigger.repeats;
154155
}
155156
else if ([request.trigger isKindOfClass: [UNLocationNotificationTrigger class]])
156157
{

com.unity.mobile.notifications/Runtime/iOS/iOSNotification.cs

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,12 @@ public iOSNotificationTrigger Trigger
273273
}
274274
case iOSNotificationTriggerType.Calendar:
275275
{
276-
var trigger = ((iOSNotificationCalendarTrigger)value).ToUtc();
276+
var trigger = ((iOSNotificationCalendarTrigger)value);
277+
if (userInfo == null)
278+
userInfo = new Dictionary<string, string>();
279+
userInfo["OriginalUtc"] = trigger.UtcTime ? "1" : "0";
280+
if (!trigger.UtcTime)
281+
trigger = trigger.ToUtc();
277282
data.trigger.calendar.year = trigger.Year != null ? trigger.Year.Value : -1;
278283
data.trigger.calendar.month = trigger.Month != null ? trigger.Month.Value : -1;
279284
data.trigger.calendar.day = trigger.Day != null ? trigger.Day.Value : -1;
@@ -313,17 +318,22 @@ public iOSNotificationTrigger Trigger
313318
Repeats = data.trigger.timeInterval.repeats != 0,
314319
};
315320
case iOSNotificationTriggerType.Calendar:
316-
return new iOSNotificationCalendarTrigger()
317321
{
318-
Year = (data.trigger.calendar.year > 0) ? (int?)data.trigger.calendar.year : null,
319-
Month = (data.trigger.calendar.month > 0) ? (int?)data.trigger.calendar.month : null,
320-
Day = (data.trigger.calendar.day > 0) ? (int?)data.trigger.calendar.day : null,
321-
Hour = (data.trigger.calendar.hour >= 0) ? (int?)data.trigger.calendar.hour : null,
322-
Minute = (data.trigger.calendar.minute >= 0) ? (int?)data.trigger.calendar.minute : null,
323-
Second = (data.trigger.calendar.second >= 0) ? (int?)data.trigger.calendar.second : null,
324-
UtcTime = true,
325-
Repeats = data.trigger.calendar.repeats != 0
326-
};
322+
var trigger = new iOSNotificationCalendarTrigger()
323+
{
324+
Year = (data.trigger.calendar.year > 0) ? (int?)data.trigger.calendar.year : null,
325+
Month = (data.trigger.calendar.month > 0) ? (int?)data.trigger.calendar.month : null,
326+
Day = (data.trigger.calendar.day > 0) ? (int?)data.trigger.calendar.day : null,
327+
Hour = (data.trigger.calendar.hour >= 0) ? (int?)data.trigger.calendar.hour : null,
328+
Minute = (data.trigger.calendar.minute >= 0) ? (int?)data.trigger.calendar.minute : null,
329+
Second = (data.trigger.calendar.second >= 0) ? (int?)data.trigger.calendar.second : null,
330+
UtcTime = true,
331+
Repeats = data.trigger.calendar.repeats != 0
332+
};
333+
if (userInfo != null && userInfo["OriginalUtc"] == "0")
334+
trigger = trigger.ToLocal();
335+
return trigger;
336+
}
327337
case iOSNotificationTriggerType.Location:
328338
return new iOSNotificationLocationTrigger()
329339
{

com.unity.mobile.notifications/Tests/Runtime/iOS/iOSNotificationTests.cs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ IEnumerator SendNotificationUsingCalendarTrigger_NotificationIsReceived(string t
187187
Assert.AreEqual(1, receivedNotificationCount);
188188
Assert.IsNotNull(lastReceivedNotification);
189189
Assert.AreEqual(text, lastReceivedNotification.Title);
190+
var retTrigger = (iOSNotificationCalendarTrigger)lastReceivedNotification.Trigger;
191+
Assert.AreEqual(useUtc, retTrigger.UtcTime);
190192
}
191193

192194
[UnityTest]
@@ -314,7 +316,7 @@ public void iOSNotificationCalendarTrigger_AssignDateTimeComponents_OnlyChangesN
314316
}
315317

316318
[Test]
317-
public void OSNotificationCalendarTrigger_AssignNonEmptyComponents_Works()
319+
public void iOSNotificationCalendarTrigger_AssignNonEmptyComponents_Works()
318320
{
319321
var dt = new DateTime(2025, 1, 2, 3, 4, 5);
320322

@@ -348,4 +350,42 @@ public void OSNotificationCalendarTrigger_AssignNonEmptyComponents_Works()
348350
Assert.AreEqual(4, trigger.Minute);
349351
Assert.AreEqual(5, trigger.Second);
350352
}
353+
354+
[Test]
355+
public void iOSNotification_CalendarTrigger_ReturnsSameKindDateTime()
356+
{
357+
var trigger1 = new iOSNotificationCalendarTrigger()
358+
{
359+
Hour = 8,
360+
Minute = 30,
361+
UtcTime = false,
362+
};
363+
364+
var trigger2 = new iOSNotificationCalendarTrigger()
365+
{
366+
Hour = 8,
367+
Minute = 30,
368+
UtcTime = false,
369+
};
370+
371+
var notification = new iOSNotification()
372+
{
373+
Title = "text",
374+
Body = "text",
375+
Trigger = trigger1,
376+
};
377+
378+
var retTrigger = (iOSNotificationCalendarTrigger)notification.Trigger;
379+
380+
Assert.AreEqual(trigger1.Hour, retTrigger.Hour);
381+
Assert.AreEqual(trigger1.Minute, retTrigger.Minute);
382+
Assert.AreEqual(trigger1.UtcTime, retTrigger.UtcTime);
383+
384+
notification.Trigger = trigger2;
385+
retTrigger = (iOSNotificationCalendarTrigger)notification.Trigger;
386+
387+
Assert.AreEqual(trigger2.Hour, retTrigger.Hour);
388+
Assert.AreEqual(trigger2.Minute, retTrigger.Minute);
389+
Assert.AreEqual(trigger2.UtcTime, retTrigger.UtcTime);
390+
}
351391
}

0 commit comments

Comments
 (0)