@react-native-firebase/app 26.4.0 → 27.1.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.
Files changed (242) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +10 -27
  3. package/RNFBApp.podspec +13 -5
  4. package/android/build.gradle +3 -0
  5. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.kt +29 -0
  6. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.kt +146 -0
  7. package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.kt +156 -0
  8. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.kt +44 -0
  9. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.kt +100 -0
  10. package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.kt +250 -0
  11. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.kt +64 -0
  12. package/android/src/reactnative/java/io/invertase/firebase/app/{ReactNativeFirebaseAppInitProvider.java → ReactNativeFirebaseAppInitProvider.kt} +3 -4
  13. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.kt +47 -0
  14. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.kt +33 -0
  15. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseVersion.java +1 -1
  16. package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.kt +185 -0
  17. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.kt +35 -0
  18. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.kt +662 -0
  19. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.kt +103 -0
  20. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.kt +96 -0
  21. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.kt +140 -0
  22. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.kt +109 -0
  23. package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.kt +451 -0
  24. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{ContextProvider.java → ContextProvider.kt} +8 -8
  25. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeError.java → NativeError.kt} +8 -8
  26. package/android/src/reactnative/java/io/invertase/firebase/interfaces/{NativeEvent.java → NativeEvent.kt} +6 -6
  27. package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.kt +219 -0
  28. package/android/src/test/java/expo/core/ModuleRegistry.java +9 -0
  29. package/android/src/test/java/io/invertase/firebase/app/NativeRNFBTurboAppTest.java +182 -59
  30. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppComponentsJavaCompatibilityTest.java +70 -0
  31. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppJavaCompatibilityTest.java +60 -0
  32. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackageTest.java +165 -0
  33. package/android/src/test/java/io/invertase/firebase/app/ReactNativeFirebaseAppTest.kt +167 -0
  34. package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseJavaCompatibilityTest.java +112 -0
  35. package/android/src/test/java/io/invertase/firebase/common/RCTConvertFirebaseTest.kt +317 -0
  36. package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.kt +309 -0
  37. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterJavaCompatibilityTest.java +176 -0
  38. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitterTest.java +143 -12
  39. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseEventTest.kt +61 -0
  40. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONJavaCompatibilityTest.java +85 -0
  41. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.kt +296 -0
  42. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaJavaCompatibilityTest.java +67 -0
  43. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseMetaTest.kt +246 -0
  44. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseModuleTest.kt +254 -0
  45. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesJavaCompatibilityTest.java +87 -0
  46. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebasePreferencesTest.kt +260 -0
  47. package/android/src/test/java/io/invertase/firebase/common/SharedUtilsJavaCompatibilityTest.java +255 -0
  48. package/android/src/test/java/io/invertase/firebase/common/SharedUtilsTest.kt +674 -0
  49. package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.kt +290 -0
  50. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebaseModuleJavaCompatibilityTest.java +178 -0
  51. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesJavaCompatibilityTest.java +99 -0
  52. package/android/src/test/java/io/invertase/firebase/common/UniversalFirebasePreferencesTest.kt +217 -0
  53. package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleJavaCompatibilityTest.java +176 -0
  54. package/android/src/test/java/io/invertase/firebase/commoncompat/ReactNativeFirebaseModuleKotlinCompatibilityTest.kt +52 -0
  55. package/android/src/test/java/io/invertase/firebase/interfaces/InterfacesJavaCompatibilityTest.java +144 -0
  56. package/android/src/test/java/io/invertase/firebase/interfaces/NativeEventTest.kt +56 -0
  57. package/android/src/test/java/io/invertase/firebase/utils/NativeRNFBTurboUtilsTest.java +517 -21
  58. package/dist/module/FirebaseApp.js +10 -0
  59. package/dist/module/FirebaseApp.js.map +1 -1
  60. package/dist/module/common/deeps.js +3 -0
  61. package/dist/module/common/deeps.js.map +1 -1
  62. package/dist/module/internal/FirebaseModule.js.map +1 -1
  63. package/dist/module/internal/RNFBNativeEventEmitter.js +12 -1
  64. package/dist/module/internal/RNFBNativeEventEmitter.js.map +1 -1
  65. package/dist/module/internal/SharedEventEmitter.js +3 -1
  66. package/dist/module/internal/SharedEventEmitter.js.map +1 -1
  67. package/dist/module/internal/index.js +1 -0
  68. package/dist/module/internal/index.js.map +1 -1
  69. package/dist/module/internal/registry/app.js +7 -1
  70. package/dist/module/internal/registry/app.js.map +1 -1
  71. package/dist/module/types/app.js.map +1 -1
  72. package/dist/module/types/internal.js +2 -0
  73. package/dist/module/version.js +1 -1
  74. package/dist/typescript/lib/FirebaseApp.d.ts +7 -0
  75. package/dist/typescript/lib/FirebaseApp.d.ts.map +1 -1
  76. package/dist/typescript/lib/common/deeps.d.ts.map +1 -1
  77. package/dist/typescript/lib/internal/FirebaseModule.d.ts +2 -3
  78. package/dist/typescript/lib/internal/FirebaseModule.d.ts.map +1 -1
  79. package/dist/typescript/lib/internal/NativeModules.d.ts +4 -1
  80. package/dist/typescript/lib/internal/NativeModules.d.ts.map +1 -1
  81. package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts +2 -2
  82. package/dist/typescript/lib/internal/RNFBNativeEventEmitter.d.ts.map +1 -1
  83. package/dist/typescript/lib/internal/SharedEventEmitter.d.ts +3 -3
  84. package/dist/typescript/lib/internal/SharedEventEmitter.d.ts.map +1 -1
  85. package/dist/typescript/lib/internal/index.d.ts +1 -0
  86. package/dist/typescript/lib/internal/index.d.ts.map +1 -1
  87. package/dist/typescript/lib/internal/registry/app.d.ts.map +1 -1
  88. package/dist/typescript/lib/types/app.d.ts +10 -3
  89. package/dist/typescript/lib/types/app.d.ts.map +1 -1
  90. package/dist/typescript/lib/types/internal.d.ts +12 -0
  91. package/dist/typescript/lib/types/internal.d.ts.map +1 -1
  92. package/dist/typescript/lib/version.d.ts +1 -1
  93. package/firebase-schema.json +4 -0
  94. package/firebase_spm.rb +552 -96
  95. package/ios/RNFBApp/RCTConvert+FIRApp.h +2 -5
  96. package/ios/RNFBApp/RCTConvert+FIRApp.m +11 -6
  97. package/ios/RNFBApp/RCTConvert+FIROptions.h +2 -5
  98. package/ios/RNFBApp/RCTConvert+FIROptions.m +11 -10
  99. package/ios/RNFBApp/RCTConvertFIRApp.swift +86 -0
  100. package/ios/RNFBApp/RCTConvertFIROptions.swift +259 -0
  101. package/ios/RNFBApp/RNFBAppCustomAuthDomains.swift +63 -0
  102. package/ios/RNFBApp/RNFBAppInitializeOptionsMapper.swift +113 -0
  103. package/ios/RNFBApp/RNFBAppLogLevelMapper.swift +53 -0
  104. package/ios/RNFBApp/RNFBAppModule+CustomAuthDomain.m +35 -0
  105. package/ios/RNFBApp/RNFBAppModule.h +6 -2
  106. package/ios/RNFBApp/RNFBAppModule.mm +65 -228
  107. package/ios/RNFBApp/RNFBAppModuleFirebase.swift +439 -0
  108. package/ios/RNFBApp/RNFBAppModuleImplementation.h +68 -0
  109. package/ios/RNFBApp/RNFBAppModuleImplementation.m +195 -0
  110. package/ios/RNFBApp/RNFBHandleMap.m +27 -56
  111. package/ios/RNFBApp/RNFBHandleMapStorage.swift +90 -0
  112. package/ios/RNFBApp/RNFBInitializeAppArguments.swift +82 -0
  113. package/ios/RNFBApp/RNFBJSON.m +22 -38
  114. package/ios/RNFBApp/RNFBJSONImplementation.swift +71 -0
  115. package/ios/RNFBApp/RNFBMeta.m +24 -26
  116. package/ios/RNFBApp/RNFBMetaStorage.swift +76 -0
  117. package/ios/RNFBApp/RNFBNullSentinelDecoding.swift +135 -0
  118. package/ios/RNFBApp/RNFBNullSentinelInterceptor.h +30 -3
  119. package/ios/RNFBApp/RNFBNullSentinelInterceptor.m +28 -5
  120. package/ios/RNFBApp/RNFBPreferences.m +22 -20
  121. package/ios/RNFBApp/RNFBPreferencesStorage.swift +101 -0
  122. package/ios/RNFBApp/RNFBRCTEventEmitter.m +36 -93
  123. package/ios/RNFBApp/RNFBRCTEventEmitterCore.swift +161 -0
  124. package/ios/RNFBApp/RNFBSharedUtils.h +2 -5
  125. package/ios/RNFBApp/RNFBSharedUtils.m +109 -198
  126. package/ios/RNFBApp/RNFBSharedUtilsConfig.swift +72 -0
  127. package/ios/RNFBApp/RNFBSharedUtilsFIRApp.swift +271 -0
  128. package/ios/RNFBApp/RNFBSharedUtilsFormatting.swift +59 -0
  129. package/ios/RNFBApp/RNFBSharedUtilsPromiseRejection.swift +88 -0
  130. package/ios/RNFBApp/RNFBUtilsHelpers.swift +116 -0
  131. package/ios/RNFBApp/RNFBUtilsModule+Foundation.m +44 -0
  132. package/ios/RNFBApp/RNFBUtilsModule+PhotoAssets.m +47 -0
  133. package/ios/RNFBApp/RNFBUtilsModule.h +11 -1
  134. package/ios/RNFBApp/RNFBUtilsModule.mm +10 -85
  135. package/ios/RNFBApp/RNFBUtilsModuleImplementation.h +32 -0
  136. package/ios/RNFBApp/RNFBUtilsModuleImplementation.m +56 -0
  137. package/ios/RNFBApp/RNFBVersion.m +1 -1
  138. package/ios/RNFBApp.xcodeproj/project.pbxproj +100 -0
  139. package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FIRApp.m +171 -0
  140. package/ios/RNFBAppUnitTests/HostStubs/FirebaseCore/FirebaseCore.h +78 -0
  141. package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FIRInstallations.m +7 -0
  142. package/ios/RNFBAppUnitTests/HostStubs/FirebaseInstallations/FirebaseInstallations.h +8 -0
  143. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppModuleHostStub.m +55 -0
  144. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.h +89 -0
  145. package/ios/RNFBAppUnitTests/HostStubs/RNFBAppTurboModules.mm +30 -0
  146. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.h +19 -0
  147. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridge.m +32 -0
  148. package/ios/RNFBAppUnitTests/HostStubs/React/RCTBridgeModule.h +19 -0
  149. package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.h +28 -0
  150. package/ios/RNFBAppUnitTests/HostStubs/React/RCTConvert.m +23 -0
  151. package/ios/RNFBAppUnitTests/HostStubs/React/RCTEventEmitter.h +9 -0
  152. package/ios/RNFBAppUnitTests/HostStubs/React/RCTInvalidating.h +24 -0
  153. package/ios/RNFBAppUnitTests/HostStubs/React/RCTUtils.h +9 -0
  154. package/ios/RNFBAppUnitTests/HostStubs/module.modulemap +13 -0
  155. package/ios/RNFBAppUnitTests/RCTConvertFIRAppFacadeTests.m +61 -0
  156. package/ios/RNFBAppUnitTests/RCTConvertFIRAppTests.swift +73 -0
  157. package/ios/RNFBAppUnitTests/RCTConvertFIROptionsFacadeTests.m +57 -0
  158. package/ios/RNFBAppUnitTests/RCTConvertFIROptionsTests.swift +243 -0
  159. package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsFacadeTests.m +73 -0
  160. package/ios/RNFBAppUnitTests/RNFBAppCustomAuthDomainsTests.swift +70 -0
  161. package/ios/RNFBAppUnitTests/RNFBAppInitializeOptionsMapperTests.swift +190 -0
  162. package/ios/RNFBAppUnitTests/RNFBAppLogLevelFacadeTests.m +76 -0
  163. package/ios/RNFBAppUnitTests/RNFBAppLogLevelMapperTests.swift +59 -0
  164. package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseFacadeTests.m +215 -0
  165. package/ios/RNFBAppUnitTests/RNFBAppModuleFirebaseTests.swift +430 -0
  166. package/ios/RNFBAppUnitTests/RNFBAppModuleLifecycleTests.m +206 -0
  167. package/ios/RNFBAppUnitTests/RNFBAppModuleShellTests.mm +367 -0
  168. package/ios/RNFBAppUnitTests/RNFBAppUnitTests.xcodeproj/project.pbxproj +355 -2
  169. package/ios/RNFBAppUnitTests/RNFBFirebaseAppClientTests.swift +165 -0
  170. package/ios/RNFBAppUnitTests/RNFBHandleMapStorageTests.swift +121 -0
  171. package/ios/RNFBAppUnitTests/RNFBInitializeAppArgumentsTests.swift +256 -0
  172. package/ios/RNFBAppUnitTests/RNFBJSONImplementationTests.swift +126 -0
  173. package/ios/RNFBAppUnitTests/RNFBJSONTests.m +172 -0
  174. package/ios/RNFBAppUnitTests/RNFBMetaStorageTests.swift +106 -0
  175. package/ios/RNFBAppUnitTests/RNFBMetaTests.m +65 -0
  176. package/ios/RNFBAppUnitTests/RNFBNullSentinelDecodingTests.swift +286 -0
  177. package/ios/RNFBAppUnitTests/RNFBNullSentinelInterceptorTests.m +312 -0
  178. package/ios/RNFBAppUnitTests/RNFBPreferencesStorageTests.swift +105 -0
  179. package/ios/RNFBAppUnitTests/RNFBPreferencesTests.m +110 -0
  180. package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterCoreTests.swift +163 -0
  181. package/ios/RNFBAppUnitTests/RNFBRCTEventEmitterFacadeTests.m +141 -0
  182. package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigFacadeTests.m +100 -0
  183. package/ios/RNFBAppUnitTests/RNFBSharedUtilsConfigTests.swift +234 -0
  184. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppFacadeTests.m +145 -0
  185. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFIRAppTests.swift +173 -0
  186. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingFacadeTests.m +38 -0
  187. package/ios/RNFBAppUnitTests/RNFBSharedUtilsFormattingTests.swift +82 -0
  188. package/ios/RNFBAppUnitTests/RNFBSharedUtilsNullSentinelTests.m +35 -0
  189. package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionFacadeTests.m +107 -0
  190. package/ios/RNFBAppUnitTests/RNFBSharedUtilsPromiseRejectionTests.swift +133 -0
  191. package/ios/RNFBAppUnitTests/RNFBUtilsHelpersTests.swift +144 -0
  192. package/ios/RNFBAppUnitTests/RNFBUtilsModuleFacadeTests.m +72 -0
  193. package/ios/RNFBAppUnitTests/RNFBUtilsModuleShellTests.mm +282 -0
  194. package/ios/RNFBFirebase/Package.swift +53 -0
  195. package/ios/RNFBFirebase/Sources/RNFBFirebase/RNFBFirebase.swift +285 -0
  196. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/Public/.gitkeep +0 -0
  197. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/RNFBFirebaseBridge.m +169 -0
  198. package/ios/RNFBFirebase/Sources/RNFBFirebaseBridge/include/RNFBFirebaseBridge.h +52 -0
  199. package/ios/RNFBFirebaseUnitTests/RNFBAppDynamicFacadeTests.swift +240 -0
  200. package/{android/src/main/java/io/invertase/firebase/common/RNFBHandleCollisionException.java → ios/RNFBFirebaseUnitTests/RNFBFirebaseClientImport.swift} +23 -14
  201. package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/project.pbxproj +588 -0
  202. package/ios/RNFBFirebaseUnitTests/RNFBFirebaseUnitTests.xcodeproj/xcshareddata/xcschemes/RNFBFirebaseUnitTests.xcscheme +83 -0
  203. package/ios_config.sh +50 -22
  204. package/lib/FirebaseApp.ts +10 -0
  205. package/lib/common/deeps.ts +3 -0
  206. package/lib/internal/FirebaseModule.ts +6 -3
  207. package/lib/internal/NativeModules.ts +4 -1
  208. package/lib/internal/RNFBNativeEventEmitter.ts +14 -5
  209. package/lib/internal/SharedEventEmitter.ts +5 -1
  210. package/lib/internal/index.ts +1 -0
  211. package/lib/internal/react-native-vendor-emitter.d.ts +11 -0
  212. package/lib/internal/registry/app.ts +7 -1
  213. package/lib/types/app.ts +10 -3
  214. package/lib/types/internal.ts +19 -0
  215. package/lib/version.ts +1 -1
  216. package/package.json +8 -8
  217. package/plugin/build/ios/appDelegate.js +2 -2
  218. package/plugin/build/ios/podfile.js +16 -16
  219. package/plugin/build/pluginConfig.d.ts +4 -2
  220. package/plugin/src/ios/appDelegate.ts +2 -2
  221. package/plugin/src/ios/podfile.ts +20 -23
  222. package/plugin/src/pluginConfig.ts +4 -2
  223. package/android/src/main/java/io/invertase/firebase/common/RNFBHandleMap.java +0 -150
  224. package/android/src/main/java/io/invertase/firebase/common/TaskExecutorService.java +0 -148
  225. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebaseModule.java +0 -62
  226. package/android/src/main/java/io/invertase/firebase/common/UniversalFirebasePreferences.java +0 -91
  227. package/android/src/reactnative/java/io/invertase/firebase/app/NativeRNFBTurboApp.java +0 -224
  228. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseApp.java +0 -46
  229. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppPackage.java +0 -49
  230. package/android/src/reactnative/java/io/invertase/firebase/app/ReactNativeFirebaseAppRegistrar.java +0 -35
  231. package/android/src/reactnative/java/io/invertase/firebase/common/RCTConvertFirebase.java +0 -192
  232. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEvent.java +0 -53
  233. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseEventEmitter.java +0 -606
  234. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseJSON.java +0 -109
  235. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseMeta.java +0 -101
  236. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebaseModule.java +0 -146
  237. package/android/src/reactnative/java/io/invertase/firebase/common/ReactNativeFirebasePreferences.java +0 -96
  238. package/android/src/reactnative/java/io/invertase/firebase/common/SharedUtils.java +0 -441
  239. package/android/src/reactnative/java/io/invertase/firebase/utils/NativeRNFBTurboUtils.java +0 -223
  240. package/android/src/test/java/io/invertase/firebase/common/RNFBHandleMapTest.java +0 -275
  241. package/android/src/test/java/io/invertase/firebase/common/ReactNativeFirebaseJSONTest.java +0 -108
  242. package/android/src/test/java/io/invertase/firebase/common/TaskExecutorServiceTest.java +0 -97
