From 8c4ae22235c82c5dc31814ea1c6a58d761113ad5 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 5 Aug 2019 19:06:36 +0000 Subject: [PATCH 01/11] [android_alarm_manager] Added oneShotAt method to schedule a alarm at a given time --- .../lib/android_alarm_manager.dart | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/packages/android_alarm_manager/lib/android_alarm_manager.dart b/packages/android_alarm_manager/lib/android_alarm_manager.dart index 228112a847c8..8d3b4511b223 100644 --- a/packages/android_alarm_manager/lib/android_alarm_manager.dart +++ b/packages/android_alarm_manager/lib/android_alarm_manager.dart @@ -133,6 +133,67 @@ class AndroidAlarmManager { return (r == null) ? false : r; } + /// Schedules a one-shot timer to run `callback` at `time`. + /// + /// The `callback` will run whether or not the main application is running or + /// in the foreground. It will run in the Isolate owned by the + /// AndroidAlarmManager service. + /// + /// `callback` must be either a top-level function or a static method from a + /// class. + /// + /// The timer is uniquely identified by `id`. Calling this function again + /// again with the same `id` will cancel and replace the existing timer. + /// + /// If `alarmClock` is passed as `true`, the timer will be created with + /// Android's `AlarmManagerCompat.setAlarmClock`. + /// + /// If `allowWhileIdle` is passed as `true`, the timer will be created with + /// Android's `AlarmManagerCompat.setExactAndAllowWhileIdle` or + /// `AlarmManagerCompat.setAndAllowWhileIdle`. + /// + /// If `exact` is passed as `true`, the timer will be created with Android's + /// `AlarmManagerCompat.setExact`. When `exact` is `false` (the default), the + /// timer will be created with `AlarmManager.set`. + /// + /// If `wakeup` is passed as `true`, the device will be woken up when the + /// alarm fires. If `wakeup` is false (the default), the device will not be + /// woken up to service the alarm. + /// + /// If `rescheduleOnReboot` is passed as `true`, the alarm will be persisted + /// across reboots. If `rescheduleOnReboot` is false (the default), the alarm + /// will not be rescheduled after a reboot and will not be executed. + /// + /// Returns a [Future] that resolves to `true` on success and `false` on + /// failure. + static Future oneShotAt( + DateTime time, + int id, + dynamic Function() callback, { + bool alarmClock = false, + bool allowWhileIdle = false, + bool exact = false, + bool wakeup = false, + bool rescheduleOnReboot = false, + }) async { + final int first = time.millisecondsSinceEpoch; + final CallbackHandle handle = PluginUtilities.getCallbackHandle(callback); + if (handle == null) { + return false; + } + final bool r = await _channel.invokeMethod('Alarm.oneShot', [ + id, + alarmClock, + allowWhileIdle, + exact, + wakeup, + first, + rescheduleOnReboot, + handle.toRawHandle(), + ]); + return (r == null) ? false : r; + } + /// Schedules a repeating timer to run `callback` with period `duration`. /// /// The `callback` will run whether or not the main application is running or From 19575a3168b32e44c7fa773bd302996aa152e551 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 5 Aug 2019 19:24:01 +0000 Subject: [PATCH 02/11] Update pubspec.yaml --- packages/android_alarm_manager/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/android_alarm_manager/pubspec.yaml b/packages/android_alarm_manager/pubspec.yaml index 90907d9908a0..3413b9a88fe2 100644 --- a/packages/android_alarm_manager/pubspec.yaml +++ b/packages/android_alarm_manager/pubspec.yaml @@ -1,7 +1,7 @@ name: android_alarm_manager description: Flutter plugin for accessing the Android AlarmManager service, and running Dart code in the background when alarms fire. -version: 0.4.2 +version: 0.4.2+1 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/android_alarm_manager From 880f68875ec9809d8a05c6f95b6ca9835b0571cf Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 5 Aug 2019 19:50:23 +0000 Subject: [PATCH 03/11] Update CHANGELOG.md --- packages/android_alarm_manager/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/android_alarm_manager/CHANGELOG.md b/packages/android_alarm_manager/CHANGELOG.md index af2d8b7cf53e..b2cc63b76ce6 100644 --- a/packages/android_alarm_manager/CHANGELOG.md +++ b/packages/android_alarm_manager/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.2+1 + +* Added oneShotAt method to run `callback` at given DateTime `time`. + ## 0.4.2 * Added support for setting alarms which work when the phone is in doze mode. From 86481a441d6f63e23f1f2f3850a5d4d1666efe3c Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 5 Aug 2019 19:53:55 +0000 Subject: [PATCH 04/11] Update CHANGELOG.md --- packages/android_alarm_manager/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/android_alarm_manager/CHANGELOG.md b/packages/android_alarm_manager/CHANGELOG.md index b2cc63b76ce6..2d148c24e81e 100644 --- a/packages/android_alarm_manager/CHANGELOG.md +++ b/packages/android_alarm_manager/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.4.2+1 -* Added oneShotAt method to run `callback` at given DateTime `time`. +* Added oneShotAt method to run `callback` at a given DateTime `time`. ## 0.4.2 From 6f3c66aa1e149d98320cce971ddddc6599f8c69e Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Tue, 6 Aug 2019 05:13:40 +0000 Subject: [PATCH 05/11] Update CHANGELOG.md --- packages/android_alarm_manager/CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/android_alarm_manager/CHANGELOG.md b/packages/android_alarm_manager/CHANGELOG.md index 2d148c24e81e..f7537a5b62f5 100644 --- a/packages/android_alarm_manager/CHANGELOG.md +++ b/packages/android_alarm_manager/CHANGELOG.md @@ -1,6 +1,6 @@ -## 0.4.2+1 +## 0.4.3 -* Added oneShotAt method to run `callback` at a given DateTime `time`. +* Added `oneShotAt` method to run `callback` at a given DateTime `time`. ## 0.4.2 From 153f988047e8d9957f5670bf8e2c0680f19f7e31 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Tue, 6 Aug 2019 05:18:32 +0000 Subject: [PATCH 06/11] Update pubspec.yaml --- packages/android_alarm_manager/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/android_alarm_manager/pubspec.yaml b/packages/android_alarm_manager/pubspec.yaml index 3413b9a88fe2..b164970fcc97 100644 --- a/packages/android_alarm_manager/pubspec.yaml +++ b/packages/android_alarm_manager/pubspec.yaml @@ -1,7 +1,7 @@ name: android_alarm_manager description: Flutter plugin for accessing the Android AlarmManager service, and running Dart code in the background when alarms fire. -version: 0.4.2+1 +version: 0.4.3 author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/android_alarm_manager From bd5edbb0724c9a0d4d42025ba84095dcb1a8f3e5 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Tue, 6 Aug 2019 05:45:27 +0000 Subject: [PATCH 07/11] Changed `first` to `startMillis` in `oneShotAt` --- packages/android_alarm_manager/lib/android_alarm_manager.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/android_alarm_manager/lib/android_alarm_manager.dart b/packages/android_alarm_manager/lib/android_alarm_manager.dart index 8d3b4511b223..3530cd0c6b37 100644 --- a/packages/android_alarm_manager/lib/android_alarm_manager.dart +++ b/packages/android_alarm_manager/lib/android_alarm_manager.dart @@ -176,7 +176,7 @@ class AndroidAlarmManager { bool wakeup = false, bool rescheduleOnReboot = false, }) async { - final int first = time.millisecondsSinceEpoch; + final int startMillis = time.millisecondsSinceEpoch; final CallbackHandle handle = PluginUtilities.getCallbackHandle(callback); if (handle == null) { return false; @@ -187,7 +187,7 @@ class AndroidAlarmManager { allowWhileIdle, exact, wakeup, - first, + startMillis, rescheduleOnReboot, handle.toRawHandle(), ]); From 4f24ff0d8c1b91474844ddecf611f89fd03b4d31 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 12 Aug 2019 18:13:07 +0000 Subject: [PATCH 08/11] Update AndroidAlarmManagerPlugin.java --- .../androidalarmmanager/AndroidAlarmManagerPlugin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/AndroidAlarmManagerPlugin.java b/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/AndroidAlarmManagerPlugin.java index 6a7239314caa..5cc77413928e 100644 --- a/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/AndroidAlarmManagerPlugin.java +++ b/packages/android_alarm_manager/android/src/main/java/io/flutter/plugins/androidalarmmanager/AndroidAlarmManagerPlugin.java @@ -50,7 +50,7 @@ public static void registerWith(Registrar registrar) { // alarmManagerPluginChannel is the channel responsible for receiving the following messages // from the main Flutter app: // - "AlarmService.start" - // - "Alarm.oneShot" + // - "Alarm.oneShotAt" // - "Alarm.periodic" // - "Alarm.cancel" final MethodChannel alarmManagerPluginChannel = @@ -125,7 +125,7 @@ public void onMethodCall(MethodCall call, Result result) { PeriodicRequest periodicRequest = PeriodicRequest.fromJson((JSONArray) arguments); AlarmService.setPeriodic(mContext, periodicRequest); result.success(true); - } else if (method.equals("Alarm.oneShot")) { + } else if (method.equals("Alarm.oneShotAt")) { // This message indicates that the Flutter app would like to schedule a one-time // task. OneShotRequest oneShotRequest = OneShotRequest.fromJson((JSONArray) arguments); From bdf63740e6d19b49cf474fe5e0ceadb111b0dc86 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 12 Aug 2019 18:46:08 +0000 Subject: [PATCH 09/11] changed `oneShot` to use `oneShotAt` --- .../lib/android_alarm_manager.dart | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/packages/android_alarm_manager/lib/android_alarm_manager.dart b/packages/android_alarm_manager/lib/android_alarm_manager.dart index 3530cd0c6b37..55f3cbd1da2f 100644 --- a/packages/android_alarm_manager/lib/android_alarm_manager.dart +++ b/packages/android_alarm_manager/lib/android_alarm_manager.dart @@ -113,24 +113,19 @@ class AndroidAlarmManager { bool exact = false, bool wakeup = false, bool rescheduleOnReboot = false, - }) async { - final int now = DateTime.now().millisecondsSinceEpoch; - final int first = now + delay.inMilliseconds; - final CallbackHandle handle = PluginUtilities.getCallbackHandle(callback); - if (handle == null) { - return false; - } - final bool r = await _channel.invokeMethod('Alarm.oneShot', [ + }) { + final DateTime now = DateTime.now(); + final DateTime time = now.add(delay); + return oneShotAt( + time, id, - alarmClock, - allowWhileIdle, - exact, - wakeup, - first, - rescheduleOnReboot, - handle.toRawHandle(), - ]); - return (r == null) ? false : r; + callback, + alarmClock: alarmClock, + allowWhileIdle: allowWhileIdle, + exact: exact, + wakeup: wakeup, + rescheduleOnReboot: rescheduleOnReboot, + ); } /// Schedules a one-shot timer to run `callback` at `time`. From 60d6cf1258e566c7c58a0e031a098ba36de862a1 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 12 Aug 2019 19:09:48 +0000 Subject: [PATCH 10/11] Update android_alarm_manager.dart --- .../lib/android_alarm_manager.dart | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/android_alarm_manager/lib/android_alarm_manager.dart b/packages/android_alarm_manager/lib/android_alarm_manager.dart index 55f3cbd1da2f..93e818ca1818 100644 --- a/packages/android_alarm_manager/lib/android_alarm_manager.dart +++ b/packages/android_alarm_manager/lib/android_alarm_manager.dart @@ -113,20 +113,17 @@ class AndroidAlarmManager { bool exact = false, bool wakeup = false, bool rescheduleOnReboot = false, - }) { - final DateTime now = DateTime.now(); - final DateTime time = now.add(delay); - return oneShotAt( - time, - id, - callback, - alarmClock: alarmClock, - allowWhileIdle: allowWhileIdle, - exact: exact, - wakeup: wakeup, - rescheduleOnReboot: rescheduleOnReboot, - ); - } + }) => + oneShotAt( + DateTime.now().add(delay), + id, + callback, + alarmClock: alarmClock, + allowWhileIdle: allowWhileIdle, + exact: exact, + wakeup: wakeup, + rescheduleOnReboot: rescheduleOnReboot, + ); /// Schedules a one-shot timer to run `callback` at `time`. /// @@ -176,7 +173,7 @@ class AndroidAlarmManager { if (handle == null) { return false; } - final bool r = await _channel.invokeMethod('Alarm.oneShot', [ + final bool r = await _channel.invokeMethod('Alarm.oneShotAt', [ id, alarmClock, allowWhileIdle, From d5ed993330bfcb69fd5c3ce9123a652002da8785 Mon Sep 17 00:00:00 2001 From: Afsar Pasha <25363752+Afsar-Pasha@users.noreply.github.com> Date: Mon, 12 Aug 2019 19:22:07 +0000 Subject: [PATCH 11/11] Update android_alarm_manager.dart --- packages/android_alarm_manager/lib/android_alarm_manager.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/android_alarm_manager/lib/android_alarm_manager.dart b/packages/android_alarm_manager/lib/android_alarm_manager.dart index 93e818ca1818..05ead109c36f 100644 --- a/packages/android_alarm_manager/lib/android_alarm_manager.dart +++ b/packages/android_alarm_manager/lib/android_alarm_manager.dart @@ -173,7 +173,8 @@ class AndroidAlarmManager { if (handle == null) { return false; } - final bool r = await _channel.invokeMethod('Alarm.oneShotAt', [ + final bool r = + await _channel.invokeMethod('Alarm.oneShotAt', [ id, alarmClock, allowWhileIdle,