uilib-native 3.0.8 → 4.1.1

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 (216) hide show
  1. package/android/build/.transforms/1036eb23730414372a927c528351bc26/transformed/classes/classes.dex +0 -0
  2. package/android/build/.transforms/2b717ed37126635dfbaa465702275e27/results.bin +1 -0
  3. package/android/build/.transforms/2b717ed37126635dfbaa465702275e27/transformed/classes/classes.dex +0 -0
  4. package/android/build/.transforms/416e361a2a5e9e3ad18a35135fbe8f6e/results.bin +1 -0
  5. package/android/build/.transforms/416e361a2a5e9e3ad18a35135fbe8f6e/transformed/classes/classes.dex +0 -0
  6. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/results.bin +1 -0
  7. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/BuildConfig.dex +0 -0
  8. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/UiLibPackageList.dex +0 -0
  9. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/dynamicfont/DynamicFontModule.dex +0 -0
  10. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/dynamicfont/DynamicFontPackage.dex +0 -0
  11. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/HighlightFrame.dex +0 -0
  12. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/HighlightViewTagParams.dex +0 -0
  13. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/HighlighterView.dex +0 -0
  14. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/HighlighterViewManager$1.dex +0 -0
  15. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/HighlighterViewManager.dex +0 -0
  16. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/HighlighterViewPackage.dex +0 -0
  17. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/ReactHacks.dex +0 -0
  18. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/ReflectionUtils.dex +0 -0
  19. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/highlighterview/UiUtils.dex +0 -0
  20. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/AppContextHolder$1.dex +0 -0
  21. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/AppContextHolder.dex +0 -0
  22. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$1.dex +0 -0
  23. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$2.dex +0 -0
  24. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$3.dex +0 -0
  25. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$4.dex +0 -0
  26. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$5.dex +0 -0
  27. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout.dex +0 -0
  28. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootView.dex +0 -0
  29. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootViewManager.dex +0 -0
  30. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootViewShadow.dex +0 -0
  31. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/KeyboardInputModule.dex +0 -0
  32. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/KeyboardInputPackage.dex +0 -0
  33. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactContextHolder.dex +0 -0
  34. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor$1.dex +0 -0
  35. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor$Listener.dex +0 -0
  36. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor.dex +0 -0
  37. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$1.dex +0 -0
  38. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$2.dex +0 -0
  39. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$Listener.dex +0 -0
  40. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor.dex +0 -0
  41. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/utils/PredicateFunc.dex +0 -0
  42. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils$1.dex +0 -0
  43. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils$2.dex +0 -0
  44. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils.dex +0 -0
  45. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils$1.dex +0 -0
  46. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils$VisibleViewClassMatchPredicate.dex +0 -0
  47. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils.dex +0 -0
  48. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/textinput/DefaultKeyListener.dex +0 -0
  49. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/textinput/KeyListenerProxy.dex +0 -0
  50. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerModule$1.dex +0 -0
  51. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerModule.dex +0 -0
  52. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerPackage.dex +0 -0
  53. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/textinput/ViewUtils.dex +0 -0
  54. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/utils/LogForwarder$LogType.dex +0 -0
  55. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/debug/com/wix/reactnativeuilib/utils/LogForwarder.dex +0 -0
  56. package/android/build/.transforms/628785db81ac3052038232fd7a3a06ac/transformed/desugar_graph.bin +0 -0
  57. package/android/build/.transforms/dc6c66051bb0a2aed873a6fee209c3de/results.bin +1 -0
  58. package/android/build/.transforms/dc6c66051bb0a2aed873a6fee209c3de/transformed/classes/classes.dex +0 -0
  59. package/android/build/.transforms/e497de4b345d0cb0e578424efe3f321c/results.bin +1 -0
  60. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +1 -1
  61. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +4 -2
  62. package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +2 -0
  63. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  64. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  65. package/android/build/intermediates/compile_symbol_list/debug/R.txt +288 -191
  66. package/android/build/intermediates/compiled_local_resources/debug/out/layout_wheel_picker.xml.flat +0 -0
  67. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +2 -0
  68. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +7 -0
  69. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +1 -1
  70. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +1 -1
  71. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +1 -1
  72. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/UiLibPackageList.class +0 -0
  73. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/dynamicfont/DynamicFontModule.class +0 -0
  74. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/dynamicfont/DynamicFontPackage.class +0 -0
  75. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/HighlightFrame.class +0 -0
  76. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/HighlightViewTagParams.class +0 -0
  77. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/HighlighterView.class +0 -0
  78. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/HighlighterViewManager$1.class +0 -0
  79. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/HighlighterViewManager.class +0 -0
  80. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/HighlighterViewPackage.class +0 -0
  81. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/ReactHacks.class +0 -0
  82. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/ReflectionUtils.class +0 -0
  83. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/highlighterview/UiUtils.class +0 -0
  84. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/AppContextHolder$1.class +0 -0
  85. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/AppContextHolder.class +0 -0
  86. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$1.class +0 -0
  87. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$2.class +0 -0
  88. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$3.class +0 -0
  89. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$4.class +0 -0
  90. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$5.class +0 -0
  91. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout.class +0 -0
  92. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootView.class +0 -0
  93. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootViewManager.class +0 -0
  94. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootViewShadow.class +0 -0
  95. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/KeyboardInputModule.class +0 -0
  96. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/KeyboardInputPackage.class +0 -0
  97. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactContextHolder.class +0 -0
  98. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor$1.class +0 -0
  99. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor$Listener.class +0 -0
  100. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor.class +0 -0
  101. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$1.class +0 -0
  102. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$2.class +0 -0
  103. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$Listener.class +0 -0
  104. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor.class +0 -0
  105. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/utils/PredicateFunc.class +0 -0
  106. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils$1.class +0 -0
  107. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils$2.class +0 -0
  108. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils.class +0 -0
  109. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils$VisibleViewClassMatchPredicate.class +0 -0
  110. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils.class +0 -0
  111. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/textinput/DefaultKeyListener.class +0 -0
  112. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/textinput/KeyListenerProxy.class +0 -0
  113. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerModule$1.class +0 -0
  114. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerModule.class +0 -0
  115. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerPackage.class +0 -0
  116. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/textinput/ViewUtils.class +0 -0
  117. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/utils/LogForwarder$LogType.class +0 -0
  118. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/utils/LogForwarder.class +0 -0
  119. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +3 -3
  120. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +1 -1
  121. package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +4 -2
  122. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/BuildConfig.class +0 -0
  123. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/UiLibPackageList.class +0 -0
  124. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/dynamicfont/DynamicFontModule.class +0 -0
  125. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/dynamicfont/DynamicFontPackage.class +0 -0
  126. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/HighlightFrame.class +0 -0
  127. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/HighlightViewTagParams.class +0 -0
  128. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/HighlighterView.class +0 -0
  129. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/HighlighterViewManager$1.class +0 -0
  130. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/HighlighterViewManager.class +0 -0
  131. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/HighlighterViewPackage.class +0 -0
  132. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/ReactHacks.class +0 -0
  133. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/ReflectionUtils.class +0 -0
  134. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/highlighterview/UiUtils.class +0 -0
  135. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/AppContextHolder$1.class +0 -0
  136. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/AppContextHolder.class +0 -0
  137. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$1.class +0 -0
  138. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$2.class +0 -0
  139. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$3.class +0 -0
  140. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$4.class +0 -0
  141. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout$5.class +0 -0
  142. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardLayout.class +0 -0
  143. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootView.class +0 -0
  144. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootViewManager.class +0 -0
  145. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/CustomKeyboardRootViewShadow.class +0 -0
  146. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/KeyboardInputModule.class +0 -0
  147. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/KeyboardInputPackage.class +0 -0
  148. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactContextHolder.class +0 -0
  149. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor$1.class +0 -0
  150. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor$Listener.class +0 -0
  151. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactScreenMonitor.class +0 -0
  152. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$1.class +0 -0
  153. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$2.class +0 -0
  154. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor$Listener.class +0 -0
  155. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/ReactSoftKeyboardMonitor.class +0 -0
  156. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/utils/PredicateFunc.class +0 -0
  157. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils$1.class +0 -0
  158. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils$2.class +0 -0
  159. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils.class +0 -0
  160. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils$1.class +0 -0
  161. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils$VisibleViewClassMatchPredicate.class +0 -0
  162. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/keyboardinput/utils/ViewUtils.class +0 -0
  163. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/textinput/DefaultKeyListener.class +0 -0
  164. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/textinput/KeyListenerProxy.class +0 -0
  165. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerModule$1.class +0 -0
  166. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerModule.class +0 -0
  167. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/textinput/TextInputDelKeyHandlerPackage.class +0 -0
  168. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/textinput/ViewUtils.class +0 -0
  169. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/utils/LogForwarder$LogType.class +0 -0
  170. package/android/build/intermediates/runtime_library_classes_dir/debug/com/wix/reactnativeuilib/utils/LogForwarder.class +0 -0
  171. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  172. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +121 -51
  173. package/android/build/outputs/logs/manifest-merger-debug-report.txt +18 -18
  174. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  175. package/android/src/main/java/com/wix/reactnativeuilib/UiLibPackageList.java +2 -2
  176. package/android/src/main/java/com/wix/reactnativeuilib/dynamicfont/DynamicFontModule.java +137 -0
  177. package/android/src/main/java/com/wix/reactnativeuilib/dynamicfont/DynamicFontPackage.java +27 -0
  178. package/android/src/main/java/com/wix/reactnativeuilib/keyboardinput/utils/RuntimeUtils.java +6 -2
  179. package/components/DynamicFonts/FontDownloader.ts +144 -0
  180. package/components/DynamicFonts/FontLoader.ts +120 -0
  181. package/components/DynamicFonts/PermissionsAcquirer.android.ts +63 -0
  182. package/components/DynamicFonts/PermissionsAcquirer.ios.ts +9 -0
  183. package/components/DynamicFonts/RNFSPackage.ts +6 -0
  184. package/components/DynamicFonts/index.ts +155 -0
  185. package/components/HighlighterOverlayView.web.tsx +58 -0
  186. package/components/Keyboard/KeyboardInput/CustomKeyboardView/index.web.tsx +11 -0
  187. package/components/Keyboard/KeyboardInput/KeyboardAccessoryView.tsx +1 -12
  188. package/components/Keyboard/KeyboardInput/keyboardAccessoryView.api.json +4 -3
  189. package/components/Keyboard/KeyboardInput/keyboardRegistry.api.json +1 -1
  190. package/components/Keyboard/KeyboardTracking/KeyboardTrackingView/index.web.tsx +11 -0
  191. package/components/Keyboard/KeyboardTracking/KeyboardTrackingView/keyboardTrackingView.api.json +9 -9
  192. package/components/Keyboard/KeyboardTracking/keyboardAwareInsetsView.api.json +2 -2
  193. package/components/SafeArea/SafeAreaSpacerView.web.tsx +14 -0
  194. package/components/index.ts +2 -3
  195. package/ios/reactnativeuilib/dynamicfont/DynamicFont.h +9 -0
  196. package/ios/reactnativeuilib/dynamicfont/DynamicFont.m +114 -0
  197. package/ios/reactnativeuilib.xcodeproj/project.pbxproj +14 -0
  198. package/ios/reactnativeuilib.xcodeproj/project.xcworkspace/xcuserdata/michaelle.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  199. package/package.json +1 -1
  200. package/android/build/.transforms/078d1206f8e28097fd785bd635dfbdf6/transformed/classes/classes.dex +0 -0
  201. package/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +0 -2
  202. package/android/build/intermediates/incremental/packageDebugResources/merger.xml +0 -7
  203. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/wheelpicker/WheelPicker$1.class +0 -0
  204. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/wheelpicker/WheelPicker.class +0 -0
  205. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/wheelpicker/WheelPickerManager.class +0 -0
  206. package/android/build/intermediates/javac/debug/classes/com/wix/reactnativeuilib/wheelpicker/WheelPickerPackage.class +0 -0
  207. package/android/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt +0 -83
  208. package/android/src/main/java/com/wix/reactnativeuilib/wheelpicker/WheelPicker.java +0 -36
  209. package/android/src/main/java/com/wix/reactnativeuilib/wheelpicker/WheelPickerManager.java +0 -237
  210. package/android/src/main/java/com/wix/reactnativeuilib/wheelpicker/WheelPickerPackage.java +0 -44
  211. package/components/WheelPicker/WheelPickerItem.tsx +0 -21
  212. package/components/WheelPicker/index.tsx +0 -149
  213. package/ios/reactnativeuilib.xcodeproj/project.xcworkspace/xcuserdata/inbalti.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  214. /package/android/build/.transforms/{078d1206f8e28097fd785bd635dfbdf6 → 1036eb23730414372a927c528351bc26}/results.bin +0 -0
  215. /package/android/build/intermediates/incremental/{packageDebugResources → debug/packageDebugResources}/merged.dir/values/values.xml +0 -0
  216. /package/ios/reactnativeuilib.xcodeproj/xcuserdata/{inbalti.xcuserdatad → michaelle.xcuserdatad}/xcschemes/xcschememanagement.plist +0 -0