@@ -1,441 +0,0 @@
1
- package io.invertase.firebase.common;
2
-
3
- /*
4
- * Copyright (c) 2016-present Invertase Limited & Contributors
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this library except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- *
18
- */
19
-
20
- import android.annotation.SuppressLint;
21
- import android.app.ActivityManager;
22
- import android.content.Context;
23
- import android.graphics.Point;
24
- import android.graphics.Rect;
25
- import android.net.Uri;
26
- import android.os.Build;
27
- import android.util.Log;
28
- import com.facebook.react.bridge.*;
29
- import com.facebook.react.common.LifecycleState;
30
- import com.facebook.react.modules.core.DeviceEventManagerModule;
31
- import java.io.File;
32
- import java.text.SimpleDateFormat;
33
- import java.util.*;
34
- import javax.annotation.Nullable;
35
- import org.json.JSONArray;
36
- import org.json.JSONException;
37
- import org.json.JSONObject;
38
-
39
- @SuppressWarnings({"unused", "JavaDoc", "WeakerAccess"})
40
- public class SharedUtils {
41
- private static final String TAG = "Utils";
42
- private static final String RN_DEVSUPPORT_CLASS = "DevSupportManagerImpl";
43
- private static final String RN_DEVSUPPORT_PACKAGE = "com.facebook.react.devsupport";
44
-
45
- private static final String EXPO_REGISTRY_CLASS = "ModuleRegistry";
46
- private static final String EXPO_CORE_PACKAGE = "expo.core";
47
-
48
- private static final String FLUTTER_REGISTRY_CLASS = "PluginRegistry";
49
- private static final String FLUTTER_CORE_PACKAGE = "io.flutter.plugin.common";
50
-
51
- private static final String REACT_NATIVE_REGISTRY_CLASS = "NativeModuleRegistry";
52
- private static final String REACT_NATIVE_CORE_PACKAGE = "com.facebook.react.bridge";
53
-
54
- public static int[] rectToIntArray(@Nullable Rect rect) {
55
- if (rect == null || rect.isEmpty()) return new int[] {};
56
- return new int[] {rect.left, rect.top, rect.right, rect.bottom};
57
- }
58
-
59
- public static int[] pointToIntArray(@Nullable Point point) {
60
- if (point == null) return new int[] {};
61
- return new int[] {point.x, point.y};
62
- }
63
-
64
- public static List<int[]> pointsToIntsList(@Nullable Point[] points) {
65
- if (points == null) return new ArrayList<>();
66
-
67
- List<int[]> pointsList = new ArrayList<>(points.length);
68
- for (Point point : points) {
69
- pointsList.add(pointToIntArray(point));
70
- }
71
-
72
- return pointsList;
73
- }
74
-
75
- /** Create a Uri from the path, defaulting to file when there is no supplied scheme */
76
- public static Uri getUri(String uri) {
77
- Uri parsed = Uri.parse(uri);
78
-
79
- if (parsed.getScheme() == null || parsed.getScheme().isEmpty()) {
80
- return Uri.fromFile(new File(uri));
81
- }
82
-
83
- return parsed;
84
- }
85
-
86
- public static WritableMap getExceptionMap(Exception exception) {
87
- WritableMap exceptionMap = Arguments.createMap();
88
- String code = "unknown";
89
- String message = exception.getMessage();
90
- exceptionMap.putString("code", code);
91
- exceptionMap.putString("nativeErrorCode", code);
92
- exceptionMap.putString("message", message);
93
- exceptionMap.putString("nativeErrorMessage", message);
94
- return exceptionMap;
95
- }
96
-
97
- public static String timestampToUTC(long timestamp) {
98
- long millisTimestamp = timestamp * 1000;
99
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ROOT);
100
- format.setTimeZone(TimeZone.getTimeZone("UTC"));
101
- return format.format(millisTimestamp);
102
- }
103
-
104
- /** send a JS event */
105
- public static void sendEvent(final ReactContext context, final String eventName, Object body) {
106
- if (context != null) {
107
- context
108
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
109
- .emit(eventName, body);
110
- } else {
111
- Log.d(TAG, "Missing context - cannot send event!");
112
- }
113
- }
114
-
115
- /**
116
- * We need to check if app is in foreground otherwise the app will crash.
117
- * http://stackoverflow.com/questions/8489993/check-android-application-is-in-foreground-or-not
118
- *
119
- * @param context Context
120
- * @return boolean
121
- */
122
- public static boolean isAppInForeground(Context context) {
123
- ActivityManager activityManager =
124
- (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
125
- if (activityManager == null) return false;
126
-
127
- List<ActivityManager.RunningAppProcessInfo> appProcesses =
128
- activityManager.getRunningAppProcesses();
129
- if (appProcesses == null) return false;
130
-
131
- // Check if current activity is a background activity
132
- ReactNativeFirebaseJSON json = ReactNativeFirebaseJSON.getSharedInstance();
133
- if (json.contains("android_background_activity_names")) {
134
- ArrayList<String> backgroundActivities =
135
- json.getArrayValue("android_background_activity_names");
136
-
137
- if (backgroundActivities.size() != 0) {
138
- String currentActivity = "";
139
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
140
- List<ActivityManager.AppTask> taskInfo = activityManager.getAppTasks();
141
- if (taskInfo.size() > 0) {
142
- ActivityManager.RecentTaskInfo task = taskInfo.get(0).getTaskInfo();
143
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
144
- currentActivity =
145
- task.baseActivity != null ? task.baseActivity.getShortClassName() : "";
146
- } else {
147
- currentActivity =
148
- task.origActivity != null
149
- ? task.origActivity.getShortClassName()
150
- : task.baseIntent.getComponent().getShortClassName();
151
- }
152
- }
153
- } else {
154
- List<ActivityManager.RunningTaskInfo> taskInfo = activityManager.getRunningTasks(1);
155
- if (taskInfo.size() > 0) {
156
- currentActivity = taskInfo.get(0).topActivity.getShortClassName();
157
- }
158
- }
159
-
160
- if (!"".equals(currentActivity) && backgroundActivities.contains(currentActivity)) {
161
- return false;
162
- }
163
- }
164
- }
165
-
166
- final String packageName = context.getPackageName();
167
- for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
168
- if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
169
- && appProcess.processName.equals(packageName)) {
170
- ReactContext reactContext;
171
-
172
- try {
173
- reactContext = (ReactContext) context;
174
- } catch (ClassCastException exception) {
175
- // Not react context so default to true
176
- return true;
177
- }
178
-
179
- return reactContext.getLifecycleState() == LifecycleState.RESUMED;
180
- }
181
- }
182
-
183
- return false;
184
- }
185
-
186
- @SuppressLint("DiscouragedApi")
187
- public static int getResId(Context ctx, String resName) {
188
- int resourceId = ctx.getResources().getIdentifier(resName, "string", ctx.getPackageName());
189
-
190
- if (resourceId == 0) {
191
- Log.e(TAG, "resource " + resName + " could not be found");
192
- }
193
-
194
- return resourceId;
195
- }
196
-
197
- /**
198
- * Checks for dev support availability - so we can ignore in release builds for example.
199
- *
200
- * @return Boolean
201
- */
202
- public static Boolean reactNativeHasDevSupport() {
203
- return hasPackageClass(RN_DEVSUPPORT_PACKAGE, RN_DEVSUPPORT_CLASS);
204
- }
205
-
206
- /**
207
- * Is the build platform Expo?
208
- *
209
- * @return Boolean
210
- */
211
- public static Boolean isExpo() {
212
- return hasPackageClass(EXPO_CORE_PACKAGE, EXPO_REGISTRY_CLASS);
213
- }
214
-
215
- /**
216
- * Is the build platform Flutter?
217
- *
218
- * @return Boolean
219
- */
220
- public static Boolean isFlutter() {
221
- return hasPackageClass(FLUTTER_CORE_PACKAGE, FLUTTER_REGISTRY_CLASS);
222
- }
223
-
224
- /**
225
- * Is the build platform React Native?
226
- *
227
- * @return Boolean
228
- */
229
- public static Boolean isReactNative() {
230
- return !isExpo() && hasPackageClass(REACT_NATIVE_CORE_PACKAGE, REACT_NATIVE_REGISTRY_CLASS);
231
- }
232
-
233
- /**
234
- * Returns true/false if a class for a package exists in the app class bundle
235
- *
236
- * @param packageName
237
- * @param className
238
- * @return
239
- */
240
- @SuppressWarnings("StringBufferReplaceableByString")
241
- public static Boolean hasPackageClass(String packageName, String className) {
242
- // ProGuard is surprisingly smart in this case and will keep a class if it detects a call to
243
- // Class.forName() with a static string. So instead we generate a quasi-dynamic string to
244
- // confuse it.
245
- String fullName = new StringBuilder(packageName).append(".").append(className).toString();
246
-
247
- try {
248
- Class.forName(fullName);
249
- return true;
250
- } catch (Exception e) {
251
- return false;
252
- }
253
- }
254
-
255
- public static WritableMap jsonObjectToWritableMap(JSONObject jsonObject) throws JSONException {
256
- Iterator<String> iterator = jsonObject.keys();
257
- WritableMap writableMap = Arguments.createMap();
258
-
259
- while (iterator.hasNext()) {
260
- String key = iterator.next();
261
- Object value = jsonObject.get(key);
262
- if (value instanceof Float || value instanceof Double) {
263
- writableMap.putDouble(key, jsonObject.getDouble(key));
264
- } else if (value instanceof Number) {
265
- writableMap.putInt(key, jsonObject.getInt(key));
266
- } else if (value instanceof String) {
267
- writableMap.putString(key, jsonObject.getString(key));
268
- } else if (value instanceof JSONObject) {
269
- writableMap.putMap(key, jsonObjectToWritableMap(jsonObject.getJSONObject(key)));
270
- } else if (value instanceof JSONArray) {
271
- writableMap.putArray(key, jsonArrayToWritableArray(jsonObject.getJSONArray(key)));
272
- } else if (value == JSONObject.NULL) {
273
- writableMap.putNull(key);
274
- }
275
- }
276
-
277
- return writableMap;
278
- }
279
-
280
- public static WritableArray jsonArrayToWritableArray(JSONArray jsonArray) throws JSONException {
281
- WritableArray writableArray = Arguments.createArray();
282
-
283
- for (int i = 0; i < jsonArray.length(); i++) {
284
- Object value = jsonArray.get(i);
285
- if (value instanceof Float || value instanceof Double) {
286
- writableArray.pushDouble(jsonArray.getDouble(i));
287
- } else if (value instanceof Number) {
288
- writableArray.pushInt(jsonArray.getInt(i));
289
- } else if (value instanceof String) {
290
- writableArray.pushString(jsonArray.getString(i));
291
- } else if (value instanceof JSONObject) {
292
- writableArray.pushMap(jsonObjectToWritableMap(jsonArray.getJSONObject(i)));
293
- } else if (value instanceof JSONArray) {
294
- writableArray.pushArray(jsonArrayToWritableArray(jsonArray.getJSONArray(i)));
295
- } else if (value == JSONObject.NULL) {
296
- writableArray.pushNull();
297
- }
298
- }
299
- return writableArray;
300
- }
301
-
302
- public static WritableMap mapToWritableMap(Map<String, Object> value) {
303
- WritableMap writableMap = Arguments.createMap();
304
-
305
- for (Map.Entry<String, Object> entry : value.entrySet()) {
306
- mapPutValue(entry.getKey(), entry.getValue(), writableMap);
307
- }
308
-
309
- return writableMap;
310
- }
311
-
312
- private static WritableArray listToWritableArray(List<Object> objects) {
313
- WritableArray writableArray = Arguments.createArray();
314
- for (Object object : objects) {
315
- arrayPushValue(object, writableArray);
316
- }
317
- return writableArray;
318
- }
319
-
320
- @SuppressWarnings("unchecked")
321
- public static void arrayPushValue(@Nullable Object value, WritableArray array) {
322
- if (value == null || value == JSONObject.NULL) {
323
- array.pushNull();
324
- return;
325
- }
326
-
327
- String type = value.getClass().getName();
328
- switch (type) {
329
- case "java.lang.Boolean":
330
- array.pushBoolean((Boolean) value);
331
- break;
332
- case "java.lang.Long":
333
- Long longVal = (Long) value;
334
- array.pushDouble((double) longVal);
335
- break;
336
- case "java.lang.Float":
337
- float floatVal = (float) value;
338
- array.pushDouble((double) floatVal);
339
- break;
340
- case "java.lang.Double":
341
- array.pushDouble((double) value);
342
- break;
343
- case "java.lang.Integer":
344
- array.pushInt((int) value);
345
- break;
346
- case "java.lang.String":
347
- array.pushString((String) value);
348
- break;
349
- case "org.json.JSONObject$1":
350
- try {
351
- array.pushMap(jsonObjectToWritableMap((JSONObject) value));
352
- } catch (JSONException e) {
353
- array.pushNull();
354
- }
355
- break;
356
- case "org.json.JSONArray$1":
357
- try {
358
- array.pushArray(jsonArrayToWritableArray((JSONArray) value));
359
- } catch (JSONException e) {
360
- array.pushNull();
361
- }
362
- break;
363
- default:
364
- if (List.class.isAssignableFrom(value.getClass())) {
365
- array.pushArray(listToWritableArray((List<Object>) value));
366
- } else if (Map.class.isAssignableFrom(value.getClass())) {
367
- array.pushMap(mapToWritableMap((Map<String, Object>) value));
368
- } else {
369
- Log.d(TAG, "utils:arrayPushValue:unknownType:" + type);
370
- array.pushNull();
371
- }
372
- }
373
- }
374
-
375
- @SuppressWarnings("unchecked")
376
- public static void mapPutValue(String key, @Nullable Object value, WritableMap map) {
377
- if (value == null || value == JSONObject.NULL) {
378
- map.putNull(key);
379
- return;
380
- }
381
-
382
- String type = value.getClass().getName();
383
- switch (type) {
384
- case "java.lang.Boolean":
385
- map.putBoolean(key, (Boolean) value);
386
- break;
387
- case "java.lang.Long":
388
- Long longVal = (Long) value;
389
- map.putDouble(key, (double) longVal);
390
- break;
391
- case "java.lang.Float":
392
- float floatVal = (float) value;
393
- map.putDouble(key, (double) floatVal);
394
- break;
395
- case "java.lang.Double":
396
- map.putDouble(key, (double) value);
397
- break;
398
- case "java.lang.Integer":
399
- map.putInt(key, (int) value);
400
- break;
401
- case "java.lang.String":
402
- map.putString(key, (String) value);
403
- break;
404
- case "org.json.JSONObject$1":
405
- try {
406
- map.putMap(key, jsonObjectToWritableMap((JSONObject) value));
407
- } catch (JSONException e) {
408
- map.putNull(key);
409
- }
410
- break;
411
- case "org.json.JSONArray$1":
412
- try {
413
- map.putArray(key, jsonArrayToWritableArray((JSONArray) value));
414
- } catch (JSONException e) {
415
- map.putNull(key);
416
- }
417
- break;
418
- default:
419
- if (List.class.isAssignableFrom(value.getClass())) {
420
- map.putArray(key, listToWritableArray((List<Object>) value));
421
- } else if (Map.class.isAssignableFrom(value.getClass())) {
422
- map.putMap(key, mapToWritableMap((Map<String, Object>) value));
423
- } else {
424
- Log.d(TAG, "utils:mapPutValue:unknownType:" + type);
425
- map.putNull(key);
426
- }
427
- }
428
- }
429
-
430
- /**
431
- * Convert a ReadableMap to a WritableMap for the purposes of re-sending back to JS
432
- *
433
- * @param map ReadableMap
434
- * @return WritableMap
435
- */
436
- public static WritableMap readableMapToWritableMap(ReadableMap map) {
437
- WritableMap writableMap = Arguments.createMap();
438
- writableMap.merge(map);
439
- return writableMap;
440
- }
441
- }
@@ -1,223 +0,0 @@
1
- package io.invertase.firebase.utils;
2
-
3
- /*
4
- * Copyright (c) 2016-present Invertase Limited & Contributors
5
- *
6
- * Licensed under the Apache License, Version 2.0 (the "License");
7
- * you may not use this library except in compliance with the License.
8
- * You may obtain a copy of the License at
9
- *
10
- * http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing, software
13
- * distributed under the License is distributed on an "AS IS" BASIS,
14
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- * See the License for the specific language governing permissions and
16
- * limitations under the License.
17
- *
18
- */
19
-
20
- import android.app.Activity;
21
- import android.content.Context;
22
- import android.content.IntentSender;
23
- import android.os.Build;
24
- import android.os.Environment;
25
- import android.provider.Settings;
26
- import android.util.Log;
27
- import com.facebook.fbreact.specs.NativeRNFBTurboUtilsSpec;
28
- import com.facebook.react.bridge.Arguments;
29
- import com.facebook.react.bridge.Promise;
30
- import com.facebook.react.bridge.ReactApplicationContext;
31
- import com.facebook.react.bridge.UiThreadUtil;
32
- import com.facebook.react.bridge.WritableMap;
33
- import com.google.android.gms.common.ConnectionResult;
34
- import com.google.android.gms.common.GoogleApiAvailability;
35
- import io.invertase.firebase.app.ReactNativeFirebaseApp;
36
- import java.io.File;
37
- import java.util.HashMap;
38
- import java.util.Map;
39
-
40
- public class NativeRNFBTurboUtils extends NativeRNFBTurboUtilsSpec {
41
- private static final String TAG = "Utils";
42
- private static final String KEY_MAIN_BUNDLE = "MAIN_BUNDLE";
43
- private static final String KEY_DOCUMENT_DIRECTORY = "DOCUMENT_DIRECTORY";
44
- private static final String KEY_LIBRARY_DIRECTORY = "LIBRARY_DIRECTORY";
45
- private static final String KEY_EXTERNAL_DIRECTORY = "EXTERNAL_DIRECTORY";
46
- private static final String KEY_EXT_STORAGE_DIRECTORY = "EXTERNAL_STORAGE_DIRECTORY";
47
- private static final String KEY_PICS_DIRECTORY = "PICTURES_DIRECTORY";
48
- private static final String KEY_MOVIES_DIRECTORY = "MOVIES_DIRECTORY";
49
- private static final String KEY_TEMP_DIRECTORY = "TEMP_DIRECTORY";
50
- private static final String KEY_CACHE_DIRECTORY = "CACHES_DIRECTORY";
51
- private static final String FIREBASE_TEST_LAB = "firebase.test.lab";
52
-
53
- public NativeRNFBTurboUtils(ReactApplicationContext reactContext) {
54
- super(reactContext);
55
- }
56
-
57
- private static Boolean isRunningInTestLab() {
58
- String testLabSetting =
59
- Settings.System.getString(
60
- ReactNativeFirebaseApp.getApplicationContext().getContentResolver(), FIREBASE_TEST_LAB);
61
-
62
- return "true".equals(testLabSetting);
63
- }
64
-
65
- @Override
66
- public void androidGetPlayServicesStatus(Promise promise) {
67
- promise.resolve(getPlayServicesStatusMap());
68
- }
69
-
70
- @Override
71
- public void androidPromptForPlayServices(Promise promise) {
72
- int status = isGooglePlayServicesAvailable();
73
- GoogleApiAvailability gapi = GoogleApiAvailability.getInstance();
74
-
75
- if (status != ConnectionResult.SUCCESS && gapi.isUserResolvableError(status)) {
76
- Activity activity = getCurrentActivity();
77
- if (activity != null) {
78
- gapi.getErrorDialog(activity, status, status).show();
79
- }
80
- }
81
- promise.resolve(null);
82
- }
83
-
84
- @Override
85
- public void androidResolutionForPlayServices(Promise promise) {
86
- int status = isGooglePlayServicesAvailable();
87
- ConnectionResult connectionResult = new ConnectionResult(status);
88
-
89
- if (!connectionResult.isSuccess() && connectionResult.hasResolution()) {
90
- Activity activity = getCurrentActivity();
91
- if (activity != null) {
92
- try {
93
- connectionResult.startResolutionForResult(activity, status);
94
- } catch (IntentSender.SendIntentException error) {
95
- Log.d(TAG, "resolutionForPlayServices", error);
96
- }
97
- }
98
- }
99
- promise.resolve(null);
100
- }
101
-
102
- @Override
103
- public void androidMakePlayServicesAvailable(Promise promise) {
104
- int status = isGooglePlayServicesAvailable();
105
-
106
- if (status != ConnectionResult.SUCCESS) {
107
- UiThreadUtil.runOnUiThread(
108
- () -> {
109
- Activity activity = getCurrentActivity();
110
- if (activity != null) {
111
- GoogleApiAvailability.getInstance()
112
- .makeGooglePlayServicesAvailable(activity)
113
- .addOnCompleteListener(
114
- task -> {
115
- if (task.isSuccessful()) {
116
- promise.resolve(null);
117
- } else if (task.isCanceled()) {
118
- promise.reject(
119
- "play-services-update-canceled",
120
- "Play Services update was canceled by the user");
121
- } else {
122
- Exception e = task.getException();
123
- promise.reject(
124
- "play-services-update-failed",
125
- e != null ? e.getMessage() : "Unknown error",
126
- e);
127
- }
128
- });
129
- } else {
130
- promise.resolve(null);
131
- }
132
- });
133
- } else {
134
- promise.resolve(null);
135
- }
136
- }
137
-
138
- private static String getAppVersionName(Context context) {
139
- try {
140
- return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
141
- } catch (Exception error) {
142
- // Optional metadata: prefer omit over crashing on null context / unexpected PM failures.
143
- Log.d(TAG, "getAppVersionName", error);
144
- return null;
145
- }
146
- }
147
-
148
- private int isGooglePlayServicesAvailable() {
149
- GoogleApiAvailability gapi = GoogleApiAvailability.getInstance();
150
- return gapi.isGooglePlayServicesAvailable(getReactApplicationContext());
151
- }
152
-
153
- private WritableMap getPlayServicesStatusMap() {
154
- WritableMap result = Arguments.createMap();
155
- GoogleApiAvailability gapi = GoogleApiAvailability.getInstance();
156
-
157
- int status = gapi.isGooglePlayServicesAvailable(getReactApplicationContext());
158
- result.putInt("status", status);
159
-
160
- if (status == ConnectionResult.SUCCESS) {
161
- result.putBoolean("isAvailable", true);
162
- } else {
163
- result.putBoolean("isAvailable", false);
164
- result.putString("error", gapi.getErrorString(status));
165
- result.putBoolean("isUserResolvableError", gapi.isUserResolvableError(status));
166
- result.putBoolean("hasResolution", new ConnectionResult(status).hasResolution());
167
- }
168
-
169
- return result;
170
- }
171
-
172
- @Override
173
- protected Map<String, Object> getTypedExportedConstants() {
174
- Map<String, Object> constants = new HashMap<>();
175
-
176
- constants.put("isRunningInTestLab", isRunningInTestLab());
177
-
178
- Context context = getReactApplicationContext();
179
- String appVersion = getAppVersionName(context);
180
- if (appVersion != null && !appVersion.isEmpty()) {
181
- constants.put("appVersion", appVersion);
182
- }
183
-
184
- constants.put(KEY_MAIN_BUNDLE, "");
185
- constants.put(KEY_LIBRARY_DIRECTORY, context.getFilesDir().getAbsolutePath());
186
- constants.put(KEY_TEMP_DIRECTORY, context.getCacheDir().getAbsolutePath());
187
- constants.put(KEY_CACHE_DIRECTORY, context.getCacheDir().getAbsolutePath());
188
-
189
- File externalDirectory = context.getExternalFilesDir(null);
190
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
191
- if (externalDirectory != null) {
192
- constants.put(KEY_DOCUMENT_DIRECTORY, externalDirectory.getAbsolutePath());
193
- } else {
194
- constants.put(KEY_DOCUMENT_DIRECTORY, context.getFilesDir().getAbsolutePath());
195
- }
196
- }
197
-
198
- if (!constants.containsKey(KEY_DOCUMENT_DIRECTORY)) {
199
- constants.put(KEY_DOCUMENT_DIRECTORY, context.getFilesDir().getAbsolutePath());
200
- }
201
-
202
- File picturesDirectory =
203
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
204
- constants.put(
205
- KEY_PICS_DIRECTORY, picturesDirectory != null ? picturesDirectory.getAbsolutePath() : "");
206
-
207
- File moviesDirectory =
208
- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
209
- constants.put(
210
- KEY_MOVIES_DIRECTORY, moviesDirectory != null ? moviesDirectory.getAbsolutePath() : "");
211
-
212
- File externalStorageDirectory = Environment.getExternalStorageDirectory();
213
- if (externalStorageDirectory != null) {
214
- constants.put(KEY_EXT_STORAGE_DIRECTORY, externalStorageDirectory.getAbsolutePath());
215
- }
216
-
217
- if (externalDirectory != null) {
218
- constants.put(KEY_EXTERNAL_DIRECTORY, externalDirectory.getAbsolutePath());
219
- }
220
-
221
- return constants;
222
- }
223
- }