@zulfio/react-native-alarm-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Alarmkit.podspec +35 -0
- package/LICENSE +20 -0
- package/README.md +163 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +129 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/alarmkit/AlarmkitPackage.kt +22 -0
- package/android/src/main/java/com/margelo/nitro/alarmkit/Alarmkit.kt +7 -0
- package/ios/AlarmKit.swift +296 -0
- package/lib/module/AlarmKit.nitro.js +4 -0
- package/lib/module/AlarmKit.nitro.js.map +1 -0
- package/lib/module/index.js +40 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/AlarmKit.nitro.d.ts +24 -0
- package/lib/typescript/src/AlarmKit.nitro.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +11 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +17 -0
- package/nitrogen/generated/android/alarmkit+autolinking.cmake +78 -0
- package/nitrogen/generated/android/alarmkit+autolinking.gradle +27 -0
- package/nitrogen/generated/android/alarmkitOnLoad.cpp +46 -0
- package/nitrogen/generated/android/alarmkitOnLoad.hpp +25 -0
- package/nitrogen/generated/android/c++/JAlarmCountdown.hpp +57 -0
- package/nitrogen/generated/android/c++/JAlarmWeekday.hpp +74 -0
- package/nitrogen/generated/android/c++/JCustomizableAlarmButton.hpp +61 -0
- package/nitrogen/generated/android/c++/JHybridAlarmKitSpec.cpp +180 -0
- package/nitrogen/generated/android/c++/JHybridAlarmKitSpec.hpp +68 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/AlarmCountdown.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/AlarmWeekday.kt +30 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/CustomizableAlarmButton.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/HybridAlarmKitSpec.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/alarmkit/alarmkitOnLoad.kt +35 -0
- package/nitrogen/generated/ios/AlarmKit+autolinking.rb +60 -0
- package/nitrogen/generated/ios/AlarmKit-Swift-Cxx-Bridge.cpp +72 -0
- package/nitrogen/generated/ios/AlarmKit-Swift-Cxx-Bridge.hpp +309 -0
- package/nitrogen/generated/ios/AlarmKit-Swift-Cxx-Umbrella.hpp +56 -0
- package/nitrogen/generated/ios/AlarmKitAutolinking.mm +33 -0
- package/nitrogen/generated/ios/AlarmKitAutolinking.swift +25 -0
- package/nitrogen/generated/ios/c++/HybridAlarmKitSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridAlarmKitSpecSwift.hpp +130 -0
- package/nitrogen/generated/ios/swift/AlarmCountdown.swift +70 -0
- package/nitrogen/generated/ios/swift/AlarmWeekday.swift +60 -0
- package/nitrogen/generated/ios/swift/CustomizableAlarmButton.swift +57 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +52 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridAlarmKitSpec.swift +54 -0
- package/nitrogen/generated/ios/swift/HybridAlarmKitSpec_cxx.swift +271 -0
- package/nitrogen/generated/shared/c++/AlarmCountdown.hpp +73 -0
- package/nitrogen/generated/shared/c++/AlarmWeekday.hpp +98 -0
- package/nitrogen/generated/shared/c++/CustomizableAlarmButton.hpp +77 -0
- package/nitrogen/generated/shared/c++/HybridAlarmKitSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridAlarmKitSpec.hpp +79 -0
- package/package.json +168 -0
- package/src/AlarmKit.nitro.ts +48 -0
- package/src/index.tsx +96 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import AlarmKit
|
|
2
|
+
import SwiftUI
|
|
3
|
+
import NitroModules
|
|
4
|
+
|
|
5
|
+
class AlarmKit: HybridAlarmKitSpec {
|
|
6
|
+
@available(iOS 15.1, *)
|
|
7
|
+
public func requestAlarmPermission() throws -> NitroModules.Promise<Bool> {
|
|
8
|
+
return NitroModules.Promise.async {
|
|
9
|
+
if #available(iOS 26.0, *) {
|
|
10
|
+
let manager = AlarmManager.shared
|
|
11
|
+
let state: AlarmManager.AuthorizationState
|
|
12
|
+
do {
|
|
13
|
+
state = try await manager.requestAuthorization()
|
|
14
|
+
} catch {
|
|
15
|
+
print("Error in requestAuthorization: \(error)")
|
|
16
|
+
throw error
|
|
17
|
+
}
|
|
18
|
+
return state == .authorized
|
|
19
|
+
} else {
|
|
20
|
+
throw NSError(
|
|
21
|
+
domain: "AlarmKitError",
|
|
22
|
+
code: 1,
|
|
23
|
+
userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@available(iOS 15.1, *)
|
|
30
|
+
public func scheduleFixedAlarm(title: String, stopBtn: CustomizableAlarmButton, tintColor: String, secondaryBtn: CustomizableAlarmButton?, timestamp: Double?, countdown: AlarmCountdown?) throws -> NitroModules.Promise<String> {
|
|
31
|
+
return NitroModules.Promise.async {
|
|
32
|
+
if #available(iOS 26.0, *) {
|
|
33
|
+
let manager = AlarmManager.shared
|
|
34
|
+
|
|
35
|
+
let stopButton = AlarmButton(
|
|
36
|
+
text: LocalizedStringResource(stringLiteral: stopBtn.text),
|
|
37
|
+
textColor: Color(StringToColor(hex: stopBtn.textColor)),
|
|
38
|
+
systemImageName: stopBtn.icon
|
|
39
|
+
)
|
|
40
|
+
let alertPresentationAlert: AlarmPresentation.Alert
|
|
41
|
+
|
|
42
|
+
if let btn = secondaryBtn {
|
|
43
|
+
let secondaryButton = AlarmButton(
|
|
44
|
+
text: LocalizedStringResource(stringLiteral: btn.text),
|
|
45
|
+
textColor: Color(StringToColor(hex: btn.textColor)),
|
|
46
|
+
systemImageName: btn.icon
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
alertPresentationAlert = AlarmPresentation.Alert(
|
|
50
|
+
title: LocalizedStringResource(stringLiteral: title),
|
|
51
|
+
stopButton: stopButton,
|
|
52
|
+
secondaryButton: secondaryButton,
|
|
53
|
+
secondaryButtonBehavior: .countdown
|
|
54
|
+
)
|
|
55
|
+
} else {
|
|
56
|
+
alertPresentationAlert = AlarmPresentation.Alert(
|
|
57
|
+
title: LocalizedStringResource(stringLiteral: title),
|
|
58
|
+
stopButton: stopButton
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let presentation = AlarmPresentation(alert: alertPresentationAlert)
|
|
63
|
+
let countdown = Alarm.CountdownDuration(preAlert: countdown?.preAlert, postAlert: countdown?.postAlert)
|
|
64
|
+
|
|
65
|
+
nonisolated struct EmptyMetadata: AlarmMetadata {}
|
|
66
|
+
let attributes = AlarmAttributes<EmptyMetadata>(presentation: presentation, tintColor: Color(StringToColor(hex: tintColor)))
|
|
67
|
+
|
|
68
|
+
var schedule: Alarm.Schedule? = nil
|
|
69
|
+
|
|
70
|
+
if let timestamp = timestamp {
|
|
71
|
+
let date = Date(timeIntervalSince1970: timestamp)
|
|
72
|
+
schedule = Alarm.Schedule.fixed(date)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let configuration = AlarmManager.AlarmConfiguration(
|
|
76
|
+
countdownDuration: countdown,
|
|
77
|
+
schedule: schedule,
|
|
78
|
+
attributes: attributes,
|
|
79
|
+
sound: .default
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
let uuid = UUID()
|
|
83
|
+
do {
|
|
84
|
+
_ = try await manager.schedule(id: uuid, configuration: configuration)
|
|
85
|
+
return uuid.uuidString
|
|
86
|
+
} catch {
|
|
87
|
+
throw error
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
print("error")
|
|
91
|
+
throw NSError(
|
|
92
|
+
domain: "AlarmKitError",
|
|
93
|
+
code: 1,
|
|
94
|
+
userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@available(iOS 15.1, *)
|
|
101
|
+
public func scheduleRelativeAlarm(
|
|
102
|
+
title: String,
|
|
103
|
+
stopBtn: CustomizableAlarmButton,
|
|
104
|
+
tintColor: String,
|
|
105
|
+
hour: Double,
|
|
106
|
+
minute: Double,
|
|
107
|
+
repeats: [AlarmWeekday],
|
|
108
|
+
secondaryBtn: CustomizableAlarmButton?,
|
|
109
|
+
countdown: AlarmCountdown?
|
|
110
|
+
) throws -> NitroModules.Promise<String> {
|
|
111
|
+
return NitroModules.Promise.async {
|
|
112
|
+
if #available(iOS 26.0, *) {
|
|
113
|
+
let manager = AlarmManager.shared
|
|
114
|
+
|
|
115
|
+
let stopButton = AlarmButton(
|
|
116
|
+
text: LocalizedStringResource(stringLiteral: stopBtn.text),
|
|
117
|
+
textColor: Color(StringToColor(hex: stopBtn.textColor)),
|
|
118
|
+
systemImageName: stopBtn.icon
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
let alertPresentationAlert: AlarmPresentation.Alert
|
|
122
|
+
|
|
123
|
+
if let btn = secondaryBtn {
|
|
124
|
+
let secondaryButton = AlarmButton(
|
|
125
|
+
text: LocalizedStringResource(stringLiteral: btn.text),
|
|
126
|
+
textColor: Color(StringToColor(hex: btn.textColor)),
|
|
127
|
+
systemImageName: btn.icon
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
alertPresentationAlert = AlarmPresentation.Alert(
|
|
131
|
+
title: LocalizedStringResource(stringLiteral: title),
|
|
132
|
+
stopButton: stopButton,
|
|
133
|
+
secondaryButton: secondaryButton,
|
|
134
|
+
secondaryButtonBehavior: .countdown
|
|
135
|
+
)
|
|
136
|
+
} else {
|
|
137
|
+
alertPresentationAlert = AlarmPresentation.Alert(
|
|
138
|
+
title: LocalizedStringResource(stringLiteral: title),
|
|
139
|
+
stopButton: stopButton
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
let presentation = AlarmPresentation(alert: alertPresentationAlert)
|
|
144
|
+
let countdown = Alarm.CountdownDuration(preAlert: countdown?.preAlert, postAlert: countdown?.postAlert)
|
|
145
|
+
|
|
146
|
+
nonisolated struct EmptyMetadata: AlarmMetadata {}
|
|
147
|
+
let attributes = AlarmAttributes<EmptyMetadata>(presentation: presentation, tintColor: Color(StringToColor(hex: tintColor)))
|
|
148
|
+
|
|
149
|
+
let time = Alarm.Schedule.Relative.Time(hour: Int(hour), minute: Int(minute))
|
|
150
|
+
|
|
151
|
+
let localeWeekdays: [Locale.Weekday] = repeats.map { alarmWeekday in
|
|
152
|
+
switch alarmWeekday {
|
|
153
|
+
case .monday: return .monday
|
|
154
|
+
case .tuesday: return .tuesday
|
|
155
|
+
case .wednesday: return .wednesday
|
|
156
|
+
case .thursday: return .thursday
|
|
157
|
+
case .friday: return .friday
|
|
158
|
+
case .saturday: return .saturday
|
|
159
|
+
case .sunday: return .sunday
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
let recurrence = Alarm.Schedule.Relative.Recurrence.weekly(localeWeekdays)
|
|
163
|
+
let relativeSchedule = Alarm.Schedule.Relative(time: time, repeats: recurrence)
|
|
164
|
+
let schedule = Alarm.Schedule.relative(relativeSchedule)
|
|
165
|
+
|
|
166
|
+
let configuration = AlarmManager.AlarmConfiguration(
|
|
167
|
+
countdownDuration: countdown,
|
|
168
|
+
schedule: schedule,
|
|
169
|
+
attributes: attributes,
|
|
170
|
+
sound: .default
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
let uuid = UUID()
|
|
174
|
+
do {
|
|
175
|
+
_ = try await manager.schedule(id: uuid, configuration: configuration)
|
|
176
|
+
return uuid.uuidString
|
|
177
|
+
} catch {
|
|
178
|
+
throw error
|
|
179
|
+
}
|
|
180
|
+
} else {
|
|
181
|
+
throw NSError(
|
|
182
|
+
domain: "AlarmKitError",
|
|
183
|
+
code: 1,
|
|
184
|
+
userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
|
|
185
|
+
)
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@available(iOS 15.1, *)
|
|
191
|
+
public func cancelAlarm(id: String) throws -> NitroModules.Promise<Bool> {
|
|
192
|
+
return NitroModules.Promise.async {
|
|
193
|
+
if #available(iOS 26.0, *) {
|
|
194
|
+
guard let uuid = UUID(uuidString: id) else {
|
|
195
|
+
throw NSError(
|
|
196
|
+
domain: "AlarmKitError",
|
|
197
|
+
code: 2,
|
|
198
|
+
userInfo: [NSLocalizedDescriptionKey: "Invalid alarm ID: \(id)"]
|
|
199
|
+
)
|
|
200
|
+
}
|
|
201
|
+
do {
|
|
202
|
+
try await AlarmManager.shared.cancel(id: uuid)
|
|
203
|
+
return true
|
|
204
|
+
} catch {
|
|
205
|
+
throw error
|
|
206
|
+
}
|
|
207
|
+
} else {
|
|
208
|
+
throw NSError(
|
|
209
|
+
domain: "AlarmKitError",
|
|
210
|
+
code: 1,
|
|
211
|
+
userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
@available(iOS 15.1, *)
|
|
218
|
+
public func cancelAllAlarms() throws -> NitroModules.Promise<Bool> {
|
|
219
|
+
return NitroModules.Promise.async {
|
|
220
|
+
if #available(iOS 26.0, *) {
|
|
221
|
+
let alarms = await AlarmManager.shared.alarms
|
|
222
|
+
for alarm in alarms {
|
|
223
|
+
try await AlarmManager.shared.cancel(id: alarm.id)
|
|
224
|
+
}
|
|
225
|
+
return true
|
|
226
|
+
} else {
|
|
227
|
+
throw NSError(
|
|
228
|
+
domain: "AlarmKitError",
|
|
229
|
+
code: 1,
|
|
230
|
+
userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
@available(iOS 15.1, *)
|
|
237
|
+
public func getAlarm(id: String) throws -> NitroModules.Promise<String?> {
|
|
238
|
+
return NitroModules.Promise.async {
|
|
239
|
+
if #available(iOS 26.0, *) {
|
|
240
|
+
guard let uuid = UUID(uuidString: id) else { return nil }
|
|
241
|
+
let alarms = await AlarmManager.shared.alarms
|
|
242
|
+
guard let alarm = alarms.first(where: { $0.id == uuid }) else { return nil }
|
|
243
|
+
switch alarm.state {
|
|
244
|
+
case .scheduled: return "scheduled"
|
|
245
|
+
case .ringing: return "ringing"
|
|
246
|
+
case .snoozed: return "snoozed"
|
|
247
|
+
default: return "unknown"
|
|
248
|
+
}
|
|
249
|
+
} else {
|
|
250
|
+
throw NSError(
|
|
251
|
+
domain: "AlarmKitError",
|
|
252
|
+
code: 1,
|
|
253
|
+
userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
|
|
254
|
+
)
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
@available(iOS 15.1, *)
|
|
260
|
+
public func getAllAlarms() throws -> NitroModules.Promise<[String]> {
|
|
261
|
+
return NitroModules.Promise.async {
|
|
262
|
+
if #available(iOS 26.0, *) {
|
|
263
|
+
let alarms = await AlarmManager.shared.alarms
|
|
264
|
+
return alarms.map { $0.id.uuidString }
|
|
265
|
+
} else {
|
|
266
|
+
throw NSError(
|
|
267
|
+
domain: "AlarmKitError",
|
|
268
|
+
code: 1,
|
|
269
|
+
userInfo: [NSLocalizedDescriptionKey: "AlarmKit requires iOS 26.0 or later"]
|
|
270
|
+
)
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
func StringToColor (hex:String) -> UIColor {
|
|
277
|
+
var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
|
|
278
|
+
|
|
279
|
+
if (cString.hasPrefix("#")) {
|
|
280
|
+
cString.remove(at: cString.startIndex)
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
if ((cString.count) != 6) {
|
|
284
|
+
return UIColor.gray
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
var rgbValue:UInt64 = 0
|
|
288
|
+
Scanner(string: cString).scanHexInt64(&rgbValue)
|
|
289
|
+
|
|
290
|
+
return UIColor(
|
|
291
|
+
red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
|
|
292
|
+
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
|
|
293
|
+
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
|
|
294
|
+
alpha: CGFloat(1.0)
|
|
295
|
+
)
|
|
296
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["AlarmKit.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
4
|
+
const AlarmKitHybridObject = NitroModules.createHybridObject('AlarmKit');
|
|
5
|
+
export async function requestAlarmPermission() {
|
|
6
|
+
return AlarmKitHybridObject.requestAlarmPermission();
|
|
7
|
+
}
|
|
8
|
+
export async function scheduleFixedAlarm(title, stopBtn, tintColor, secondaryBtn, timestamp, countdown) {
|
|
9
|
+
if (!timestamp && !countdown) throw new Error('You need to specify when the alarm will trigger, use countdown for a timer and timestamp for an alarm.');
|
|
10
|
+
return AlarmKitHybridObject.scheduleFixedAlarm(title, stopBtn, tintColor, secondaryBtn, timestamp, countdown);
|
|
11
|
+
}
|
|
12
|
+
export async function scheduleRelativeAlarm(title, stopBtn, tintColor, hour, minute, repeats, secondaryBtn, countdown) {
|
|
13
|
+
return AlarmKitHybridObject.scheduleRelativeAlarm(title, stopBtn, tintColor, hour, minute, repeats, secondaryBtn, countdown);
|
|
14
|
+
}
|
|
15
|
+
export async function cancelAlarm(id) {
|
|
16
|
+
return AlarmKitHybridObject.cancelAlarm(id);
|
|
17
|
+
}
|
|
18
|
+
export async function cancelAllAlarms() {
|
|
19
|
+
return AlarmKitHybridObject.cancelAllAlarms();
|
|
20
|
+
}
|
|
21
|
+
export async function getAlarm(id) {
|
|
22
|
+
return AlarmKitHybridObject.getAlarm(id);
|
|
23
|
+
}
|
|
24
|
+
export async function getAllAlarms() {
|
|
25
|
+
return AlarmKitHybridObject.getAllAlarms();
|
|
26
|
+
}
|
|
27
|
+
export async function createAlarmButton(text, textColor, icon) {
|
|
28
|
+
return {
|
|
29
|
+
text,
|
|
30
|
+
textColor,
|
|
31
|
+
icon
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export async function createAlarmCountdown(preAlert, postAlert) {
|
|
35
|
+
return {
|
|
36
|
+
preAlert,
|
|
37
|
+
postAlert
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NitroModules","AlarmKitHybridObject","createHybridObject","requestAlarmPermission","scheduleFixedAlarm","title","stopBtn","tintColor","secondaryBtn","timestamp","countdown","Error","scheduleRelativeAlarm","hour","minute","repeats","cancelAlarm","id","cancelAllAlarms","getAlarm","getAllAlarms","createAlarmButton","text","textColor","icon","createAlarmCountdown","preAlert","postAlert"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAQzD,MAAMC,oBAAoB,GACxBD,YAAY,CAACE,kBAAkB,CAAW,UAAU,CAAC;AAEvD,OAAO,eAAeC,sBAAsBA,CAAA,EAAqB;EAC/D,OAAOF,oBAAoB,CAACE,sBAAsB,CAAC,CAAC;AACtD;AAEA,OAAO,eAAeC,kBAAkBA,CACtCC,KAAa,EACbC,OAAgC,EAChCC,SAAiB,EACjBC,YAAsC,EACtCC,SAAkB,EAClBC,SAA0B,EACT;EACjB,IAAI,CAACD,SAAS,IAAI,CAACC,SAAS,EAC1B,MAAM,IAAIC,KAAK,CACb,wGACF,CAAC;EACH,OAAOV,oBAAoB,CAACG,kBAAkB,CAC5CC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,YAAY,EACZC,SAAS,EACTC,SACF,CAAC;AACH;AAEA,OAAO,eAAeE,qBAAqBA,CACzCP,KAAa,EACbC,OAAgC,EAChCC,SAAiB,EACjBM,IAAY,EACZC,MAAc,EACdC,OAAuB,EACvBP,YAAsC,EACtCE,SAA0B,EACT;EACjB,OAAOT,oBAAoB,CAACW,qBAAqB,CAC/CP,KAAK,EACLC,OAAO,EACPC,SAAS,EACTM,IAAI,EACJC,MAAM,EACNC,OAAO,EACPP,YAAY,EACZE,SACF,CAAC;AACH;AAEA,OAAO,eAAeM,WAAWA,CAACC,EAAU,EAAoB;EAC9D,OAAOhB,oBAAoB,CAACe,WAAW,CAACC,EAAE,CAAC;AAC7C;AAEA,OAAO,eAAeC,eAAeA,CAAA,EAAqB;EACxD,OAAOjB,oBAAoB,CAACiB,eAAe,CAAC,CAAC;AAC/C;AAEA,OAAO,eAAeC,QAAQA,CAACF,EAAU,EAA0B;EACjE,OAAOhB,oBAAoB,CAACkB,QAAQ,CAACF,EAAE,CAAC;AAC1C;AAEA,OAAO,eAAeG,YAAYA,CAAA,EAAsB;EACtD,OAAOnB,oBAAoB,CAACmB,YAAY,CAAC,CAAC;AAC5C;AAEA,OAAO,eAAeC,iBAAiBA,CACrCC,IAAY,EACZC,SAAiB,EACjBC,IAAY,EACsB;EAClC,OAAO;IACLF,IAAI;IACJC,SAAS;IACTC;EACF,CAAC;AACH;AAEA,OAAO,eAAeC,oBAAoBA,CACxCC,QAAuB,EACvBC,SAAwB,EACC;EACzB,OAAO;IACLD,QAAQ;IACRC;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export interface AlarmKit extends HybridObject<{
|
|
3
|
+
ios: 'swift';
|
|
4
|
+
android: 'kotlin';
|
|
5
|
+
}> {
|
|
6
|
+
requestAlarmPermission(): Promise<boolean>;
|
|
7
|
+
scheduleFixedAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, secondaryBtn?: CustomizableAlarmButton, timestamp?: number, countdown?: AlarmCountdown): Promise<string>;
|
|
8
|
+
scheduleRelativeAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, hour: number, minute: number, repeats: AlarmWeekday[], secondaryBtn?: CustomizableAlarmButton, countdown?: AlarmCountdown): Promise<string>;
|
|
9
|
+
cancelAlarm(id: string): Promise<boolean>;
|
|
10
|
+
cancelAllAlarms(): Promise<boolean>;
|
|
11
|
+
getAlarm(id: string): Promise<string | null>;
|
|
12
|
+
getAllAlarms(): Promise<string[]>;
|
|
13
|
+
}
|
|
14
|
+
export interface CustomizableAlarmButton {
|
|
15
|
+
text: string;
|
|
16
|
+
textColor: string;
|
|
17
|
+
icon: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AlarmCountdown {
|
|
20
|
+
preAlert?: number | null;
|
|
21
|
+
postAlert?: number | null;
|
|
22
|
+
}
|
|
23
|
+
export type AlarmWeekday = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
|
|
24
|
+
//# sourceMappingURL=AlarmKit.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlarmKit.nitro.d.ts","sourceRoot":"","sources":["../../../src/AlarmKit.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,QACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,qBAAqB,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EAAE,EACvB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,UAAU,GACV,QAAQ,GACR,UAAU,GACV,QAAQ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AlarmCountdown, AlarmWeekday, CustomizableAlarmButton } from './AlarmKit.nitro';
|
|
2
|
+
export declare function requestAlarmPermission(): Promise<boolean>;
|
|
3
|
+
export declare function scheduleFixedAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, secondaryBtn?: CustomizableAlarmButton, timestamp?: number, countdown?: AlarmCountdown): Promise<string>;
|
|
4
|
+
export declare function scheduleRelativeAlarm(title: string, stopBtn: CustomizableAlarmButton, tintColor: string, hour: number, minute: number, repeats: AlarmWeekday[], secondaryBtn?: CustomizableAlarmButton, countdown?: AlarmCountdown): Promise<string>;
|
|
5
|
+
export declare function cancelAlarm(id: string): Promise<boolean>;
|
|
6
|
+
export declare function cancelAllAlarms(): Promise<boolean>;
|
|
7
|
+
export declare function getAlarm(id: string): Promise<string | null>;
|
|
8
|
+
export declare function getAllAlarms(): Promise<string[]>;
|
|
9
|
+
export declare function createAlarmButton(text: string, textColor: string, icon: string): Promise<CustomizableAlarmButton>;
|
|
10
|
+
export declare function createAlarmCountdown(preAlert: number | null, postAlert: number | null): Promise<AlarmCountdown>;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EACZ,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAK1B,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EAAE,EACvB,YAAY,CAAC,EAAE,uBAAuB,EACtC,SAAS,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAExD;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAEjE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAEtD;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,uBAAuB,CAAC,CAMlC;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,cAAc,CAAC,CAKzB"}
|
package/nitro.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cxxNamespace": ["alarmkit"],
|
|
3
|
+
"ios": {
|
|
4
|
+
"iosModuleName": "AlarmKit"
|
|
5
|
+
},
|
|
6
|
+
"android": {
|
|
7
|
+
"androidNamespace": ["alarmkit"],
|
|
8
|
+
"androidCxxLibName": "alarmkit"
|
|
9
|
+
},
|
|
10
|
+
"autolinking": {
|
|
11
|
+
"AlarmKit": {
|
|
12
|
+
"swift": "AlarmKit",
|
|
13
|
+
"kotlin": "AlarmKit"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"ignorePaths": ["node_modules"]
|
|
17
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#
|
|
2
|
+
# alarmkit+autolinking.cmake
|
|
3
|
+
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
# https://github.com/mrousavy/nitro
|
|
5
|
+
# Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
# This is a CMake file that adds all files generated by Nitrogen
|
|
9
|
+
# to the current CMake project.
|
|
10
|
+
#
|
|
11
|
+
# To use it, add this to your CMakeLists.txt:
|
|
12
|
+
# ```cmake
|
|
13
|
+
# include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/alarmkit+autolinking.cmake)
|
|
14
|
+
# ```
|
|
15
|
+
|
|
16
|
+
# Add all headers that were generated by Nitrogen
|
|
17
|
+
include_directories(
|
|
18
|
+
"../nitrogen/generated/shared/c++"
|
|
19
|
+
"../nitrogen/generated/android/c++"
|
|
20
|
+
"../nitrogen/generated/android/"
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# Add all .cpp sources that were generated by Nitrogen
|
|
24
|
+
target_sources(
|
|
25
|
+
# CMake project name (Android C++ library name)
|
|
26
|
+
alarmkit PRIVATE
|
|
27
|
+
# Autolinking Setup
|
|
28
|
+
../nitrogen/generated/android/alarmkitOnLoad.cpp
|
|
29
|
+
# Shared Nitrogen C++ sources
|
|
30
|
+
../nitrogen/generated/shared/c++/HybridAlarmKitSpec.cpp
|
|
31
|
+
# Android-specific Nitrogen C++ sources
|
|
32
|
+
../nitrogen/generated/android/c++/JHybridAlarmKitSpec.cpp
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# Define a flag to check if we are building properly
|
|
36
|
+
add_definitions(-DBUILDING_ALARMKIT_WITH_GENERATED_CMAKE_PROJECT)
|
|
37
|
+
|
|
38
|
+
# From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
|
|
39
|
+
# Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
|
|
40
|
+
target_compile_definitions(
|
|
41
|
+
alarmkit PRIVATE
|
|
42
|
+
-DFOLLY_NO_CONFIG=1
|
|
43
|
+
-DFOLLY_HAVE_CLOCK_GETTIME=1
|
|
44
|
+
-DFOLLY_USE_LIBCPP=1
|
|
45
|
+
-DFOLLY_CFG_NO_COROUTINES=1
|
|
46
|
+
-DFOLLY_MOBILE=1
|
|
47
|
+
-DFOLLY_HAVE_RECVMMSG=1
|
|
48
|
+
-DFOLLY_HAVE_PTHREAD=1
|
|
49
|
+
# Once we target android-23 above, we can comment
|
|
50
|
+
# the following line. NDK uses GNU style stderror_r() after API 23.
|
|
51
|
+
-DFOLLY_HAVE_XSI_STRERROR_R=1
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Add all libraries required by the generated specs
|
|
55
|
+
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
|
|
56
|
+
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
|
|
57
|
+
find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
|
|
58
|
+
|
|
59
|
+
# Link all libraries together
|
|
60
|
+
target_link_libraries(
|
|
61
|
+
alarmkit
|
|
62
|
+
fbjni::fbjni # <-- Facebook C++ JNI helpers
|
|
63
|
+
ReactAndroid::jsi # <-- RN: JSI
|
|
64
|
+
react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
# Link react-native (different prefab between RN 0.75 and RN 0.76)
|
|
68
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
69
|
+
target_link_libraries(
|
|
70
|
+
alarmkit
|
|
71
|
+
ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
|
|
72
|
+
)
|
|
73
|
+
else()
|
|
74
|
+
target_link_libraries(
|
|
75
|
+
alarmkit
|
|
76
|
+
ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
|
|
77
|
+
)
|
|
78
|
+
endif()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// alarmkit+autolinking.gradle
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
/// This is a Gradle file that adds all files generated by Nitrogen
|
|
9
|
+
/// to the current Gradle project.
|
|
10
|
+
///
|
|
11
|
+
/// To use it, add this to your build.gradle:
|
|
12
|
+
/// ```gradle
|
|
13
|
+
/// apply from: '../nitrogen/generated/android/alarmkit+autolinking.gradle'
|
|
14
|
+
/// ```
|
|
15
|
+
|
|
16
|
+
logger.warn("[NitroModules] 🔥 alarmkit is boosted by nitro!")
|
|
17
|
+
|
|
18
|
+
android {
|
|
19
|
+
sourceSets {
|
|
20
|
+
main {
|
|
21
|
+
java.srcDirs += [
|
|
22
|
+
// Nitrogen files
|
|
23
|
+
"${project.projectDir}/../nitrogen/generated/android/kotlin"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// alarmkitOnLoad.cpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#ifndef BUILDING_ALARMKIT_WITH_GENERATED_CMAKE_PROJECT
|
|
9
|
+
#error alarmkitOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#include "alarmkitOnLoad.hpp"
|
|
13
|
+
|
|
14
|
+
#include <jni.h>
|
|
15
|
+
#include <fbjni/fbjni.h>
|
|
16
|
+
#include <NitroModules/HybridObjectRegistry.hpp>
|
|
17
|
+
|
|
18
|
+
#include "JHybridAlarmKitSpec.hpp"
|
|
19
|
+
#include <NitroModules/JNISharedPtr.hpp>
|
|
20
|
+
#include <NitroModules/DefaultConstructableObject.hpp>
|
|
21
|
+
|
|
22
|
+
namespace margelo::nitro::alarmkit {
|
|
23
|
+
|
|
24
|
+
int initialize(JavaVM* vm) {
|
|
25
|
+
using namespace margelo::nitro;
|
|
26
|
+
using namespace margelo::nitro::alarmkit;
|
|
27
|
+
using namespace facebook;
|
|
28
|
+
|
|
29
|
+
return facebook::jni::initialize(vm, [] {
|
|
30
|
+
// Register native JNI methods
|
|
31
|
+
margelo::nitro::alarmkit::JHybridAlarmKitSpec::registerNatives();
|
|
32
|
+
|
|
33
|
+
// Register Nitro Hybrid Objects
|
|
34
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
35
|
+
"AlarmKit",
|
|
36
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
37
|
+
static DefaultConstructableObject<JHybridAlarmKitSpec::javaobject> object("com/margelo/nitro/alarmkit/AlarmKit");
|
|
38
|
+
auto instance = object.create();
|
|
39
|
+
auto globalRef = jni::make_global(instance);
|
|
40
|
+
return JNISharedPtr::make_shared_from_jni<JHybridAlarmKitSpec>(globalRef);
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
} // namespace margelo::nitro::alarmkit
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// alarmkitOnLoad.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#include <jni.h>
|
|
9
|
+
#include <NitroModules/NitroDefines.hpp>
|
|
10
|
+
|
|
11
|
+
namespace margelo::nitro::alarmkit {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Initializes the native (C++) part of alarmkit, and autolinks all Hybrid Objects.
|
|
15
|
+
* Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`).
|
|
16
|
+
* Example:
|
|
17
|
+
* ```cpp (cpp-adapter.cpp)
|
|
18
|
+
* JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
|
|
19
|
+
* return margelo::nitro::alarmkit::initialize(vm);
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
int initialize(JavaVM* vm);
|
|
24
|
+
|
|
25
|
+
} // namespace margelo::nitro::alarmkit
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JAlarmCountdown.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © 2026 Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "AlarmCountdown.hpp"
|
|
12
|
+
|
|
13
|
+
#include <optional>
|
|
14
|
+
|
|
15
|
+
namespace margelo::nitro::alarmkit {
|
|
16
|
+
|
|
17
|
+
using namespace facebook;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The C++ JNI bridge between the C++ struct "AlarmCountdown" and the the Kotlin data class "AlarmCountdown".
|
|
21
|
+
*/
|
|
22
|
+
struct JAlarmCountdown final: public jni::JavaClass<JAlarmCountdown> {
|
|
23
|
+
public:
|
|
24
|
+
static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/alarmkit/AlarmCountdown;";
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
/**
|
|
28
|
+
* Convert this Java/Kotlin-based struct to the C++ struct AlarmCountdown by copying all values to C++.
|
|
29
|
+
*/
|
|
30
|
+
[[maybe_unused]]
|
|
31
|
+
[[nodiscard]]
|
|
32
|
+
AlarmCountdown toCpp() const {
|
|
33
|
+
static const auto clazz = javaClassStatic();
|
|
34
|
+
static const auto fieldPreAlert = clazz->getField<jni::JDouble>("preAlert");
|
|
35
|
+
jni::local_ref<jni::JDouble> preAlert = this->getFieldValue(fieldPreAlert);
|
|
36
|
+
static const auto fieldPostAlert = clazz->getField<jni::JDouble>("postAlert");
|
|
37
|
+
jni::local_ref<jni::JDouble> postAlert = this->getFieldValue(fieldPostAlert);
|
|
38
|
+
return AlarmCountdown(
|
|
39
|
+
preAlert != nullptr ? std::make_optional(preAlert->value()) : std::nullopt,
|
|
40
|
+
postAlert != nullptr ? std::make_optional(postAlert->value()) : std::nullopt
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public:
|
|
45
|
+
/**
|
|
46
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
47
|
+
*/
|
|
48
|
+
[[maybe_unused]]
|
|
49
|
+
static jni::local_ref<JAlarmCountdown::javaobject> fromCpp(const AlarmCountdown& value) {
|
|
50
|
+
return newInstance(
|
|
51
|
+
value.preAlert.has_value() ? jni::JDouble::valueOf(value.preAlert.value()) : nullptr,
|
|
52
|
+
value.postAlert.has_value() ? jni::JDouble::valueOf(value.postAlert.value()) : nullptr
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
} // namespace margelo::nitro::alarmkit
|