@@ -0,0 +1,137 @@
1
+ package com.wix.reactnativeuilib.dynamicfont;
2
+
3
+ import android.app.Activity;
4
+ import android.graphics.Typeface;
5
+ import android.util.Base64;
6
+
7
+ import com.facebook.react.bridge.Callback;
8
+ import com.facebook.react.bridge.ReactApplicationContext;
9
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
10
+ import com.facebook.react.bridge.ReactMethod;
11
+ import com.facebook.react.bridge.ReadableMap;
12
+ import com.facebook.react.views.text.ReactFontManager;
13
+
14
+ import java.io.File;
15
+ import java.io.FileOutputStream;
16
+
17
+ public class DynamicFontModule extends ReactContextBaseJavaModule {
18
+ int tempNameCounter = 0;
19
+
20
+ public DynamicFontModule(ReactApplicationContext reactContext) {
21
+ super(reactContext);
22
+ }
23
+
24
+ @Override
25
+ public String getName() {
26
+ return "DynamicFont";
27
+ }
28
+
29
+ @ReactMethod
30
+ public void loadFontFromFile(final ReadableMap options, final Callback callback) {
31
+ Activity currentActivity = getCurrentActivity();
32
+ if (currentActivity == null) {
33
+ callback.invoke("Invalid activity");
34
+ return;
35
+ }
36
+
37
+ String filePath = options.hasKey("filePath") ? options.getString("filePath") : null,
38
+ name = (options.hasKey("name")) ? options.getString("name") : null;
39
+
40
+ if (filePath == null || filePath.length() == 0) {
41
+ callback.invoke("filePath property empty");
42
+ return;
43
+ }
44
+
45
+ File f = new File(filePath);
46
+
47
+ if (f.exists() && f.canRead()) {
48
+ boolean wasLoaded = false;
49
+ try {
50
+ Typeface typeface = Typeface.createFromFile(f);
51
+ //Cache the font for react
52
+ ReactFontManager.getInstance().setTypeface(name, typeface.getStyle(), typeface);
53
+ wasLoaded = true;
54
+ } catch (Throwable e) {
55
+ callback.invoke(e.getMessage());
56
+ } finally {
57
+ if (wasLoaded) {
58
+ callback.invoke(null, name);
59
+ }
60
+ }
61
+ } else {
62
+ callback.invoke("invalid file");
63
+ }
64
+ }
65
+
66
+ @ReactMethod
67
+ public void loadFont(final ReadableMap options, final Callback callback) throws Exception {
68
+ Activity currentActivity = getCurrentActivity();
69
+ if (currentActivity == null) {
70
+ callback.invoke("Invalid activity");
71
+ return;
72
+ }
73
+
74
+ String name = (options.hasKey("name")) ? options.getString("name") : null,
75
+ data = (options.hasKey("data")) ? options.getString("data") : null,
76
+ type = null;
77
+
78
+ if (name == null || name.length() == 0) {
79
+ callback.invoke("Name property empty");
80
+ return;
81
+ }
82
+
83
+ if (data == null || data.length() == 0) {
84
+ callback.invoke("Data property empty");
85
+ return;
86
+ }
87
+
88
+ if (("data:").equalsIgnoreCase(data.substring(0, 5))) {
89
+ Integer pos = data.indexOf(',');
90
+ if (pos > 0) {
91
+ String[] encodingParams = data.substring(5, pos).split(";");
92
+ String mimeType = encodingParams[0];
93
+
94
+ data = data.substring(pos + 1);
95
+
96
+ if (("application/x-font-ttf").equalsIgnoreCase(mimeType) ||
97
+ ("application/x-font-truetype").equalsIgnoreCase(mimeType) ||
98
+ ("font/ttf").equalsIgnoreCase(mimeType)) {
99
+ type = "ttf";
100
+ } else if (("application/x-font-opentype").equalsIgnoreCase(mimeType) ||
101
+ ("font/opentype").equalsIgnoreCase(mimeType)) {
102
+ type = "otf";
103
+ }
104
+ }
105
+ }
106
+
107
+ if (options.hasKey("type"))
108
+ type = options.getString("type");
109
+
110
+ if (type == null)
111
+ type = "ttf";
112
+
113
+ try {
114
+ byte[] decodedBytes = Base64.decode(data, Base64.DEFAULT);
115
+ File cacheFile = new File(currentActivity.getCacheDir(), "tempFont" + (tempNameCounter++) + type);
116
+
117
+ FileOutputStream stream = new FileOutputStream(cacheFile);
118
+ try {
119
+ stream.write(decodedBytes);
120
+ } finally {
121
+ stream.close();
122
+ }
123
+
124
+ //Load the font from the temporary file we just created
125
+ Typeface typeface = Typeface.createFromFile(cacheFile);
126
+
127
+ //Cache the font for react
128
+ ReactFontManager.getInstance().setTypeface(name, Typeface.NORMAL, typeface);
129
+
130
+ cacheFile.delete();
131
+ } catch(Exception e) {
132
+ callback.invoke(e.getMessage());
133
+ } finally {
134
+ callback.invoke(null, name);
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,27 @@
1
+ package com.wix.reactnativeuilib.dynamicfont;
2
+
3
+ import java.util.Arrays;
4
+ import java.util.Collections;
5
+ import java.util.List;
6
+
7
+ import com.facebook.react.ReactPackage;
8
+ import com.facebook.react.bridge.NativeModule;
9
+ import com.facebook.react.bridge.ReactApplicationContext;
10
+ import com.facebook.react.uimanager.ViewManager;
11
+ import com.facebook.react.bridge.JavaScriptModule;
12
+ public class DynamicFontPackage implements ReactPackage {
13
+ @Override
14
+ public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
15
+ return Arrays.<NativeModule>asList(new DynamicFontModule(reactContext));
16
+ }
17
+
18
+ // Deprecated from RN 0.47
19
+ public List<Class<? extends JavaScriptModule>> createJSModules() {
20
+ return Collections.emptyList();
21
+ }
22
+
23
+ @Override
24
+ public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
25
+ return Collections.emptyList();
26
+ }
27
+ }
@@ -14,7 +14,9 @@ public class RuntimeUtils {
14
14
  };
15
15
 
16
16
  public static void runOnUIThread(Runnable runnable) {
17
- ReactContextHolder.getContext().runOnUiQueueThread(runnable);
17
+ if (ReactContextHolder.getContext() != null) {
18
+ ReactContextHolder.getContext().runOnUiQueueThread(runnable);
19
+ }
18
20
  }
19
21
 
20
22
  public static void dispatchUIUpdates(final Runnable userRunnable) {
@@ -22,7 +24,9 @@ public class RuntimeUtils {
22
24
  @Override
23
25
  public void run() {
24
26
  userRunnable.run();
25
- ReactContextHolder.getContext().runOnNativeModulesQueueThread(sUIUpdateClosure);
27
+ if (ReactContextHolder.getContext() != null) {
28
+ ReactContextHolder.getContext().runOnNativeModulesQueueThread(sUIUpdateClosure);
29
+ }
26
30
  }
27
31
  });
28
32
  }
