Skip to content

Commit ce6fb5c

Browse files
committed
Fixed notification cancel issue
Fixed AssemblyMetadata IsTrimmable is set to True now UsesPermission must be set at application level
1 parent d8b6f4b commit ce6fb5c

File tree

8 files changed

+50
-20
lines changed

8 files changed

+50
-20
lines changed

Sample/Direct Maui/LocalNotification.Sample/MainPage.xaml

+5
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
HorizontalOptions="Center"
3939
Text="Clear Text"
4040
VerticalOptions="Center" />
41+
<Button
42+
Clicked="ButtonCancel_Clicked"
43+
HorizontalOptions="Center"
44+
Text="Cancel Local Notification"
45+
VerticalOptions="Center" />
4146

4247
<!-- Place new controls here -->
4348
<StackLayout VerticalOptions="CenterAndExpand">

Sample/Direct Maui/LocalNotification.Sample/MainPage.xaml.cs

+9-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public MainPage(INotificationService notificationService)
2424
NotifyDatePicker.MinimumDate = DateTime.Today;
2525
NotifyTimePicker.Time = DateTime.Now.TimeOfDay.Add(TimeSpan.FromSeconds(10));
2626

27-
//ScheduleNotificationGroup();
28-
//ScheduleNotification("first", 10);
27+
ScheduleNotificationGroup();
28+
ScheduleNotification("first", 10);
2929
//ScheduleNotification("second", 20);
3030

3131
_cacheFilePath = FileSystem.Current.CacheDirectory + $"/testFile.txt";
@@ -75,6 +75,11 @@ private Task<NotificationEventReceivingArgs> OnNotificationReceiving(Notificatio
7575
});
7676
}
7777

