chore(release): bump plugin version to 1.1.4

Align version across package.json, iOS podspec, Android/TS sources,
README, and CHANGELOG after 1.1.4 fixes (reset alarm, static rollover,
cancelDailyReminder).

Changes:
- package.json: 1.1.3 → 1.1.4
- ios/DailyNotificationPlugin.podspec: 1.1.1 → 1.1.4
- Android: NotifyReceiver, ReactivationManager, FetchWorker,
  DailyNotificationStorageRoom — plugin version strings/comments
- src: web.ts, observability.ts, definitions.ts — @version headers
- README.md: version line
- CHANGELOG.md: add [1.1.4] - 2026-02-16 entry (fixes + cancelDailyReminder)

Files modified:
- package.json
- ios/DailyNotificationPlugin.podspec
- android/.../NotifyReceiver.kt, ReactivationManager.kt, FetchWorker.kt,
  storage/DailyNotificationStorageRoom.java
- src/web.ts, observability.ts, definitions.ts
- README.md, CHANGELOG.md
This commit is contained in:
Jose Olarte III
2026-02-16 17:02:38 +08:00
parent cb3cb5a78e
commit 02a44a3e7b
11 changed files with 25 additions and 14 deletions

View File

@@ -5,6 +5,17 @@ All notable changes to the Daily Notification Plugin will be documented in this
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.1.4] - 2026-02-16
### Fixed
- **Android**: Re-setting a daily notification (edit/save same time) no longer cancels the alarm and then skips re-scheduling. DB idempotence in `NotifyReceiver.scheduleExactNotification()` now runs only when `!skipPendingIntentIdempotence`, so the app reset flow can re-register the alarm.
- **Android**: Static reminder title/body no longer revert to fallback after the first fire. `DailyNotificationWorker.scheduleNextNotification()` now preserves `is_static_reminder` and stable `scheduleId` on rollover so the next occurrence keeps custom text.
### Added
- **Android**: `cancelDailyReminder(call)` in `DailyNotificationPlugin.kt` for parity with iOS. Accepts `reminderId` (or `id`, `reminder_id`, `scheduleId`), cancels the AlarmManager alarm for that id, and performs best-effort DB cleanup (`setEnabled` false, `updateRunTimes` null).
## [1.1.3] - 2026-02-13 ## [1.1.3] - 2026-02-13
### Fixed ### Fixed

View File

@@ -1,7 +1,7 @@
# Daily Notification Plugin # Daily Notification Plugin
**Author**: Matthew Raymer **Author**: Matthew Raymer
**Version**: 1.1.3 (see `package.json` for source of truth) **Version**: 1.1.4 (see `package.json` for source of truth)
**Created**: 2025-09-22 09:22:32 UTC **Created**: 2025-09-22 09:22:32 UTC
**Last Updated**: 2025-12-23 UTC **Last Updated**: 2025-12-23 UTC

View File