@@ -0,0 +1,144 @@
1
+ import {Platform} from 'react-native';
2
+ import RNFS from './RNFSPackage';
3
+ import {FontExtension} from './FontLoader';
4
+
5
+ const DEFAULT_DYNAMIC_FONTS_FOLDER = '/dynamicFonts';
6
+ const DEFAULT_DOWNLOAD_ERROR_MESSAGE = 'An error occurred downloading the file:';
7
+
8
+ export type FontDownloaderProps = {
9
+ /**
10
+ * Should be In the following convention: '/NAME'
11
+ */
12
+ dynamicFontsFolder?: string;
13
+ downloadErrorMessage?: string;
14
+ /**
15
+ * Enable debug mode to print extra logs
16
+ */
17
+ debug?: boolean;
18
+ };
19
+
20
+ // TODO: this can probably be a more general "downloader" if we so choose
21
+ export default class FontDownloader {
22
+ private readonly props: FontDownloaderProps;
23
+ private readonly fs: NonNullable<typeof RNFS>;
24
+
25
+ constructor(props: FontDownloaderProps) {
26
+ this.props = {
27
+ dynamicFontsFolder: DEFAULT_DYNAMIC_FONTS_FOLDER,
28
+ downloadErrorMessage: DEFAULT_DOWNLOAD_ERROR_MESSAGE,
29
+ ...props
30
+ };
31
+
32
+ if (!RNFS) {
33
+ throw new Error(`RNUILib FontDownloader requires installing "react-native-fs" dependency`);
34
+ }
35
+ this.fs = RNFS;
36
+ }
37
+
38
+ private getPrivateFolder() {
39
+ const {dynamicFontsFolder} = this.props;
40
+ return (
41
+ (Platform.OS === 'android' ? this.fs.ExternalDirectoryPath : this.fs.DocumentDirectoryPath) + dynamicFontsFolder
42
+ );
43
+ }
44
+
45
+ private getPrivateFilePath(fileName: string) {
46
+ return this.getPrivateFolder() + '/' + fileName;
47
+ }
48
+
49
+ private getFileName(fontName: string, fontExtension: FontExtension) {
50
+ return fontName + '.' + fontExtension;
51
+ }
52
+
53
+ private async _isFontDownloaded(fileName: string) {
54
+ const privateFilePath = this.getPrivateFilePath(fileName);
55
+ return await this.fs.exists(privateFilePath);
56
+ }
57
+
58
+ private async createPrivateFolderIfNeeded() {
59
+ const privateFolder = this.getPrivateFolder();
60
+ if (!(await this.fs.exists(privateFolder))) {
61
+ await this.fs.mkdir(privateFolder);
62
+ }
63
+ }
64
+
65
+ private getDownloadFontOptions(fontUri: string, downloadLocation: string, readTimeout: number) {
66
+ const platformSpecificOptions =
67
+ Platform.OS === 'ios'
68
+ ? {
69
+ background: false,
70
+ discretionary: true,
71
+ cacheable: false
72
+ }
73
+ : {
74
+ connectionTimeout: readTimeout
75
+ };
76
+
77
+ return {
78
+ fromUrl: fontUri,
79
+ toFile: downloadLocation,
80
+ // TODO: It is possible to add a better progress, maybe for slower networks
81
+ // progress: ({bytesWritten, contentLength}: {bytesWritten: number; contentLength: number}) => {},
82
+ ...platformSpecificOptions,
83
+ fileCache: false,
84
+ readTimeout
85
+ };
86
+ }
87
+
88
+ /**
89
+ * Download the font
90
+ * @param fontUri the remote location of the font
91
+ * @param fontName the full name of the font
92
+ * @param fontExtension the extension of the font, i.e. '.ttf' or '.otf'
93
+ * @param timeout a timeout for the download to fail after
94
+ * @returns the full path of the download
95
+ */
96
+ public async downloadFont(fontUri: string,
97
+ fontName: string,
98
+ fontExtension: FontExtension,
99
+ timeout: number): Promise<string> {
100
+ const {downloadErrorMessage} = this.props;
101
+ await this.createPrivateFolderIfNeeded();
102
+ const fileName = this.getFileName(fontName, fontExtension);
103
+ const downloadLocation = this.getPrivateFilePath(fileName);
104
+
105
+ try {
106
+ const result = await this.fs.downloadFile(this.getDownloadFontOptions(fontUri, downloadLocation, timeout))
107
+ .promise;
108
+ if (result.statusCode === 200) {
109
+ return downloadLocation;
110
+ } else {
111
+ return Promise.reject({
112
+ source: 'uilib:FontDownloader:downloadFont',
113
+ message: `${downloadErrorMessage} fontName: ${fontName} statusCode: ${result.statusCode}`
114
+ });
115
+ }
116
+ } catch (error) {
117
+ return Promise.reject({
118
+ source: 'uilib:FontDownloader:downloadFont',
119
+ message: `${downloadErrorMessage} fontName: ${fontName} error: ${error}`
120
+ });
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Is the font cached (already downloaded)
126
+ * @param {*} fontName the full name of the font
127
+ * @param {*} fontExtension the extension of the font, i.e. '.ttf' or '.otf'
128
+ */
129
+ public async isFontDownloaded(fontName: string, fontExtension: FontExtension): Promise<boolean> {
130
+ const fileName = this.getFileName(fontName, fontExtension);
131
+ return await this._isFontDownloaded(fileName);
132
+ }
133
+
134
+ public async readFontFromDisk(fontName: string, fontExtension: FontExtension): Promise<string | void> {
135
+ let base64FontString;
136
+ const fileName = this.getFileName(fontName, fontExtension);
137
+ const privateFilePath = this.getPrivateFilePath(fileName);
138
+ if (await this.fs.exists(privateFilePath)) {
139
+ base64FontString = await this.fs.readFile(privateFilePath, 'base64').catch(() => {});
140
+ }
141
+
142
+ return base64FontString;
143
+ }
144
+ }
@@ -0,0 +1,120 @@
1
+ import {NativeModules} from 'react-native';
2
+
3
+ const {DynamicFont} = NativeModules;
4
+
5
+ export type FontExtension = 'ttf' | 'otf';
6
+
7
+ export type LoadFontInput = {
8
+ /**
9
+ * Specify registered font name (doesn't work for iOS)
10
+ */
11
+ fontName: string;
12
+ /**
13
+ * This can be a data URI or raw base64...
14
+ * if it is raw base64 type must be specified,
15
+ * but defaults to TTF (data URI mime: font/ttf or font/otf)
16
+ */
17
+ base64FontString: string;
18
+ /**
19
+ * Specify the type of font in the encoded data (ttf or otf). Defaults to "ttf"
20
+ */
21
+ fontExtension: FontExtension;
22
+ /**
23
+ * Force the loading of the font even if previously loaded it
24
+ */
25
+ forceLoad?: boolean;
26
+ };
27
+
28
+ export type FontLoaderProps = {
29
+ /**
30
+ * Enable debug mode to print extra logs
31
+ */
32
+ debug?: boolean;
33
+ };
34
+
35
+ export default class FontLoader {
36
+ private readonly props: FontLoaderProps;
37
+ private readonly loadedFonts = new Map<string, string>();
38
+
39
+ constructor(props: FontLoaderProps) {
40
+ this.props = props;
41
+ }
42
+
43
+ public loadFont = ({
44
+ fontName,
45
+ base64FontString,
46
+ fontExtension = 'ttf',
47
+ forceLoad = false
48
+ }: LoadFontInput): Promise<string> => {
49
+ const {debug} = this.props;
50
+ /* Check if this font was already loaded */
51
+ if (!forceLoad && this.loadedFonts.has(fontName)) {
52
+ if (debug) {
53
+ console.log(fontName, 'Already loaded');
54
+ }
55
+ return Promise.resolve(this.loadedFonts.get(fontName) as string);
56
+ }
57
+
58
+ if (!fontName) {
59
+ throw new Error('fontName is a required argument');
60
+ }
61
+
62
+ if (!base64FontString) {
63
+ throw new Error('base64FontString is a required argument');
64
+ }
65
+
66
+ if (debug) {
67
+ console.log(fontName, 'Starting to load');
68
+ }
69
+ /* Load font via native binary code */
70
+ return new Promise((resolve, reject) => {
71
+ DynamicFont.loadFont({
72
+ name: fontName,
73
+ data: base64FontString,
74
+ type: fontExtension
75
+ },
76
+ (err: string, givenName: string) => {
77
+ if (err) {
78
+ reject(err);
79
+ return;
80
+ }
81
+ /* Loaded successfully... resolve promise with "real" font name */
82
+ this.loadedFonts.set(fontName, givenName);
83
+ resolve(givenName);
84
+ });
85
+ });
86
+ };
87
+
88
+ public loadFontFromFile = (fontName: string, filePath: string) => {
89
+ if (!fontName) {
90
+ throw new Error('name is a required argument');
91
+ }
92
+
93
+ if (!filePath) {
94
+ throw new Error('filePath is a required argument');
95
+ }
96
+
97
+ return new Promise((resolve, reject) => {
98
+ DynamicFont.loadFontFromFile({
99
+ name: fontName,
100
+ filePath
101
+ },
102
+ (err: string, givenName: string) => {
103
+ if (err) {
104
+ reject(err);
105
+ return;
106
+ }
107
+ resolve(givenName);
108
+ });
109
+ });
110
+ };
111
+
112
+ public loadFonts = (fonts: LoadFontInput | LoadFontInput[], forceLoad?: boolean) => {
113
+ if (!fonts) {
114
+ return Promise.resolve([]);
115
+ }
116
+
117
+ const fontsArray = fonts instanceof Array ? fonts : [fonts];
118
+ return Promise.all(fontsArray.filter(font => font).map(font => this.loadFont({forceLoad, ...font})));
119
+ };
120
+ }
@@ -0,0 +1,63 @@
1
+ import {Platform, PermissionsAndroid} from 'react-native';
2
+ const AndroidOsVersion = Platform.OS === 'android' ? Platform.constants.Release : undefined;
3
+
4
+ export type PermissionsAcquirerProps = {
5
+ requestPermissionsTitle?: string;
6
+ requestPermissionsMessage?: string;
7
+ requestPermissionsNegativeButtonText?: string;
8
+ requestPermissionsPositiveButtonText?: string;
9
+ permissionsRefusalMessage?: string;
10
+ permissionsErrorMessage?: string;
11
+ };
12
+
13
+ const DEFAULT_PERMISSIONS_ACQUIRER_PROPS: Required<PermissionsAcquirerProps> = {
14
+ requestPermissionsTitle: 'Allow Storage Access',
15
+ requestPermissionsMessage: 'Give the Spaces app permission to access the files and storage on your device.',
16
+ requestPermissionsNegativeButtonText: 'Cancel',
17
+ requestPermissionsPositiveButtonText: 'Continue',
18
+ permissionsRefusalMessage: 'Please edit your permission settings to continue.',
19
+ permissionsErrorMessage: `We weren't able to obtain the required permissions. Please try Again.`
20
+ };
21
+
22
+ export default class PermissionsAcquirer {
23
+ private readonly props;
24
+ constructor(props: PermissionsAcquirerProps) {
25
+ this.props = props;
26
+ }
27
+
28
+ public async checkPermissions() {
29
+ return await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
30
+ }
31
+
32
+ public async getPermissions() {
33
+ if ((AndroidOsVersion && Number(AndroidOsVersion) >= 13) || (await this.checkPermissions())) {
34
+ return Promise.resolve();
35
+ }
36
+
37
+ try {
38
+ const result = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, {
39
+ title: this.props.requestPermissionsTitle ?? DEFAULT_PERMISSIONS_ACQUIRER_PROPS.requestPermissionsTitle,
40
+ message: this.props.requestPermissionsMessage ?? DEFAULT_PERMISSIONS_ACQUIRER_PROPS.requestPermissionsMessage,
41
+ buttonNegative:
42
+ this.props.requestPermissionsNegativeButtonText ??
43
+ DEFAULT_PERMISSIONS_ACQUIRER_PROPS.requestPermissionsNegativeButtonText,
44
+ buttonPositive:
45
+ this.props.requestPermissionsPositiveButtonText ??
46
+ DEFAULT_PERMISSIONS_ACQUIRER_PROPS.requestPermissionsPositiveButtonText
47
+ });
48
+ if (result === PermissionsAndroid.RESULTS.GRANTED) {
49
+ return Promise.resolve();
50
+ } else {
51
+ return Promise.reject({
52
+ source: 'uilib:FontDownloader:getPermissions',
53
+ message: this.props.permissionsRefusalMessage ?? DEFAULT_PERMISSIONS_ACQUIRER_PROPS.permissionsRefusalMessage
54
+ });
55
+ }
56
+ } catch (err) {
57
+ return Promise.reject({
58
+ source: 'uilib:FontDownloader:getPermissions',
59
+ message: this.props.permissionsErrorMessage ?? DEFAULT_PERMISSIONS_ACQUIRER_PROPS.permissionsErrorMessage
60
+ });
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,9 @@
1
+ export default class PermissionsAcquirer {
2
+ public async checkPermissions() {
3
+ return Promise.resolve(true);
4
+ }
5
+
6
+ public async getPermissions() {
7
+ return Promise.resolve();
8
+ }
9
+ }
@@ -0,0 +1,6 @@
1
+ let RNFS: typeof import('react-native-fs') | undefined;
2
+ try {
3
+ RNFS = require('react-native-fs');
4
+ } catch (error) {}
5
+
6
+ export default RNFS;
@@ -0,0 +1,155 @@
1
+ import {Platform} from 'react-native';
2
+ import FontLoader, {FontExtension, LoadFontInput} from './FontLoader';
3
+ import FontDownloader, {FontDownloaderProps} from './FontDownloader';
4
+ import PermissionsAcquirerAndroid, {PermissionsAcquirerProps} from './PermissionsAcquirer.android';
5
+ import PermissionsAcquirerIOS from './PermissionsAcquirer.ios';
6
+ const PermissionsAcquirer = Platform.OS === 'android' ? PermissionsAcquirerAndroid : PermissionsAcquirerIOS;
7
+
8
+ const DEFAULT_FONT_LOAD_ERROR_MESSAGE = 'Unable to load this font.';
9
+
10
+ type DynamicFontsProps = {
11
+ fontDownloadingProps?: Omit<FontDownloaderProps, 'debug'>;
12
+ permissionsAcquirerProps?: PermissionsAcquirerProps;
13
+ fontLoadErrorMessage?: string;
14
+ /**
15
+ * Enable debug mode to print extra logs
16
+ */
17
+ debug?: boolean;
18
+ };
19
+
20
+ type GetFontInput = {
21
+ /**
22
+ * The uri of the font (to be downloaded from)
23
+ */
24
+ fontUri: string;
25
+ /**
26
+ * The full name of the font
27
+ */
28
+ fontName: string;
29
+ /**
30
+ * The extension of the font, i.e. '.ttf' or '.otf'
31
+ */
32
+ fontExtension: FontExtension;
33
+ /**
34
+ * Milliseconds for the download to complete in (defaults to 5000)
35
+ */
36
+ timeout?: number;
37
+ };
38
+
39
+ export {DynamicFontsProps, FontExtension, GetFontInput};
40
+
41
+ export default class DynamicFonts {
42
+ private readonly props: DynamicFontsProps;
43
+ private readonly permissionsAcquirer: InstanceType<typeof PermissionsAcquirer>;
44
+ private readonly fontLoader: InstanceType<typeof FontLoader>;
45
+ private readonly fontDownloader: InstanceType<typeof FontDownloader>;
46
+
47
+ constructor(props: DynamicFontsProps) {
48
+ const {debug} = props;
49
+ this.props = {fontLoadErrorMessage: DEFAULT_FONT_LOAD_ERROR_MESSAGE, ...props};
50
+ this.permissionsAcquirer = new PermissionsAcquirer(this.props.permissionsAcquirerProps ?? {});
51
+ this.fontLoader = new FontLoader({debug});
52
+ const fontDownloadingProps = this.props.fontDownloadingProps ?? {};
53
+ this.fontDownloader = new FontDownloader({...fontDownloadingProps, debug});
54
+ }
55
+
56
+ private async loadFont(input: LoadFontInput) {
57
+ const {fontLoadErrorMessage} = this.props;
58
+ try {
59
+ return await this.fontLoader.loadFont(input);
60
+ } catch (err) {
61
+ return Promise.reject({
62
+ source: 'uilib:FontDownloader:loadFont',
63
+ message: `${fontLoadErrorMessage} fontName: ${input.fontName}`
64
+ });
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Get font - download from uri (or from cache if already downloaded) and load it to memory
70
+ * You need to handle errors in the form of Promise.reject
71
+ * @param fontUri the uri of the font (to be downloaded from)
72
+ * @param fontName the full name of the font
73
+ * @param fontExtension the extension of the font, i.e. '.ttf' or '.otf'
74
+ * @param timeout milliseconds for the download to complete in (defaults to 5000)
75
+ */
76
+ public async getFont({fontUri, fontName, fontExtension, timeout = 5000}: GetFontInput): Promise<string> {
77
+ const {debug} = this.props;
78
+ const {fontLoadErrorMessage} = this.props;
79
+ await this.permissionsAcquirer.getPermissions();
80
+ if (await this.fontDownloader.isFontDownloaded(fontName, fontExtension)) {
81
+ if (debug) {
82
+ console.log(fontName, 'Already downloaded');
83
+ }
84
+ } else {
85
+ if (debug) {
86
+ console.log(fontName, 'Starting to download');
87
+ }
88
+ await this.fontDownloader.downloadFont(fontUri, fontName, fontExtension, timeout);
89
+ if (debug) {
90
+ console.log(fontName, 'Finished downloading');
91
+ }
92
+ }
93
+
94
+ const base64FontString = await this.fontDownloader.readFontFromDisk(fontName, fontExtension);
95
+ if (base64FontString) {
96
+ if (debug) {
97
+ console.log(fontName, 'Loading');
98
+ }
99
+ const _fontName = await this.loadFont({fontName, base64FontString, fontExtension});
100
+ if (debug) {
101
+ console.log(_fontName, 'Finished loading');
102
+ }
103
+ return Promise.resolve(_fontName);
104
+ } else {
105
+ return Promise.reject({
106
+ source: 'uilib:FontDownloader:getFont',
107
+ message: `${fontLoadErrorMessage} fontName: ${fontName}`
108
+ });
109
+ }
110
+ }
111
+
112
+ public async getFonts(fonts: GetFontInput | GetFontInput[]): Promise<string[]> {
113
+ await this.permissionsAcquirer.getPermissions();
114
+ if (fonts instanceof Array) {
115
+ return Promise.all(fonts.filter(font => font).map(font => this.getFont(font)));
116
+ } else {
117
+ return Promise.resolve([await this.getFont(fonts)]);
118
+ }
119
+ }
120
+
121
+ private buildFontName(rootUri: string,
122
+ fontName: string,
123
+ fontExtension: FontExtension,
124
+ fontNamePrefix?: string): GetFontInput {
125
+ const _fontName = `${fontNamePrefix ?? ''}${fontName}`;
126
+ const fullFontName = `${_fontName}.${fontExtension}`;
127
+ return {fontUri: `${rootUri}${fullFontName}`, fontName: _fontName, fontExtension};
128
+ }
129
+
130
+ // eslint-disable-next-line max-params
131
+ public async getFontFamily(rootUri: string,
132
+ fontNames: string[],
133
+ fontExtension: FontExtension,
134
+ fontNamePrefix?: string,
135
+ retries = 1): Promise<string[]> {
136
+ const {debug} = this.props;
137
+ const fonts: GetFontInput[] = fontNames.map(fontName =>
138
+ this.buildFontName(rootUri, fontName, fontExtension, fontNamePrefix));
139
+ let fontsLoaded: string[] = [];
140
+ let tryCounter = 0;
141
+ while (fontsLoaded.length < fontNames.length && tryCounter < retries) {
142
+ try {
143
+ ++tryCounter;
144
+ // TODO: we should return successful loaded fonts and not fail all of them
145
+ fontsLoaded = await this.getFonts(fonts);
146
+ } catch (error) {
147
+ if (debug) {
148
+ console.log(`getFontFamily failed (try #${tryCounter}) error: ${error}`);
149
+ }
150
+ }
151
+ }
152
+
153
+ return Promise.resolve(fontsLoaded);
154
+ }
155
+ }