78+
private void ButtonCancel_Clicked(object sender, EventArgs e)
79+
{
80+
_notificationService.CancelAll();
81+
}
82+
7883
private async void Button_Clicked(object sender, EventArgs e)
7984
{
8085
var imageStream = GetType().Assembly.GetManifestResourceStream("LocalNotification.Sample.Resources.appicon.png");
@@ -280,6 +285,8 @@ private void ScheduleNotification(string title, double seconds)
280285
Schedule =
281286
{
282287
NotifyTime = DateTime.Now.AddSeconds(seconds),
288+
RepeatType = NotificationRepeat.TimeInterval,
289+
NotifyRepeatInterval = TimeSpan.FromSeconds(10),
283290
}
284291
};
285292
_notificationService.Show(notification);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//Permissions for android
2+
3+
using Android;
4+
using Android.App;
5+
6+
[assembly: UsesPermission(Manifest.Permission.WakeLock)]
7+
[assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
8+
[assembly: UsesPermission(Manifest.Permission.Vibrate)]
9+
10+
[assembly: UsesPermission(Manifest.Permission.ScheduleExactAlarm)]
11+
[assembly: UsesPermission(Manifest.Permission.PostNotifications)]

Source/Plugin.LocalNotification/Platforms/Android/ManifestInfo.cs

+9-9
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@
66
using Microsoft.Maui.Controls.PlatformConfiguration;
77
#endif
88

9-
[assembly: UsesPermission(Manifest.Permission.WakeLock)]
10-
[assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
11-
[assembly: UsesPermission(Manifest.Permission.Vibrate)]
9+
//[assembly: UsesPermission(Manifest.Permission.WakeLock)]
10+
//[assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
11+
//[assembly: UsesPermission(Manifest.Permission.Vibrate)]
1212

1313
#if ANDROID
14-
[assembly: UsesPermission(Manifest.Permission.ScheduleExactAlarm)]
15-
[assembly: System.Reflection.AssemblyMetadata("IsTrimmable", "False")]
14+
//[assembly: UsesPermission(Manifest.Permission.ScheduleExactAlarm)]
15+
[assembly: System.Reflection.AssemblyMetadata("IsTrimmable", "True")]
1616

1717
#if NET7_0_OR_GREATER
18-
[assembly: UsesPermission(Manifest.Permission.PostNotifications)]
18+
//[assembly: UsesPermission(Manifest.Permission.PostNotifications)]
1919
#else
20-
[assembly: UsesPermission("android.permission.POST_NOTIFICATIONS")]
20+
//[assembly: UsesPermission("android.permission.POST_NOTIFICATIONS")]
2121
#endif
2222

2323
#elif MONOANDROID
24-
[assembly: UsesPermission("android.permission.SCHEDULE_EXACT_ALARM")]
25-
[assembly: UsesPermission("android.permission.POST_NOTIFICATIONS")]
24+
//[assembly: UsesPermission("android.permission.SCHEDULE_EXACT_ALARM")]
25+
//[assembly: UsesPermission("android.permission.POST_NOTIFICATIONS")]
2626
[assembly: LinkerSafe]
2727
#endif
2828

Source/Plugin.LocalNotification/Platforms/Android/NotificationServiceImpl.cs

+10-7
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ await MyGeofencingClient
304304
/// <returns></returns>
305305
protected virtual PendingIntent CreateGeofenceIntent(int notificationId, string serializedRequest)
306306
{
307-
var pendingIntent = CreateActionIntent(serializedRequest, new NotificationAction(notificationId)
307+
var pendingIntent = CreateActionIntent(notificationId, serializedRequest, new NotificationAction(0)
308308
{
309309
Android =
310310
{
@@ -367,7 +367,7 @@ internal virtual bool ShowLater(NotificationRequest request)
367367
/// <returns></returns>
368368
protected virtual PendingIntent CreateAlarmIntent(int notificationId, string serializedRequest)
369369
{
370-
var pendingIntent = CreateActionIntent(serializedRequest, new NotificationAction(notificationId)
370+
var pendingIntent = CreateActionIntent(notificationId, serializedRequest, new NotificationAction(0)
371371
{
372372
Android =
373373
{
@@ -538,7 +538,7 @@ internal virtual async Task<bool> ShowNow(NotificationRequest request)
538538

539539
var serializedRequest = LocalNotificationCenter.GetRequestSerialize(request);
540540

541-
var contentIntent = CreateActionIntent(serializedRequest, new NotificationAction(NotificationActionEventArgs.TapActionId)
541+
var contentIntent = CreateActionIntent(request.NotificationId, serializedRequest, new NotificationAction(NotificationActionEventArgs.TapActionId)
542542
{
543543
Android =
544544
{
@@ -547,7 +547,7 @@ internal virtual async Task<bool> ShowNow(NotificationRequest request)
547547
}
548548
}, typeof(NotificationActionReceiver));
549549

550-
var deleteIntent = CreateActionIntent(serializedRequest, new NotificationAction(NotificationActionEventArgs.DismissedActionId)
550+
var deleteIntent = CreateActionIntent(request.NotificationId, serializedRequest, new NotificationAction(NotificationActionEventArgs.DismissedActionId)
551551
{
552552
Android =
553553
{
@@ -689,7 +689,7 @@ protected virtual async Task<Bitmap> GetNativeImage(NotificationImage notificati
689689
protected virtual NotificationCompat.Action CreateAction(NotificationRequest request, string serializedRequest,
690690
NotificationAction action)
691691
{
692-
var pendingIntent = CreateActionIntent(serializedRequest, action, typeof(NotificationActionReceiver));
692+
var pendingIntent = CreateActionIntent(request.NotificationId, serializedRequest, action, typeof(NotificationActionReceiver));
693693
if (string.IsNullOrWhiteSpace(action.Android.IconName.ResourceName))
694694
{
695695
action.Android.IconName = request.Android.IconSmallName;
@@ -704,11 +704,12 @@ protected virtual NotificationCompat.Action CreateAction(NotificationRequest req
704704
/// <summary>
705705
///
706706
/// </summary>
707+
/// <param name="notificationId"></param>
707708
/// <param name="serializedRequest"></param>
708709
/// <param name="action"></param>
709710
/// <param name="broadcastReceiverType"></param>
710711
/// <returns></returns>
711-
protected virtual PendingIntent CreateActionIntent(string serializedRequest, NotificationAction action, Type broadcastReceiverType)
712+
protected virtual PendingIntent CreateActionIntent(int notificationId, string serializedRequest, NotificationAction action, Type broadcastReceiverType)
712713
{
713714
var notificationIntent = action.Android.LaunchAppWhenTapped
714715
? (Application.Context.PackageManager?.GetLaunchIntentForPackage(Application.Context.PackageName ??
@@ -720,7 +721,9 @@ protected virtual PendingIntent CreateActionIntent(string serializedRequest, Not
720721
.PutExtra(LocalNotificationCenter.ReturnRequestActionId, action.ActionId)
721722
.PutExtra(LocalNotificationCenter.ReturnRequest, serializedRequest);
722723

723-
var requestCode = _random.Next();
724+
//var requestCode = _random.Next();
725+
// Cannot be random, then you cannot cancel it.
726+
var requestCode = notificationId + action.ActionId;
724727

725728
var pendingIntent = action.Android.LaunchAppWhenTapped
726729
? PendingIntent.GetActivity(

Source/Plugin.LocalNotification/Platforms/iOS/ManifestInfo.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
#if XAMARINIOS
44
[assembly: LinkerSafe]
55
#elif IOS
6-
[assembly: System.Reflection.AssemblyMetadata("IsTrimmable", "False")]
6+
[assembly: System.Reflection.AssemblyMetadata("IsTrimmable", "True")]
77
#endif
88

Source/Plugin.LocalNotification/Platforms/iOS/NotificationServiceImpl.cs

+4
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,10 @@ public async Task<bool> Show(NotificationRequest request)
142142
return false;
143143
}
144144
#elif IOS
145+
if (!OperatingSystem.IsIOS())
146+
{
147+
return false;
148+
}
145149
if (!OperatingSystem.IsIOSVersionAtLeast(10))
146150
{
147151
return false;

Source/Plugin.LocalNotification/Plugin.LocalNotification.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<Description>The local notification plugin provides a way to show local notifications from Xamarin and MAUI apps.</Description>
2121
<PackageIcon>icon.png</PackageIcon>
2222
<Copyright>Copyright © Elvin (Tharindu) Thudugala</Copyright>
23-
<Version>10.1.4</Version>
23+
<Version>10.1.5</Version>
2424
<PackageReleaseNotes>Check: https://github.com/thudugala/Plugin.LocalNotification/releases </PackageReleaseNotes>
2525

2626
<PublishRepositoryUrl>true</PublishRepositoryUrl>

0 commit comments

Comments
 (0)