@@ -17,7 +17,7 @@ import org.json.JSONObject
* Implements exponential backoff and network constraints * Implements exponential backoff and network constraints
* *
* @author Matthew Raymer * @author Matthew Raymer
* @version 1.1.3 * @version 1.1.4
*/ */
class FetchWorker( class FetchWorker(
appContext: Context, appContext: Context,
@@ -205,7 +205,7 @@ class FetchWorker(
val entity = com.timesafari.dailynotification.entities.NotificationContentEntity( val entity = com.timesafari.dailynotification.entities.NotificationContentEntity(
notificationId, notificationId,
"1.1.3", // Plugin version "1.1.4", // Plugin version
null, // timesafariDid - can be set if available null, // timesafariDid - can be set if available
"daily", "daily",
title, title,
@@ -301,7 +301,7 @@ class FetchWorker(
"timestamp": ${System.currentTimeMillis()}, "timestamp": ${System.currentTimeMillis()},
"content": "Daily notification content", "content": "Daily notification content",
"source": "mock_generator", "source": "mock_generator",
"version": "1.1.3" "version": "1.1.4"
} }
""".trimIndent() """.trimIndent()
return mockData.toByteArray() return mockData.toByteArray()

View File

@@ -21,7 +21,7 @@ import kotlinx.coroutines.runBlocking
* Implements TTL-at-fire logic and notification delivery * Implements TTL-at-fire logic and notification delivery
* *
* @author Matthew Raymer * @author Matthew Raymer
* @version 1.1.3 * @version 1.1.4
*/ */
/** /**
* Source of schedule request - tracks which code path triggered scheduling * Source of schedule request - tracks which code path triggered scheduling
@@ -251,7 +251,7 @@ class NotifyReceiver : BroadcastReceiver() {
val roomStorage = com.timesafari.dailynotification.storage.DailyNotificationStorageRoom(context) val roomStorage = com.timesafari.dailynotification.storage.DailyNotificationStorageRoom(context)
val entity = com.timesafari.dailynotification.entities.NotificationContentEntity( val entity = com.timesafari.dailynotification.entities.NotificationContentEntity(
notificationId, notificationId,
"1.1.3", // Plugin version "1.1.4", // Plugin version
null, // timesafariDid - can be set if available null, // timesafariDid - can be set if available
"daily", "daily",
config.title, config.title,

View File

@@ -247,7 +247,7 @@ class ReactivationManager(private val context: Context) {
// Create new notification content entry for missed alarm // Create new notification content entry for missed alarm
val notification = com.timesafari.dailynotification.entities.NotificationContentEntity( val notification = com.timesafari.dailynotification.entities.NotificationContentEntity(
notificationId, notificationId,
"1.1.3", // Plugin version "1.1.4", // Plugin version
null, // timesafariDid null, // timesafariDid
"daily", // notificationType "daily", // notificationType
"Daily Notification", "Daily Notification",
@@ -1014,7 +1014,7 @@ class ReactivationManager(private val context: Context) {
// Create new notification content entry for missed alarm // Create new notification content entry for missed alarm
val notification = com.timesafari.dailynotification.entities.NotificationContentEntity( val notification = com.timesafari.dailynotification.entities.NotificationContentEntity(
notificationId, notificationId,
"1.1.3", // Plugin version "1.1.4", // Plugin version
null, // timesafariDid null, // timesafariDid
"daily", // notificationType "daily", // notificationType
"Daily Notification", "Daily Notification",

View File

@@ -52,7 +52,7 @@ public class DailyNotificationStorageRoom {
private final ExecutorService executorService; private final ExecutorService executorService;
// Plugin version for migration tracking // Plugin version for migration tracking
private static final String PLUGIN_VERSION = "1.1.3"; private static final String PLUGIN_VERSION = "1.1.4";
/** /**
* Constructor * Constructor

View File

@@ -1,6 +1,6 @@
Pod::Spec.new do |s| Pod::Spec.new do |s|
s.name = 'DailyNotificationPlugin' s.name = 'DailyNotificationPlugin'
s.version = '1.1.1' s.version = '1.1.4'
s.summary = 'Daily Notification Plugin for Capacitor' s.summary = 'Daily Notification Plugin for Capacitor'
s.license = 'MIT' s.license = 'MIT'
s.homepage = 'https://github.com/timesafari/daily-notification-plugin' s.homepage = 'https://github.com/timesafari/daily-notification-plugin'

View File

@@ -1,6 +1,6 @@
{ {
"name": "@timesafari/daily-notification-plugin", "name": "@timesafari/daily-notification-plugin",
"version": "1.1.3", "version": "1.1.4",
"description": "TimeSafari Daily Notification Plugin - Enterprise-grade daily notification functionality with dual scheduling, callback support, TTL-at-fire logic, and comprehensive observability across Mobile (Capacitor) and Desktop (Electron) platforms", "description": "TimeSafari Daily Notification Plugin - Enterprise-grade daily notification functionality with dual scheduling, callback support, TTL-at-fire logic, and comprehensive observability across Mobile (Capacitor) and Desktop (Electron) platforms",
"main": "dist/plugin.js", "main": "dist/plugin.js",
"module": "dist/esm/index.js", "module": "dist/esm/index.js",

View File

@@ -5,7 +5,7 @@
* Aligned with Android implementation and test requirements * Aligned with Android implementation and test requirements
* *
* @author Matthew Raymer * @author Matthew Raymer
* @version 1.1.3 (see package.json for source of truth) * @version 1.1.4 (see package.json for source of truth)
*/ */
// Import SPI types from content-fetcher.ts // Import SPI types from content-fetcher.ts

View File

@@ -3,7 +3,7 @@
* Provides structured logging, event codes, and health monitoring * Provides structured logging, event codes, and health monitoring
* *
* @author Matthew Raymer * @author Matthew Raymer
* @version 1.1.3 * @version 1.1.4
*/ */
import { import {

View File

@@ -7,7 +7,7 @@
* This implementation provides clear error messages for all methods. * This implementation provides clear error messages for all methods.
* *
* @author Matthew Raymer * @author Matthew Raymer
* @version 1.1.3 * @version 1.1.4
*/ */
import type { import type {