Skip to content

bug: local-notifications (Android): autoCancel: false is ignored when the notification is tapped #10

Description

@begezavr2

Bug Report

Plugin(s)

  • @capacitor/local-notifications 8.2.1 (bug present on main as well)

Capacitor Version

Latest Dependencies:

  @capacitor/cli: 8.4.2
  @capacitor/core: 8.4.2
  @capacitor/android: 8.4.2

Installed Dependencies:

  @capacitor/cli: 8.4.2
  @capacitor/core: 8.4.2
  @capacitor/android: 8.4.2

Platform(s)

  • Android

Current Behavior

Tapping a notification always removes it from the shade, even when it was scheduled with autoCancel: false.

The builder does apply the flag (LocalNotificationManager.buildNotification.setAutoCancel(localNotification.isAutoCancel())), but handleNotificationActionPerformed then calls dismissVisibleNotification(notificationId) unconditionally:

https://github.com/ionic-team/capacitor-plugins/blob/main/local-notifications/android/src/main/java/com/capacitorjs/plugins/localnotifications/LocalNotificationManager.java#L86

That explicit NotificationManager.cancel() runs on every tap, so the autoCancel value never matters on the tap path.

Expected Behavior

With autoCancel: false, tapping the notification opens the app and the notification stays in the shade (standard Android setAutoCancel(false) semantics). This matters for "live status" notifications, e.g. a running-stopwatch readout that should persist until the user stops the timer in the app.

Code Reproduction

import { LocalNotifications } from '@capacitor/local-notifications';

await LocalNotifications.requestPermissions();
await LocalNotifications.schedule({
  notifications: [
    {
      id: 1,
      title: 'Timer',
      body: 'Running',
      autoCancel: false,
    },
  ],
});
// Tap the delivered notification → it is removed from the shade,
// although autoCancel is false.

Other Technical Details

Previously reported in ionic-team/capacitor-plugins#1384 (Capacitor 4), which was closed by the bot for lack of a code reproduction and locked; the code path is unchanged.

Additional Context

Fix PR: ionic-team/capacitor-plugins#2568 — reads autoCancel from the notification payload already carried in the tap intent (NOTIFICATION_OBJ_INTENT_KEY, default true, so existing behavior is preserved for everyone who didn't opt out) and skips the explicit dismissal when the caller set autoCancel: false.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions