one 2.6.17 → 2.6.19
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/One.podspec +2 -0
- package/android/src/main/java/com/margelo/nitro/one/HybridOneDevice.kt +124 -0
- package/android/src/main/java/com/margelo/nitro/one/HybridOneHaptics.kt +31 -0
- package/android/src/main/java/com/margelo/nitro/one/HybridOneImageManipulator.kt +25 -5
- package/android/src/main/java/com/margelo/nitro/one/HybridOneKeepAwake.kt +34 -9
- package/android/src/main/java/com/margelo/nitro/one/HybridOneSecureStore.kt +269 -78
- package/dist/cjs/index.cjs +3 -0
- package/dist/cjs/index.native.cjs +3 -0
- package/dist/cjs/index.native.js +3 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/one.cjs +1 -0
- package/dist/cjs/one.native.cjs +1 -0
- package/dist/cjs/one.native.js +1 -0
- package/dist/cjs/one.native.js.map +1 -1
- package/dist/cjs/platform/extras.cjs +4 -0
- package/dist/cjs/platform/extras.native.cjs +4 -0
- package/dist/cjs/platform/extras.native.js +4 -0
- package/dist/cjs/platform/extras.native.js.map +1 -1
- package/dist/cjs/platform/haptics/index.cjs +3 -0
- package/dist/cjs/platform/haptics/index.native.cjs +4 -0
- package/dist/cjs/platform/haptics/index.native.js +4 -0
- package/dist/cjs/platform/haptics/index.native.js.map +1 -1
- package/dist/cjs/platform/haptics/validation.cjs +28 -0
- package/dist/cjs/platform/haptics/validation.native.cjs +28 -0
- package/dist/cjs/platform/haptics/validation.native.js +28 -0
- package/dist/cjs/platform/haptics/validation.native.js.map +1 -1
- package/dist/cjs/platform/image-manipulator/index.cjs +10 -3
- package/dist/cjs/platform/image-manipulator/index.native.cjs +1 -0
- package/dist/cjs/platform/image-manipulator/index.native.js +1 -0
- package/dist/cjs/platform/image-manipulator/index.native.js.map +1 -1
- package/dist/cjs/platform/index.cjs +1 -0
- package/dist/cjs/platform/index.native.cjs +1 -0
- package/dist/cjs/platform/index.native.js +1 -0
- package/dist/cjs/platform/index.native.js.map +1 -1
- package/dist/cjs/platform/keep-awake/index.cjs +53 -14
- package/dist/cjs/platform/keep-awake/index.native.cjs +29 -2
- package/dist/cjs/platform/keep-awake/index.native.js +29 -2
- package/dist/cjs/platform/keep-awake/index.native.js.map +1 -1
- package/dist/cjs/platform/keep-awake/unavailable.cjs +11 -1
- package/dist/cjs/platform/keep-awake/unavailable.native.cjs +11 -1
- package/dist/cjs/platform/keep-awake/unavailable.native.js +11 -1
- package/dist/cjs/platform/keep-awake/unavailable.native.js.map +1 -1
- package/dist/cjs/platform/keep-awake/validate.cjs +15 -1
- package/dist/cjs/platform/keep-awake/validate.native.cjs +15 -1
- package/dist/cjs/platform/keep-awake/validate.native.js +15 -1
- package/dist/cjs/platform/keep-awake/validate.native.js.map +1 -1
- package/dist/cjs/platform/localization/index.cjs +100 -0
- package/dist/cjs/platform/localization/index.native.cjs +71 -0
- package/dist/cjs/platform/localization/index.native.js +73 -0
- package/dist/cjs/platform/localization/index.native.js.map +1 -0
- package/dist/cjs/platform/localization/map.cjs +86 -0
- package/dist/cjs/platform/localization/map.native.cjs +90 -0
- package/dist/cjs/platform/localization/map.native.js +92 -0
- package/dist/cjs/platform/localization/map.native.js.map +1 -0
- package/dist/cjs/platform/localization/types.cjs +16 -0
- package/dist/cjs/platform/localization/types.native.cjs +18 -0
- package/dist/cjs/platform/localization/types.native.js +20 -0
- package/dist/cjs/platform/localization/types.native.js.map +1 -0
- package/dist/cjs/platform/secure-store/index.cjs +12 -6
- package/dist/cjs/platform/secure-store/index.native.cjs +18 -12
- package/dist/cjs/platform/secure-store/index.native.js +18 -12
- package/dist/cjs/platform/secure-store/index.native.js.map +1 -1
- package/dist/cjs/platform/secure-store/types.cjs +16 -0
- package/dist/cjs/platform/secure-store/types.native.cjs +18 -0
- package/dist/cjs/platform/secure-store/types.native.js +20 -0
- package/dist/cjs/platform/secure-store/types.native.js.map +1 -0
- package/dist/cjs/platform/secure-store/validate.cjs +34 -0
- package/dist/cjs/platform/secure-store/validate.native.cjs +34 -0
- package/dist/cjs/platform/secure-store/validate.native.js +34 -0
- package/dist/cjs/platform/secure-store/validate.native.js.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.native.js +2 -2
- package/dist/esm/one.mjs +2 -1
- package/dist/esm/one.mjs.map +1 -1
- package/dist/esm/one.native.js +2 -1
- package/dist/esm/one.native.js.map +1 -1
- package/dist/esm/platform/extras.mjs +2 -1
- package/dist/esm/platform/extras.native.js +2 -1
- package/dist/esm/platform/haptics/index.mjs +4 -1
- package/dist/esm/platform/haptics/index.mjs.map +1 -1
- package/dist/esm/platform/haptics/index.native.js +5 -1
- package/dist/esm/platform/haptics/index.native.js.map +1 -1
- package/dist/esm/platform/haptics/validation.mjs +27 -1
- package/dist/esm/platform/haptics/validation.mjs.map +1 -1
- package/dist/esm/platform/haptics/validation.native.js +27 -1
- package/dist/esm/platform/haptics/validation.native.js.map +1 -1
- package/dist/esm/platform/image-manipulator/index.mjs +10 -3
- package/dist/esm/platform/image-manipulator/index.mjs.map +1 -1
- package/dist/esm/platform/image-manipulator/index.native.js +1 -0
- package/dist/esm/platform/image-manipulator/index.native.js.map +1 -1
- package/dist/esm/platform/index.mjs +2 -2
- package/dist/esm/platform/index.mjs.map +1 -1
- package/dist/esm/platform/index.native.js +2 -2
- package/dist/esm/platform/index.native.js.map +1 -1
- package/dist/esm/platform/keep-awake/index.mjs +51 -15
- package/dist/esm/platform/keep-awake/index.mjs.map +1 -1
- package/dist/esm/platform/keep-awake/index.native.js +27 -3
- package/dist/esm/platform/keep-awake/index.native.js.map +1 -1
- package/dist/esm/platform/keep-awake/unavailable.mjs +12 -2
- package/dist/esm/platform/keep-awake/unavailable.mjs.map +1 -1
- package/dist/esm/platform/keep-awake/unavailable.native.js +12 -2
- package/dist/esm/platform/keep-awake/unavailable.native.js.map +1 -1
- package/dist/esm/platform/keep-awake/validate.mjs +10 -1
- package/dist/esm/platform/keep-awake/validate.mjs.map +1 -1
- package/dist/esm/platform/keep-awake/validate.native.js +10 -1
- package/dist/esm/platform/keep-awake/validate.native.js.map +1 -1
- package/dist/esm/platform/localization/index.mjs +77 -0
- package/dist/esm/platform/localization/index.mjs.map +1 -0
- package/dist/esm/platform/localization/index.native.js +46 -0
- package/dist/esm/platform/localization/index.native.js.map +1 -0
- package/dist/esm/platform/localization/map.mjs +59 -0
- package/dist/esm/platform/localization/map.mjs.map +1 -0
- package/dist/esm/platform/localization/map.native.js +61 -0
- package/dist/esm/platform/localization/map.native.js.map +1 -0
- package/dist/esm/platform/localization/types.mjs +0 -0
- package/dist/esm/platform/localization/types.native.js +0 -0
- package/dist/esm/platform/secure-store/index.mjs +13 -7
- package/dist/esm/platform/secure-store/index.mjs.map +1 -1
- package/dist/esm/platform/secure-store/index.native.js +19 -13
- package/dist/esm/platform/secure-store/index.native.js.map +1 -1
- package/dist/esm/platform/secure-store/types.mjs +0 -0
- package/dist/esm/platform/secure-store/types.native.js +0 -0
- package/dist/esm/platform/secure-store/validate.mjs +33 -1
- package/dist/esm/platform/secure-store/validate.mjs.map +1 -1
- package/dist/esm/platform/secure-store/validate.native.js +33 -1
- package/dist/esm/platform/secure-store/validate.native.js.map +1 -1
- package/ios/Nitro/HybridOneDevice.swift +117 -0
- package/ios/Nitro/HybridOneHaptics.swift +4 -0
- package/ios/Nitro/HybridOneImageManipulator.swift +25 -8
- package/ios/Nitro/HybridOneKeepAwake.swift +34 -2
- package/ios/Nitro/HybridOneSecureStore.swift +112 -46
- package/ios/Tests/ImageManipulator/Package.swift +12 -0
- package/ios/Tests/ImageManipulator/README.md +21 -0
- package/ios/Tests/ImageManipulator/Sources/NitroModules/Promise.swift +33 -0
- package/ios/Tests/ImageManipulator/Sources/OneImageManipulatorCore/Types.swift +41 -0
- package/ios/Tests/ImageManipulator/Sources/SDWebImageWebPCoder/SDImageWebPCoder.swift +23 -0
- package/nitrogen/generated/android/c++/JAndroidHaptic.hpp +109 -0
- package/nitrogen/generated/android/c++/JCalendarInfo.hpp +70 -0
- package/nitrogen/generated/android/c++/JHapticImpact.hpp +3 -3
- package/nitrogen/generated/android/c++/JHybridOneDeviceSpec.cpp +52 -0
- package/nitrogen/generated/android/c++/JHybridOneDeviceSpec.hpp +3 -0
- package/nitrogen/generated/android/c++/JHybridOneHapticsSpec.cpp +8 -0
- package/nitrogen/generated/android/c++/JHybridOneHapticsSpec.hpp +1 -0
- package/nitrogen/generated/android/c++/JHybridOneImageManipulatorSpec.cpp +5 -1
- package/nitrogen/generated/android/c++/JHybridOneKeepAwakeSpec.cpp +31 -0
- package/nitrogen/generated/android/c++/JHybridOneKeepAwakeSpec.hpp +2 -0
- package/nitrogen/generated/android/c++/JHybridOneSecureStoreSpec.cpp +26 -19
- package/nitrogen/generated/android/c++/JHybridOneSecureStoreSpec.hpp +6 -6
- package/nitrogen/generated/android/c++/JImageTransformOptions.hpp +7 -1
- package/nitrogen/generated/android/c++/JLocaleInfo.hpp +110 -0
- package/nitrogen/generated/android/c++/JOneImageFlip.hpp +58 -0
- package/nitrogen/generated/android/c++/JOneImageFormat.hpp +3 -0
- package/nitrogen/generated/android/c++/JSecureStoreAccessibility.hpp +73 -0
- package/nitrogen/generated/android/c++/JSecureStoreOptions.hpp +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/AndroidHaptic.kt +40 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/CalendarInfo.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HapticImpact.kt +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneDeviceSpec.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneHapticsSpec.kt +4 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneKeepAwakeSpec.kt +8 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/HybridOneSecureStoreSpec.kt +6 -6
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/ImageTransformOptions.kt +7 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/LocaleInfo.kt +116 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/OneImageFlip.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/OneImageFormat.kt +2 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SecureStoreAccessibility.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/one/SecureStoreOptions.kt +71 -0
- package/nitrogen/generated/ios/One-Swift-Cxx-Bridge.hpp +133 -51
- package/nitrogen/generated/ios/One-Swift-Cxx-Umbrella.hpp +19 -1
- package/nitrogen/generated/ios/c++/HybridOneDeviceSpecSwift.hpp +31 -0
- package/nitrogen/generated/ios/c++/HybridOneHapticsSpecSwift.hpp +9 -0
- package/nitrogen/generated/ios/c++/HybridOneImageManipulatorSpecSwift.hpp +4 -1
- package/nitrogen/generated/ios/c++/HybridOneKeepAwakeSpecSwift.hpp +18 -1
- package/nitrogen/generated/ios/c++/HybridOneSecureStoreSpecSwift.hpp +18 -13
- package/nitrogen/generated/ios/swift/AndroidHaptic.swift +108 -0
- package/nitrogen/generated/ios/swift/CalendarInfo.swift +96 -0
- package/nitrogen/generated/ios/swift/HapticImpact.swift +4 -4
- package/nitrogen/generated/ios/swift/HybridOneDeviceSpec.swift +3 -0
- package/nitrogen/generated/ios/swift/HybridOneDeviceSpec_cxx.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridOneHapticsSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridOneHapticsSpec_cxx.swift +11 -0
- package/nitrogen/generated/ios/swift/HybridOneKeepAwakeSpec.swift +3 -1
- package/nitrogen/generated/ios/swift/HybridOneKeepAwakeSpec_cxx.swift +41 -3
- package/nitrogen/generated/ios/swift/HybridOneSecureStoreSpec.swift +6 -6
- package/nitrogen/generated/ios/swift/HybridOneSecureStoreSpec_cxx.swift +12 -12
- package/nitrogen/generated/ios/swift/ImageTransformOptions.swift +16 -5
- package/nitrogen/generated/ios/swift/LocaleInfo.swift +250 -0
- package/nitrogen/generated/ios/swift/OneImageFlip.swift +40 -0
- package/nitrogen/generated/ios/swift/OneImageFormat.swift +4 -0
- package/nitrogen/generated/ios/swift/SecureStoreAccessibility.swift +60 -0
- package/nitrogen/generated/ios/swift/SecureStoreOptions.swift +107 -0
- package/nitrogen/generated/shared/c++/AndroidHaptic.hpp +144 -0
- package/nitrogen/generated/shared/c++/CalendarInfo.hpp +96 -0
- package/nitrogen/generated/shared/c++/HapticImpact.hpp +5 -5
- package/nitrogen/generated/shared/c++/HybridOneDeviceSpec.cpp +3 -0
- package/nitrogen/generated/shared/c++/HybridOneDeviceSpec.hpp +11 -0
- package/nitrogen/generated/shared/c++/HybridOneHapticsSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridOneHapticsSpec.hpp +4 -0
- package/nitrogen/generated/shared/c++/HybridOneKeepAwakeSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridOneKeepAwakeSpec.hpp +4 -1
- package/nitrogen/generated/shared/c++/HybridOneSecureStoreSpec.hpp +9 -7
- package/nitrogen/generated/shared/c++/ImageTransformOptions.hpp +8 -1
- package/nitrogen/generated/shared/c++/LocaleInfo.hpp +136 -0
- package/nitrogen/generated/shared/c++/OneImageFlip.hpp +76 -0
- package/nitrogen/generated/shared/c++/OneImageFormat.hpp +4 -0
- package/nitrogen/generated/shared/c++/SecureStoreAccessibility.hpp +96 -0
- package/nitrogen/generated/shared/c++/SecureStoreOptions.hpp +102 -0
- package/package.json +15 -15
- package/src/index.ts +3 -0
- package/src/one.test.ts +2 -0
- package/src/one.ts +3 -0
- package/src/platform/extras.ts +3 -0
- package/src/platform/haptics/index.native.ts +13 -3
- package/src/platform/haptics/index.ts +12 -3
- package/src/platform/haptics/types.ts +25 -0
- package/src/platform/haptics/validation.ts +31 -1
- package/src/platform/image-manipulator/index.native.ts +3 -0
- package/src/platform/image-manipulator/index.ts +10 -3
- package/src/platform/index.native.ts +3 -2
- package/src/platform/index.ts +3 -2
- package/src/platform/keep-awake/index.native.ts +31 -2
- package/src/platform/keep-awake/index.ts +66 -17
- package/src/platform/keep-awake/unavailable.ts +12 -2
- package/src/platform/keep-awake/validate.ts +16 -0
- package/src/platform/localization/index.native.ts +47 -0
- package/src/platform/localization/index.ts +90 -0
- package/src/platform/localization/map.ts +77 -0
- package/src/platform/localization/types.ts +36 -0
- package/src/platform/secure-store/index.native.ts +26 -13
- package/src/platform/secure-store/index.ts +20 -7
- package/src/platform/secure-store/types.ts +33 -0
- package/src/platform/secure-store/validate.ts +48 -0
- package/src/platform/specs/OneDevice.nitro.ts +34 -0
- package/src/platform/specs/OneHaptics.nitro.ts +4 -1
- package/src/platform/specs/OneImageManipulator.nitro.ts +4 -1
- package/src/platform/specs/OneKeepAwake.nitro.ts +2 -0
- package/src/platform/specs/OneSecureStore.nitro.ts +12 -8
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/one.d.ts +2 -1
- package/types/one.d.ts.map +1 -1
- package/types/platform/extras.d.ts +3 -0
- package/types/platform/extras.d.ts.map +1 -1
- package/types/platform/haptics/index.d.ts +2 -2
- package/types/platform/haptics/index.d.ts.map +1 -1
- package/types/platform/haptics/index.native.d.ts +2 -2
- package/types/platform/haptics/index.native.d.ts.map +1 -1
- package/types/platform/haptics/types.d.ts +3 -0
- package/types/platform/haptics/types.d.ts.map +1 -1
- package/types/platform/haptics/validation.d.ts +3 -1
- package/types/platform/haptics/validation.d.ts.map +1 -1
- package/types/platform/image-manipulator/index.d.ts +1 -1
- package/types/platform/image-manipulator/index.d.ts.map +1 -1
- package/types/platform/image-manipulator/index.native.d.ts +1 -1
- package/types/platform/image-manipulator/index.native.d.ts.map +1 -1
- package/types/platform/index.d.ts +3 -3
- package/types/platform/index.d.ts.map +1 -1
- package/types/platform/index.native.d.ts +3 -3
- package/types/platform/index.native.d.ts.map +1 -1
- package/types/platform/keep-awake/index.d.ts +3 -0
- package/types/platform/keep-awake/index.d.ts.map +1 -1
- package/types/platform/keep-awake/index.native.d.ts +5 -0
- package/types/platform/keep-awake/index.native.d.ts.map +1 -1
- package/types/platform/keep-awake/unavailable.d.ts +4 -0
- package/types/platform/keep-awake/unavailable.d.ts.map +1 -1
- package/types/platform/keep-awake/validate.d.ts +3 -0
- package/types/platform/keep-awake/validate.d.ts.map +1 -1
- package/types/platform/localization/index.d.ts +7 -0
- package/types/platform/localization/index.d.ts.map +1 -0
- package/types/platform/localization/index.native.d.ts +7 -0
- package/types/platform/localization/index.native.d.ts.map +1 -0
- package/types/platform/localization/map.d.ts +9 -0
- package/types/platform/localization/map.d.ts.map +1 -0
- package/types/platform/localization/types.d.ts +31 -0
- package/types/platform/localization/types.d.ts.map +1 -0
- package/types/platform/secure-store/index.d.ts +8 -7
- package/types/platform/secure-store/index.d.ts.map +1 -1
- package/types/platform/secure-store/index.native.d.ts +8 -7
- package/types/platform/secure-store/index.native.d.ts.map +1 -1
- package/types/platform/secure-store/types.d.ts +24 -0
- package/types/platform/secure-store/types.d.ts.map +1 -0
- package/types/platform/secure-store/validate.d.ts +3 -0
- package/types/platform/secure-store/validate.d.ts.map +1 -1
- package/types/platform/specs/OneDevice.nitro.d.ts +25 -0
- package/types/platform/specs/OneDevice.nitro.d.ts.map +1 -1
- package/types/platform/specs/OneHaptics.nitro.d.ts +2 -1
- package/types/platform/specs/OneHaptics.nitro.d.ts.map +1 -1
- package/types/platform/specs/OneImageManipulator.nitro.d.ts +3 -1
- package/types/platform/specs/OneImageManipulator.nitro.d.ts.map +1 -1
- package/types/platform/specs/OneKeepAwake.nitro.d.ts +2 -0
- package/types/platform/specs/OneKeepAwake.nitro.d.ts.map +1 -1
- package/types/platform/specs/OneSecureStore.nitro.d.ts +8 -6
- package/types/platform/specs/OneSecureStore.nitro.d.ts.map +1 -1
package/One.podspec
CHANGED
|
@@ -47,6 +47,8 @@ Pod::Spec.new do |s|
|
|
|
47
47
|
s.prefix_header_contents = "#ifdef __OBJC__\n#import <React/RCTView.h>\n#import <UserNotifications/UserNotifications.h>\n#import <Social/Social.h>\n#endif\n#ifdef __cplusplus\n#include \"One-Swift-Cxx-Bridge.hpp\"\n#endif"
|
|
48
48
|
|
|
49
49
|
s.dependency 'RNWorklets'
|
|
50
|
+
# webp encoding has no system encoder on ios; expo-image-manipulator uses the same coder.
|
|
51
|
+
s.dependency 'SDWebImageWebPCoder'
|
|
50
52
|
|
|
51
53
|
install_modules_dependencies(s)
|
|
52
54
|
end
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
package com.margelo.nitro.one
|
|
2
2
|
|
|
3
3
|
import android.app.UiModeManager
|
|
4
|
+
import android.content.BroadcastReceiver
|
|
4
5
|
import android.content.Context
|
|
6
|
+
import android.content.Intent
|
|
7
|
+
import android.content.IntentFilter
|
|
5
8
|
import android.content.res.Configuration
|
|
6
9
|
import android.os.Build
|
|
7
10
|
import android.os.LocaleList
|
|
8
11
|
import android.provider.Settings
|
|
12
|
+
import android.text.TextUtils
|
|
13
|
+
import android.text.format.DateFormat
|
|
14
|
+
import android.view.View
|
|
9
15
|
import com.margelo.nitro.NitroModules
|
|
10
16
|
import com.margelo.nitro.core.Promise
|
|
11
17
|
import java.util.Calendar
|
|
12
18
|
import java.util.Currency
|
|
13
19
|
import java.util.Locale
|
|
20
|
+
import java.text.DecimalFormatSymbols
|
|
14
21
|
import java.util.TimeZone
|
|
15
22
|
|
|
16
23
|
// device snapshot matching the ios shape: model, system, idiom,
|
|
@@ -58,6 +65,117 @@ class HybridOneDevice : HybridOneDeviceSpec() {
|
|
|
58
65
|
)
|
|
59
66
|
}
|
|
60
67
|
|
|
68
|
+
private val listeners = mutableMapOf<Int, () -> Unit>()
|
|
69
|
+
private var nextListenerId = 0
|
|
70
|
+
private var receiver: BroadcastReceiver? = null
|
|
71
|
+
|
|
72
|
+
override fun getLocales(): Array<LocaleInfo> =
|
|
73
|
+
preferredLocales().map { localeInfo(it) }.toTypedArray()
|
|
74
|
+
|
|
75
|
+
override fun getCalendars(): Array<CalendarInfo> {
|
|
76
|
+
val locale = Locale.getDefault()
|
|
77
|
+
val calendar = Calendar.getInstance(locale)
|
|
78
|
+
return arrayOf(
|
|
79
|
+
CalendarInfo(
|
|
80
|
+
calendar = unicodeCalendar(locale),
|
|
81
|
+
timeZone = TimeZone.getDefault().id,
|
|
82
|
+
uses24hourClock = DateFormat.is24HourFormat(context()),
|
|
83
|
+
firstWeekday = calendar.firstDayOfWeek.toDouble()
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// the first listener registers the receiver and the last removal
|
|
89
|
+
// unregisters it, so a locale change can never race the subscription.
|
|
90
|
+
@Synchronized
|
|
91
|
+
override fun addLocalizationListener(listener: () -> Unit): () -> Unit {
|
|
92
|
+
val id = nextListenerId++
|
|
93
|
+
listeners[id] = listener
|
|
94
|
+
if (receiver == null) {
|
|
95
|
+
val next = object : BroadcastReceiver() {
|
|
96
|
+
override fun onReceive(context: Context?, intent: Intent?) = emit()
|
|
97
|
+
}
|
|
98
|
+
val filter = IntentFilter().apply {
|
|
99
|
+
addAction(Intent.ACTION_LOCALE_CHANGED)
|
|
100
|
+
addAction(Intent.ACTION_TIMEZONE_CHANGED)
|
|
101
|
+
}
|
|
102
|
+
// both actions are protected system broadcasts, so no exported
|
|
103
|
+
// flag is needed and no other app can send them.
|
|
104
|
+
context().registerReceiver(next, filter)
|
|
105
|
+
receiver = next
|
|
106
|
+
}
|
|
107
|
+
return { removeListener(id) }
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private fun emit() {
|
|
111
|
+
val current = synchronized(this) { listeners.values.toList() }
|
|
112
|
+
current.forEach { it() }
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@Synchronized
|
|
116
|
+
private fun removeListener(id: Int) {
|
|
117
|
+
listeners.remove(id)
|
|
118
|
+
if (listeners.isEmpty()) {
|
|
119
|
+
receiver?.let { context().unregisterReceiver(it) }
|
|
120
|
+
receiver = null
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private fun preferredLocales(): List<Locale> {
|
|
125
|
+
if (Build.VERSION.SDK_INT >= 24) {
|
|
126
|
+
val list = LocaleList.getDefault()
|
|
127
|
+
if (!list.isEmpty) return (0 until list.size()).map { list[it] }
|
|
128
|
+
}
|
|
129
|
+
return listOf(Locale.getDefault())
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private fun localeInfo(locale: Locale): LocaleInfo {
|
|
133
|
+
val symbols = DecimalFormatSymbols(locale)
|
|
134
|
+
val currency = try {
|
|
135
|
+
Currency.getInstance(locale)
|
|
136
|
+
} catch (_: Exception) {
|
|
137
|
+
null
|
|
138
|
+
}
|
|
139
|
+
val region = locale.country.takeIf { it.isNotEmpty() }
|
|
140
|
+
return LocaleInfo(
|
|
141
|
+
languageTag = locale.toLanguageTag(),
|
|
142
|
+
languageCode = locale.language.takeIf { it.isNotEmpty() },
|
|
143
|
+
languageScriptCode = locale.script.takeIf { it.isNotEmpty() },
|
|
144
|
+
regionCode = region,
|
|
145
|
+
languageRegionCode = region,
|
|
146
|
+
currencyCode = currency?.currencyCode,
|
|
147
|
+
currencySymbol = currency?.getSymbol(locale),
|
|
148
|
+
languageCurrencyCode = currency?.currencyCode,
|
|
149
|
+
languageCurrencySymbol = currency?.getSymbol(locale),
|
|
150
|
+
decimalSeparator = symbols.decimalSeparator.toString(),
|
|
151
|
+
digitGroupingSeparator = symbols.groupingSeparator.toString(),
|
|
152
|
+
textDirection =
|
|
153
|
+
if (TextUtils.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL) {
|
|
154
|
+
"rtl"
|
|
155
|
+
} else {
|
|
156
|
+
"ltr"
|
|
157
|
+
},
|
|
158
|
+
measurementSystem = when (region) {
|
|
159
|
+
"US" -> "us"
|
|
160
|
+
"GB" -> "uk"
|
|
161
|
+
null -> null
|
|
162
|
+
else -> "metric"
|
|
163
|
+
},
|
|
164
|
+
temperatureUnit = when (region) {
|
|
165
|
+
null -> null
|
|
166
|
+
in FAHRENHEIT_REGIONS -> "fahrenheit"
|
|
167
|
+
else -> "celsius"
|
|
168
|
+
}
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// java calendar type to the unicode calendar type expo reports.
|
|
173
|
+
private fun unicodeCalendar(locale: Locale): String =
|
|
174
|
+
when (val type = calendarType(locale)) {
|
|
175
|
+
"gregorian" -> "gregory"
|
|
176
|
+
else -> type
|
|
177
|
+
}
|
|
178
|
+
|
|
61
179
|
private fun idiom(context: Context): String {
|
|
62
180
|
val uiMode = context.getSystemService(Context.UI_MODE_SERVICE) as? UiModeManager
|
|
63
181
|
if (uiMode?.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION) return "tv"
|
|
@@ -103,3 +221,9 @@ class HybridOneDevice : HybridOneDeviceSpec() {
|
|
|
103
221
|
hardware in setOf("goldfish", "ranchu", "vbox86")
|
|
104
222
|
}
|
|
105
223
|
}
|
|
224
|
+
|
|
225
|
+
// regions that read temperature in fahrenheit. android has no temperature
|
|
226
|
+
// preference, so the region decides, as in expo-localization.
|
|
227
|
+
private val FAHRENHEIT_REGIONS = setOf(
|
|
228
|
+
"US", "BS", "BZ", "KY", "LR", "GU", "MH", "FM", "PW", "VI", "MP", "AS", "UM"
|
|
229
|
+
)
|
|
@@ -54,6 +54,37 @@ class HybridOneHaptics : HybridOneHapticsSpec() {
|
|
|
54
54
|
)
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
// expo-haptics performAndroidHapticsAsync: the HapticFeedbackConstants
|
|
58
|
+
// value itself. constants added after the device's api level are a no-op
|
|
59
|
+
// rather than a substitute feel the caller did not ask for. no-haptics
|
|
60
|
+
// (-1) is android's own "play nothing" constant.
|
|
61
|
+
override fun performAndroidHaptics(type: AndroidHaptic) {
|
|
62
|
+
val sdk = Build.VERSION.SDK_INT
|
|
63
|
+
val constant = when (type) {
|
|
64
|
+
AndroidHaptic.CLOCK_TICK -> HapticFeedbackConstants.CLOCK_TICK
|
|
65
|
+
AndroidHaptic.CONFIRM -> if (sdk >= 30) HapticFeedbackConstants.CONFIRM else return
|
|
66
|
+
AndroidHaptic.CONTEXT_CLICK -> HapticFeedbackConstants.CONTEXT_CLICK
|
|
67
|
+
AndroidHaptic.DRAG_START -> if (sdk >= 34) HapticFeedbackConstants.DRAG_START else return
|
|
68
|
+
AndroidHaptic.GESTURE_END -> if (sdk >= 30) HapticFeedbackConstants.GESTURE_END else return
|
|
69
|
+
AndroidHaptic.GESTURE_START -> if (sdk >= 30) HapticFeedbackConstants.GESTURE_START else return
|
|
70
|
+
AndroidHaptic.KEYBOARD_PRESS -> HapticFeedbackConstants.KEYBOARD_PRESS
|
|
71
|
+
AndroidHaptic.KEYBOARD_RELEASE -> HapticFeedbackConstants.KEYBOARD_RELEASE
|
|
72
|
+
AndroidHaptic.KEYBOARD_TAP -> HapticFeedbackConstants.KEYBOARD_TAP
|
|
73
|
+
AndroidHaptic.LONG_PRESS -> HapticFeedbackConstants.LONG_PRESS
|
|
74
|
+
AndroidHaptic.NO_HAPTICS -> -1
|
|
75
|
+
AndroidHaptic.REJECT -> if (sdk >= 30) HapticFeedbackConstants.REJECT else return
|
|
76
|
+
AndroidHaptic.SEGMENT_FREQUENT_TICK ->
|
|
77
|
+
if (sdk >= 34) HapticFeedbackConstants.SEGMENT_FREQUENT_TICK else return
|
|
78
|
+
AndroidHaptic.SEGMENT_TICK -> if (sdk >= 34) HapticFeedbackConstants.SEGMENT_TICK else return
|
|
79
|
+
AndroidHaptic.TEXT_HANDLE_MOVE -> HapticFeedbackConstants.TEXT_HANDLE_MOVE
|
|
80
|
+
AndroidHaptic.TOGGLE_OFF -> if (sdk >= 34) HapticFeedbackConstants.TOGGLE_OFF else return
|
|
81
|
+
AndroidHaptic.TOGGLE_ON -> if (sdk >= 34) HapticFeedbackConstants.TOGGLE_ON else return
|
|
82
|
+
AndroidHaptic.VIRTUAL_KEY -> HapticFeedbackConstants.VIRTUAL_KEY
|
|
83
|
+
AndroidHaptic.VIRTUAL_KEY_RELEASE -> HapticFeedbackConstants.VIRTUAL_KEY_RELEASE
|
|
84
|
+
}
|
|
85
|
+
perform(constant)
|
|
86
|
+
}
|
|
87
|
+
|
|
57
88
|
override fun notification(type: HapticNotification) {
|
|
58
89
|
perform(
|
|
59
90
|
when (type) {
|
|
@@ -5,6 +5,7 @@ import android.graphics.BitmapFactory
|
|
|
5
5
|
import android.graphics.Matrix
|
|
6
6
|
import android.media.ExifInterface
|
|
7
7
|
import android.net.Uri
|
|
8
|
+
import android.os.Build
|
|
8
9
|
import com.margelo.nitro.NitroModules
|
|
9
10
|
import com.margelo.nitro.core.Promise
|
|
10
11
|
import java.io.File
|
|
@@ -40,10 +41,10 @@ class HybridOneImageManipulator : HybridOneImageManipulatorSpec() {
|
|
|
40
41
|
if (!source.isFile) throw problem("FILE", "file does not exist")
|
|
41
42
|
val quality = options.quality ?: 0.9
|
|
42
43
|
if (options.format == OneImageFormat.PNG && options.quality != null) {
|
|
43
|
-
throw problem("INPUT", "quality applies only to JPEG")
|
|
44
|
+
throw problem("INPUT", "quality applies only to JPEG or WebP")
|
|
44
45
|
}
|
|
45
46
|
if (!quality.isFinite() || quality < 0 || quality > 1) {
|
|
46
|
-
throw problem("INPUT", "
|
|
47
|
+
throw problem("INPUT", "quality must be between 0 and 1")
|
|
47
48
|
}
|
|
48
49
|
var image = BitmapFactory.decodeFile(source.path) ?: throw problem("DECODE", "source is not a supported image")
|
|
49
50
|
fun replace(next: Bitmap) {
|
|
@@ -90,14 +91,33 @@ class HybridOneImageManipulator : HybridOneImageManipulatorSpec() {
|
|
|
90
91
|
replace(Bitmap.createBitmap(image, 0, 0, image.width, image.height, rotation, true))
|
|
91
92
|
}
|
|
92
93
|
}
|
|
94
|
+
options.flip?.let { flip ->
|
|
95
|
+
val mirror = Matrix()
|
|
96
|
+
when (flip) {
|
|
97
|
+
OneImageFlip.HORIZONTAL -> mirror.preScale(-1f, 1f)
|
|
98
|
+
OneImageFlip.VERTICAL -> mirror.preScale(1f, -1f)
|
|
99
|
+
}
|
|
100
|
+
replace(Bitmap.createBitmap(image, 0, 0, image.width, image.height, mirror, true))
|
|
101
|
+
}
|
|
93
102
|
checkOutputSize(image.width, image.height)
|
|
94
103
|
val folder = File(context.cacheDir, "OneImageManipulator")
|
|
95
104
|
if (!folder.isDirectory && !folder.mkdirs()) throw problem("ENCODE", "cannot create output directory")
|
|
96
|
-
val
|
|
97
|
-
|
|
105
|
+
val compressFormat = when (options.format) {
|
|
106
|
+
OneImageFormat.PNG -> Bitmap.CompressFormat.PNG
|
|
107
|
+
OneImageFormat.JPEG -> Bitmap.CompressFormat.JPEG
|
|
108
|
+
OneImageFormat.WEBP ->
|
|
109
|
+
if (Build.VERSION.SDK_INT >= 30) Bitmap.CompressFormat.WEBP_LOSSY
|
|
110
|
+
else @Suppress("DEPRECATION") Bitmap.CompressFormat.WEBP
|
|
111
|
+
}
|
|
112
|
+
val ext = when (options.format) {
|
|
113
|
+
OneImageFormat.PNG -> "png"
|
|
114
|
+
OneImageFormat.JPEG -> "jpg"
|
|
115
|
+
OneImageFormat.WEBP -> "webp"
|
|
116
|
+
}
|
|
117
|
+
val output = File(folder, "${UUID.randomUUID()}.$ext")
|
|
98
118
|
try {
|
|
99
119
|
output.outputStream().use { stream ->
|
|
100
|
-
if (!image.compress(
|
|
120
|
+
if (!image.compress(compressFormat,
|
|
101
121
|
(quality * 100).roundToInt(), stream)) throw problem("ENCODE", "encoding failed")
|
|
102
122
|
}
|
|
103
123
|
} catch (error: Exception) { output.delete(); throw error }
|
|
@@ -7,12 +7,13 @@ import com.facebook.react.bridge.LifecycleEventListener
|
|
|
7
7
|
import com.margelo.nitro.NitroModules
|
|
8
8
|
import com.margelo.nitro.core.Promise
|
|
9
9
|
|
|
10
|
-
// screen-on
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
10
|
+
// screen-on locks keyed by expo activation tags: the screen stays awake
|
|
11
|
+
// while any tag is active. the desired state is held in memory, readable
|
|
12
|
+
// and writable with no activity present, applied to the current window when
|
|
13
|
+
// one exists, and re-applied on resume so activity recreation never
|
|
14
|
+
// silently drops it. no rejection path.
|
|
14
15
|
class HybridOneKeepAwake : HybridOneKeepAwakeSpec(), LifecycleEventListener {
|
|
15
|
-
|
|
16
|
+
private val tags = mutableSetOf<String>()
|
|
16
17
|
private val mainHandler = Handler(Looper.getMainLooper())
|
|
17
18
|
|
|
18
19
|
init {
|
|
@@ -26,22 +27,42 @@ class HybridOneKeepAwake : HybridOneKeepAwakeSpec(), LifecycleEventListener {
|
|
|
26
27
|
|
|
27
28
|
override fun isEnabled(): Promise<Boolean> {
|
|
28
29
|
val promise = Promise<Boolean>()
|
|
29
|
-
mainHandler.post { promise.resolve(
|
|
30
|
+
mainHandler.post { promise.resolve(tags.isNotEmpty()) }
|
|
30
31
|
return promise
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
override fun setEnabled(enabled: Boolean): Promise<Unit> {
|
|
34
35
|
val promise = Promise<Unit>()
|
|
35
36
|
mainHandler.post {
|
|
36
|
-
|
|
37
|
-
apply(
|
|
37
|
+
if (enabled) tags.add(DEFAULT_TAG) else tags.remove(DEFAULT_TAG)
|
|
38
|
+
apply(tags.isNotEmpty())
|
|
39
|
+
promise.resolve(Unit)
|
|
40
|
+
}
|
|
41
|
+
return promise
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override fun activate(tag: String): Promise<Unit> {
|
|
45
|
+
val promise = Promise<Unit>()
|
|
46
|
+
mainHandler.post {
|
|
47
|
+
tags.add(tag)
|
|
48
|
+
apply(true)
|
|
49
|
+
promise.resolve(Unit)
|
|
50
|
+
}
|
|
51
|
+
return promise
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
override fun deactivate(tag: String): Promise<Unit> {
|
|
55
|
+
val promise = Promise<Unit>()
|
|
56
|
+
mainHandler.post {
|
|
57
|
+
tags.remove(tag)
|
|
58
|
+
apply(tags.isNotEmpty())
|
|
38
59
|
promise.resolve(Unit)
|
|
39
60
|
}
|
|
40
61
|
return promise
|
|
41
62
|
}
|
|
42
63
|
|
|
43
64
|
override fun onHostResume() {
|
|
44
|
-
apply(
|
|
65
|
+
apply(tags.isNotEmpty())
|
|
45
66
|
}
|
|
46
67
|
|
|
47
68
|
override fun onHostPause() {}
|
|
@@ -56,4 +77,8 @@ class HybridOneKeepAwake : HybridOneKeepAwakeSpec(), LifecycleEventListener {
|
|
|
56
77
|
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
|
57
78
|
}
|
|
58
79
|
}
|
|
80
|
+
|
|
81
|
+
companion object {
|
|
82
|
+
private const val DEFAULT_TAG = "ExpoKeepAwakeDefaultTag"
|
|
83
|
+
}
|
|
59
84
|
}
|