@greatdayhr/capacitor-datetime-setting 1.1.1 → 1.2.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/README.md +109 -16
- package/ios/Plugin/AutoDateTimeDetector.swift +177 -0
- package/ios/Plugin/DateTimeSettingPlugin.swift +31 -29
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
# Capacitor DateTime Setting Plugin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@greatdayhr/capacitor-datetime-setting)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
Capacitor plugin to get information about auto time and auto timezone settings, and open device settings if needed.
|
|
6
7
|
|
|
7
8
|
## Installation
|
|
8
9
|
|
|
9
10
|
```bash
|
|
10
|
-
npm install capacitor-datetime-setting
|
|
11
|
+
npm install @greatdayhr/capacitor-datetime-setting
|
|
11
12
|
npx cap sync
|
|
12
13
|
```
|
|
13
14
|
|
|
@@ -21,12 +22,12 @@ Check if automatic time is enabled on the device.
|
|
|
21
22
|
|
|
22
23
|
**Platform Support:**
|
|
23
24
|
- ✅ Android: Returns actual setting value using `Settings.Global.AUTO_TIME`
|
|
24
|
-
- ✅ iOS:
|
|
25
|
+
- ✅ iOS: Uses network time comparison for reliable detection (with offline fallback)
|
|
25
26
|
|
|
26
27
|
**Example:**
|
|
27
28
|
|
|
28
29
|
```typescript
|
|
29
|
-
import { DateTimeSetting } from 'capacitor-datetime-setting';
|
|
30
|
+
import { DateTimeSetting } from '@greatdayhr/capacitor-datetime-setting';
|
|
30
31
|
|
|
31
32
|
const result = await DateTimeSetting.timeIsAuto();
|
|
32
33
|
console.log('Auto time enabled:', result.value);
|
|
@@ -42,12 +43,12 @@ Check if automatic timezone is enabled on the device.
|
|
|
42
43
|
|
|
43
44
|
**Platform Support:**
|
|
44
45
|
- ✅ Android: Returns actual setting value using `Settings.Global.AUTO_TIME_ZONE`
|
|
45
|
-
- ✅ iOS:
|
|
46
|
+
- ✅ iOS: Uses network time comparison for reliable detection (with offline fallback)
|
|
46
47
|
|
|
47
48
|
**Example:**
|
|
48
49
|
|
|
49
50
|
```typescript
|
|
50
|
-
import { DateTimeSetting } from 'capacitor-datetime-setting';
|
|
51
|
+
import { DateTimeSetting } from '@greatdayhr/capacitor-datetime-setting';
|
|
51
52
|
|
|
52
53
|
const result = await DateTimeSetting.timeZoneIsAuto();
|
|
53
54
|
console.log('Auto timezone enabled:', result.value);
|
|
@@ -68,7 +69,7 @@ Open the device's date and time settings screen.
|
|
|
68
69
|
**Example:**
|
|
69
70
|
|
|
70
71
|
```typescript
|
|
71
|
-
import { DateTimeSetting } from 'capacitor-datetime-setting';
|
|
72
|
+
import { DateTimeSetting } from '@greatdayhr/capacitor-datetime-setting';
|
|
72
73
|
|
|
73
74
|
await DateTimeSetting.openSetting();
|
|
74
75
|
```
|
|
@@ -78,7 +79,7 @@ await DateTimeSetting.openSetting();
|
|
|
78
79
|
Here's a complete example showing how to check settings and prompt user to enable auto time:
|
|
79
80
|
|
|
80
81
|
```typescript
|
|
81
|
-
import { DateTimeSetting } from 'capacitor-datetime-setting';
|
|
82
|
+
import { DateTimeSetting } from '@greatdayhr/capacitor-datetime-setting';
|
|
82
83
|
import { Capacitor } from '@capacitor/core';
|
|
83
84
|
|
|
84
85
|
async function checkAutoTimeSettings() {
|
|
@@ -115,16 +116,62 @@ The plugin uses Android's `Settings.Global` API to check the auto time and timez
|
|
|
115
116
|
|
|
116
117
|
### iOS
|
|
117
118
|
|
|
118
|
-
iOS does not provide direct public APIs to check auto date/time settings
|
|
119
|
+
iOS does not provide direct public APIs to check auto date/time settings. This plugin uses a **network-based detection** method for reliable results:
|
|
120
|
+
|
|
121
|
+
#### Detection Method
|
|
122
|
+
|
|
123
|
+
The plugin uses a multi-layered approach to detect auto date/time settings:
|
|
124
|
+
|
|
125
|
+
1. **Cache Check** (Instant)
|
|
126
|
+
- Returns cached result if available and less than 30 seconds old
|
|
127
|
+
- Avoids unnecessary network calls for better performance
|
|
128
|
+
|
|
129
|
+
2. **Quick Timezone Check** (Preliminary)
|
|
130
|
+
- Compares `TimeZone.autoupdatingCurrent` with `TimeZone.current`
|
|
131
|
+
- If they differ, auto date/time is definitely disabled
|
|
132
|
+
- Provides fast response for obvious cases
|
|
133
|
+
|
|
134
|
+
3. **Network Time Comparison** (Primary)
|
|
135
|
+
- Fetches accurate UTC time from `https://worldtimeapi.org/api/timezone/Etc/UTC`
|
|
136
|
+
- Compares device time with server time
|
|
137
|
+
- **Threshold**: Time difference > 60 seconds indicates disabled auto date/time
|
|
138
|
+
- **Timeout**: 3 seconds for network request
|
|
139
|
+
- **Async**: Non-blocking operation with completion handler
|
|
140
|
+
|
|
141
|
+
4. **Offline Fallback** (When Network Unavailable)
|
|
142
|
+
- Uses timezone comparison method
|
|
143
|
+
- Considers system uptime for better accuracy
|
|
144
|
+
- Ensures plugin works without network connection
|
|
119
145
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
-
|
|
146
|
+
#### Why Network Comparison?
|
|
147
|
+
|
|
148
|
+
The simple `TimeZone.autoupdatingCurrent` check alone is **not reliable** because:
|
|
149
|
+
- It can return false positives when timezone is set correctly but time is manually changed
|
|
150
|
+
- It doesn't detect when user manually sets the exact same timezone
|
|
151
|
+
- Network time comparison provides definitive proof of time synchronization
|
|
152
|
+
|
|
153
|
+
#### Features
|
|
154
|
+
|
|
155
|
+
- ✅ **High Accuracy**: Detects manual time changes even if timezone is correct
|
|
156
|
+
- ✅ **Performance Optimized**: 30-second cache reduces network overhead
|
|
157
|
+
- ✅ **Offline Ready**: Falls back gracefully when network is unavailable
|
|
158
|
+
- ✅ **Battery Friendly**: Network monitoring prevents unnecessary requests
|
|
159
|
+
- ✅ **Non-Blocking**: Async operations don't freeze the UI
|
|
160
|
+
- ✅ **Automatic Cleanup**: Proper resource management on plugin deallocation
|
|
161
|
+
|
|
162
|
+
#### Limitations
|
|
124
163
|
|
|
125
|
-
**Limitations:**
|
|
126
164
|
- `openSetting()` opens the main Settings app instead of the specific Date & Time page (iOS restriction)
|
|
127
|
-
-
|
|
165
|
+
- First call after app launch requires network for best accuracy (cached afterward)
|
|
166
|
+
- Network check timeout is 3 seconds
|
|
167
|
+
- Assumes time difference > 60 seconds means auto-time is disabled (works for most cases)
|
|
168
|
+
|
|
169
|
+
#### Technical Implementation
|
|
170
|
+
|
|
171
|
+
**Network Time Server**: Uses WorldTimeAPI for reliable UTC time
|
|
172
|
+
**Caching Strategy**: In-memory cache with 30-second TTL
|
|
173
|
+
**Network Monitoring**: Uses Apple's `Network` framework
|
|
174
|
+
**Threading**: Main queue dispatch for Capacitor callbacks
|
|
128
175
|
|
|
129
176
|
**Credit:** This technique is inspired by the Flutter [date_change_checker](https://github.com/error404sushant/date_change_checker) plugin.
|
|
130
177
|
|
|
@@ -132,6 +179,52 @@ iOS does not provide direct public APIs to check auto date/time settings, but th
|
|
|
132
179
|
|
|
133
180
|
This plugin is not supported on web. All methods will throw "Not implemented on web" errors.
|
|
134
181
|
|
|
182
|
+
## Troubleshooting
|
|
183
|
+
|
|
184
|
+
### iOS: Detection always returns true/false
|
|
185
|
+
|
|
186
|
+
**Problem**: The plugin always returns the same result regardless of actual settings.
|
|
187
|
+
|
|
188
|
+
**Solutions**:
|
|
189
|
+
1. **Check network connectivity**: The plugin needs internet access for accurate detection
|
|
190
|
+
2. **Wait for cache to expire**: If testing, wait 30+ seconds between tests
|
|
191
|
+
3. **Check time difference**: Ensure your manual time is >60 seconds different from actual time
|
|
192
|
+
4. **Verify WorldTimeAPI is accessible**: The plugin uses `https://worldtimeapi.org`
|
|
193
|
+
|
|
194
|
+
### iOS: Slow first response
|
|
195
|
+
|
|
196
|
+
**Problem**: First call to `timeIsAuto()` takes 3+ seconds.
|
|
197
|
+
|
|
198
|
+
**Explanation**: This is expected behavior. The first call makes a network request to fetch accurate time. Subsequent calls within 30 seconds use cached results and return instantly.
|
|
199
|
+
|
|
200
|
+
**Solution**: If you need instant response, consider:
|
|
201
|
+
- Pre-warming the cache by calling `timeIsAuto()` during app initialization
|
|
202
|
+
- Showing a loading indicator during the first check
|
|
203
|
+
- Using the offline fallback (less accurate but instant)
|
|
204
|
+
|
|
205
|
+
### iOS: Plugin doesn't work in airplane mode
|
|
206
|
+
|
|
207
|
+
**Problem**: Plugin returns unexpected results when device is offline.
|
|
208
|
+
|
|
209
|
+
**Explanation**: The plugin falls back to timezone-based detection when offline, which is less accurate.
|
|
210
|
+
|
|
211
|
+
**Solution**: This is expected behavior. For best accuracy, ensure network connectivity. The offline fallback is a compromise for offline scenarios.
|
|
212
|
+
|
|
213
|
+
### Android: Plugin not detecting changes
|
|
214
|
+
|
|
215
|
+
**Problem**: Auto time/timezone setting changes are not detected.
|
|
216
|
+
|
|
217
|
+
**Solution**: Ensure you're testing on a physical device. Some emulators may not properly reflect system setting changes.
|
|
218
|
+
|
|
219
|
+
## Version History
|
|
220
|
+
|
|
221
|
+
See [CHANGELOG.md](CHANGELOG.md) for detailed version history.
|
|
222
|
+
|
|
223
|
+
**Latest version (1.2.0)**:
|
|
224
|
+
- Improved iOS detection with network time comparison
|
|
225
|
+
- Added caching for better performance
|
|
226
|
+
- Better offline support
|
|
227
|
+
|
|
135
228
|
## License
|
|
136
229
|
|
|
137
230
|
MIT
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import Network
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* iOS implementation for detecting automatic date/time settings
|
|
6
|
+
* Uses network time comparison for accuracy with offline fallback
|
|
7
|
+
*/
|
|
8
|
+
class AutoDateTimeDetector {
|
|
9
|
+
|
|
10
|
+
// MARK: - Properties
|
|
11
|
+
|
|
12
|
+
private static var networkMonitor = NWPathMonitor()
|
|
13
|
+
private static var isNetworkAvailable = true
|
|
14
|
+
|
|
15
|
+
// Cache for auto date/time status to avoid repeated network calls
|
|
16
|
+
private static var cachedAutoDateTimeStatus: Bool?
|
|
17
|
+
private static var lastStatusCheckTime: Date?
|
|
18
|
+
private static let statusCacheInterval: TimeInterval = 30.0 // Cache for 30 seconds
|
|
19
|
+
|
|
20
|
+
// MARK: - Initialization
|
|
21
|
+
|
|
22
|
+
static func initialize() {
|
|
23
|
+
startNetworkMonitoring()
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// MARK: - Auto Date/Time Detection
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Checks if automatic date/time is enabled on iOS device (async version)
|
|
30
|
+
* Uses caching to provide instant results and avoid network delays
|
|
31
|
+
*/
|
|
32
|
+
static func isAutoDateTimeEnabled(completion: @escaping (Bool) -> Void) {
|
|
33
|
+
// Check if we have a recent cached result
|
|
34
|
+
if let cachedStatus = cachedAutoDateTimeStatus,
|
|
35
|
+
let lastCheck = lastStatusCheckTime,
|
|
36
|
+
Date().timeIntervalSince(lastCheck) < statusCacheInterval {
|
|
37
|
+
completion(cachedStatus)
|
|
38
|
+
return
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// First, try the timezone approach as a quick check
|
|
42
|
+
let autoUpdatingTimeZone = TimeZone.autoupdatingCurrent
|
|
43
|
+
let systemTimeZone = TimeZone.current
|
|
44
|
+
|
|
45
|
+
// If timezone auto-update is disabled, automatic date/time is likely disabled
|
|
46
|
+
if autoUpdatingTimeZone.identifier != systemTimeZone.identifier {
|
|
47
|
+
let result = false
|
|
48
|
+
cachedAutoDateTimeStatus = result
|
|
49
|
+
lastStatusCheckTime = Date()
|
|
50
|
+
completion(result)
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Perform network-based time comparison asynchronously
|
|
55
|
+
checkTimeWithNetworkServerAsync { isEnabled in
|
|
56
|
+
cachedAutoDateTimeStatus = isEnabled
|
|
57
|
+
lastStatusCheckTime = Date()
|
|
58
|
+
completion(isEnabled)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Synchronous version for backward compatibility (uses cached result or fallback)
|
|
64
|
+
*/
|
|
65
|
+
static func isAutoDateTimeEnabled() -> Bool {
|
|
66
|
+
// Return cached result if available and recent
|
|
67
|
+
if let cachedStatus = cachedAutoDateTimeStatus,
|
|
68
|
+
let lastCheck = lastStatusCheckTime,
|
|
69
|
+
Date().timeIntervalSince(lastCheck) < statusCacheInterval {
|
|
70
|
+
return cachedStatus
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Fallback to offline check for immediate response
|
|
74
|
+
return isAutoDateTimeEnabledOffline()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Alternative method for offline scenarios
|
|
79
|
+
* Checks system settings indirectly through available APIs
|
|
80
|
+
*/
|
|
81
|
+
static func isAutoDateTimeEnabledOffline() -> Bool {
|
|
82
|
+
// Check if timezone auto-update is enabled
|
|
83
|
+
let autoUpdatingTimeZone = TimeZone.autoupdatingCurrent
|
|
84
|
+
let systemTimeZone = TimeZone.current
|
|
85
|
+
|
|
86
|
+
// Additional check: compare with system uptime
|
|
87
|
+
let processInfo = ProcessInfo.processInfo
|
|
88
|
+
let systemUptime = processInfo.systemUptime
|
|
89
|
+
|
|
90
|
+
// If system has been up for a while and timezone matches auto-updating,
|
|
91
|
+
// it's likely that auto date/time is enabled
|
|
92
|
+
if systemUptime > 300 && autoUpdatingTimeZone.identifier == systemTimeZone.identifier {
|
|
93
|
+
return true
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return autoUpdatingTimeZone.identifier == systemTimeZone.identifier
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// MARK: - Helper Methods
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Compares device time with network time server (async version)
|
|
103
|
+
* Non-blocking approach for better performance
|
|
104
|
+
*/
|
|
105
|
+
private static func checkTimeWithNetworkServerAsync(completion: @escaping (Bool) -> Void) {
|
|
106
|
+
// Create URL request to a reliable time server
|
|
107
|
+
guard let url = URL(string: "https://worldtimeapi.org/api/timezone/Etc/UTC") else {
|
|
108
|
+
completion(true) // Fallback to true if URL creation fails
|
|
109
|
+
return
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
var request = URLRequest(url: url)
|
|
113
|
+
request.timeoutInterval = 3.0 // Reduced timeout for faster response
|
|
114
|
+
request.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData
|
|
115
|
+
|
|
116
|
+
let task = URLSession.shared.dataTask(with: request) { data, response, error in
|
|
117
|
+
// Check for network errors
|
|
118
|
+
if let error = error {
|
|
119
|
+
print("Network error checking time: \(error.localizedDescription)")
|
|
120
|
+
completion(true) // Default to true if network check fails
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Parse response data
|
|
125
|
+
guard let data = data,
|
|
126
|
+
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
|
127
|
+
let unixTimeString = json["unixtime"] as? Double else {
|
|
128
|
+
print("Failed to parse time server response")
|
|
129
|
+
completion(true) // Default to true if parsing fails
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Compare server time with device time
|
|
134
|
+
let serverTime = Date(timeIntervalSince1970: unixTimeString)
|
|
135
|
+
let deviceTime = Date()
|
|
136
|
+
let timeDifference = abs(deviceTime.timeIntervalSince(serverTime))
|
|
137
|
+
|
|
138
|
+
// If time difference is more than 60 seconds, consider auto-time disabled
|
|
139
|
+
// This threshold accounts for network latency and minor clock drift
|
|
140
|
+
if timeDifference > 60.0 {
|
|
141
|
+
print("Time difference detected: \(timeDifference) seconds")
|
|
142
|
+
completion(false)
|
|
143
|
+
} else {
|
|
144
|
+
completion(true)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
task.resume()
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Starts network connectivity monitoring for battery optimization
|
|
153
|
+
*/
|
|
154
|
+
private static func startNetworkMonitoring() {
|
|
155
|
+
let queue = DispatchQueue(label: "NetworkMonitor")
|
|
156
|
+
networkMonitor.start(queue: queue)
|
|
157
|
+
|
|
158
|
+
networkMonitor.pathUpdateHandler = { path in
|
|
159
|
+
isNetworkAvailable = path.status == .satisfied
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Stops network monitoring to conserve battery
|
|
165
|
+
*/
|
|
166
|
+
static func stopNetworkMonitoring() {
|
|
167
|
+
networkMonitor.cancel()
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Resets the status cache
|
|
172
|
+
*/
|
|
173
|
+
static func reset() {
|
|
174
|
+
cachedAutoDateTimeStatus = nil
|
|
175
|
+
lastStatusCheckTime = nil
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -6,51 +6,53 @@ import Capacitor
|
|
|
6
6
|
*
|
|
7
7
|
* Capacitor plugin to check auto time/timezone settings and open device settings.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* iOS implementation uses network time comparison with AutoDateTimeDetector
|
|
10
|
+
* for reliable detection of automatic date/time settings.
|
|
11
11
|
*/
|
|
12
12
|
@objc(DateTimeSettingPlugin)
|
|
13
13
|
public class DateTimeSettingPlugin: CAPPlugin {
|
|
14
14
|
|
|
15
|
+
override public func load() {
|
|
16
|
+
super.load()
|
|
17
|
+
// Initialize the AutoDateTimeDetector
|
|
18
|
+
AutoDateTimeDetector.initialize()
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
deinit {
|
|
22
|
+
// Clean up network monitoring when plugin is deallocated
|
|
23
|
+
AutoDateTimeDetector.stopNetworkMonitoring()
|
|
24
|
+
}
|
|
25
|
+
|
|
15
26
|
/**
|
|
16
27
|
* Check if automatic time is enabled on the device.
|
|
17
28
|
*
|
|
18
|
-
* iOS
|
|
19
|
-
*
|
|
20
|
-
* to determine if automatic date/time is enabled.
|
|
21
|
-
*
|
|
22
|
-
* When auto date/time is ON: autoupdatingCurrent equals system timezone
|
|
23
|
-
* When auto date/time is OFF: they may differ
|
|
29
|
+
* iOS implementation uses network time comparison for reliable detection.
|
|
30
|
+
* Results are cached for 30 seconds to minimize network calls.
|
|
24
31
|
*/
|
|
25
32
|
@objc func timeIsAuto(_ call: CAPPluginCall) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"value": isAutoEnabled
|
|
34
|
-
])
|
|
33
|
+
AutoDateTimeDetector.isAutoDateTimeEnabled { isEnabled in
|
|
34
|
+
DispatchQueue.main.async {
|
|
35
|
+
call.resolve([
|
|
36
|
+
"value": isEnabled
|
|
37
|
+
])
|
|
38
|
+
}
|
|
39
|
+
}
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
/**
|
|
38
43
|
* Check if automatic timezone is enabled on the device.
|
|
39
44
|
*
|
|
40
|
-
* iOS
|
|
41
|
-
*
|
|
42
|
-
* This is because iOS doesn't separate auto time and auto timezone settings.
|
|
45
|
+
* iOS implementation uses the same detection as timeIsAuto since
|
|
46
|
+
* auto timezone and auto date/time are typically linked on iOS.
|
|
43
47
|
*/
|
|
44
48
|
@objc func timeZoneIsAuto(_ call: CAPPluginCall) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"value": isAutoEnabled
|
|
53
|
-
])
|
|
49
|
+
AutoDateTimeDetector.isAutoDateTimeEnabled { isEnabled in
|
|
50
|
+
DispatchQueue.main.async {
|
|
51
|
+
call.resolve([
|
|
52
|
+
"value": isEnabled
|
|
53
|
+
])
|
|
54
|
+
}
|
|
55
|
+
}
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@greatdayhr/capacitor-datetime-setting",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Capacitor plugin to get information about auto time and auto timezone, open setting if not set to auto",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|