expo-realtime-ivs-broadcast 0.1.7 → 0.1.9

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 (186) hide show
  1. package/README.md +1 -1
  2. package/android/build/.transforms/10a4d332fad050fdaf4ee2d7badc1ee4/transformed/classes/classes_dex/classes.dex +0 -0
  3. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/BuildConfig.dex +0 -0
  4. package/android/build/.transforms/9f2f591934de19590757f5a4b0b59398/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoIVSRemoteStreamView.dex +0 -0
  5. package/android/build/.transforms/9f2f591934de19590757f5a4b0b59398/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView$attachStreamWithRetry$4.dex +0 -0
  6. package/android/build/.transforms/9f2f591934de19590757f5a4b0b59398/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView.dex +0 -0
  7. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$10$1.dex +0 -0
  8. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$10$2.dex +0 -0
  9. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$11$1.dex +0 -0
  10. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$1.dex +0 -0
  11. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$10.dex +0 -0
  12. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$11.dex +0 -0
  13. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$12.dex +0 -0
  14. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$13.dex +0 -0
  15. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$14.dex +0 -0
  16. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$15.dex +0 -0
  17. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$2.dex +0 -0
  18. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$3.dex +0 -0
  19. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$4.dex +0 -0
  20. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$5.dex +0 -0
  21. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$6.dex +0 -0
  22. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$7.dex +0 -0
  23. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$8.dex +0 -0
  24. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$9.dex +0 -0
  25. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$1.dex +0 -0
  26. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$2.dex +0 -0
  27. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$3.dex +0 -0
  28. package/android/build/.transforms/9f2f591934de19590757f5a4b0b59398/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$OnCreate$1.dex +0 -0
  29. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$View$1.dex +0 -0
  30. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$View$2.dex +0 -0
  31. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$10$$inlined$Prop$1.dex +0 -0
  32. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$9$$inlined$Prop$1.dex +0 -0
  33. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$9$$inlined$Prop$2.dex +0 -0
  34. package/android/build/.transforms/9f2f591934de19590757f5a4b0b59398/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule.dex +0 -0
  35. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastView$webView$1$1.dex +0 -0
  36. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastView.dex +0 -0
  37. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/IVSStageManager$Companion.dex +0 -0
  38. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/IVSStageManager$WhenMappings.dex +0 -0
  39. package/android/build/.transforms/9f2f591934de19590757f5a4b0b59398/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/IVSStageManager.dex +0 -0
  40. package/android/build/.transforms/9f2f591934de19590757f5a4b0b59398/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/IVSStageManagerDelegate.dex +0 -0
  41. package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/StageParticipant.dex +0 -0
  42. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  43. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
  44. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/expo-realtime-ivs-broadcast_debug.kotlin_module +0 -0
  45. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/expo-realtime-ivs-broadcast_debug.kotlin_module +0 -0
  46. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoIVSRemoteStreamView.class +0 -0
  47. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView$attachStreamWithRetry$4.class +0 -0
  48. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView.class +0 -0
  49. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$10$1.class +0 -0
  50. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$10$2.class +0 -0
  51. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$11$1.class +0 -0
  52. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$1.class +0 -0
  53. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$10.class +0 -0
  54. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$11.class +0 -0
  55. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$12.class +0 -0
  56. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$13.class +0 -0
  57. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$14.class +0 -0
  58. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$15.class +0 -0
  59. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$2.class +0 -0
  60. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$3.class +0 -0
  61. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$4.class +0 -0
  62. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$5.class +0 -0
  63. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$6.class +0 -0
  64. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$7.class +0 -0
  65. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$8.class +0 -0
  66. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$9.class +0 -0
  67. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$1.class +0 -0
  68. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$2.class +0 -0
  69. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$3.class +0 -0
  70. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$OnCreate$1.class +0 -0
  71. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$View$1.class +0 -0
  72. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$View$2.class +0 -0
  73. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$10$$inlined$Prop$1.class +0 -0
  74. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$9$$inlined$Prop$1.class +0 -0
  75. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$9$$inlined$Prop$2.class +0 -0
  76. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule.class +0 -0
  77. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastView$webView$1$1.class +0 -0
  78. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastView.class +0 -0
  79. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/IVSStageManager$Companion.class +0 -0
  80. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/IVSStageManager$WhenMappings.class +0 -0
  81. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/IVSStageManager.class +0 -0
  82. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/IVSStageManagerDelegate.class +0 -0
  83. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/expo/modules/realtimeivsbroadcast/StageParticipant.class +0 -0
  84. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  85. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  86. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  87. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  88. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  89. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  90. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  91. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  92. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  93. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  94. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  95. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  96. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  97. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  98. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  99. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  100. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  101. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  102. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  103. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  104. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  105. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  106. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  107. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
  108. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  109. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  110. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  111. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  112. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  113. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  114. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  115. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  116. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  117. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  118. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  119. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  120. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  121. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  122. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  123. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  124. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  125. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  126. package/android/build/tmp/kotlin-classes/debug/META-INF/expo-realtime-ivs-broadcast_debug.kotlin_module +0 -0
  127. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoIVSRemoteStreamView.class +0 -0
  128. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView$attachStreamWithRetry$4.class +0 -0
  129. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView.class +0 -0
  130. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$10$1.class +0 -0
  131. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$10$2.class +0 -0
  132. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$1$11$1.class +0 -0
  133. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$1.class +0 -0
  134. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$10.class +0 -0
  135. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$11.class +0 -0
  136. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$12.class +0 -0
  137. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$13.class +0 -0
  138. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$14.class +0 -0
  139. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$15.class +0 -0
  140. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$2.class +0 -0
  141. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$3.class +0 -0
  142. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$4.class +0 -0
  143. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$5.class +0 -0
  144. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$6.class +0 -0
  145. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$7.class +0 -0
  146. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$8.class +0 -0
  147. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunction$9.class +0 -0
  148. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$1.class +0 -0
  149. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$2.class +0 -0
  150. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$AsyncFunctionWithoutArgs$3.class +0 -0
  151. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$OnCreate$1.class +0 -0
  152. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$View$1.class +0 -0
  153. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$View$2.class +0 -0
  154. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$10$$inlined$Prop$1.class +0 -0
  155. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$9$$inlined$Prop$1.class +0 -0
  156. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$lambda$9$$inlined$Prop$2.class +0 -0
  157. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule.class +0 -0
  158. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastView$webView$1$1.class +0 -0
  159. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastView.class +0 -0
  160. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/IVSStageManager$Companion.class +0 -0
  161. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/IVSStageManager$WhenMappings.class +0 -0
  162. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/IVSStageManager.class +0 -0
  163. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/IVSStageManagerDelegate.class +0 -0
  164. package/android/build/tmp/kotlin-classes/debug/expo/modules/realtimeivsbroadcast/StageParticipant.class +0 -0
  165. package/android/src/main/java/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView.kt +237 -35
  166. package/android/src/main/java/expo/modules/realtimeivsbroadcast/IVSStageManager.kt +27 -4
  167. package/package.json +1 -1
  168. package/android/build/.transforms/247a8b1d1f926cbf4f656139274d68b6/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoIVSRemoteStreamView.dex +0 -0
  169. package/android/build/.transforms/247a8b1d1f926cbf4f656139274d68b6/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoIVSStagePreviewView.dex +0 -0
  170. package/android/build/.transforms/247a8b1d1f926cbf4f656139274d68b6/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule$definition$lambda$11$$inlined$OnCreate$1.dex +0 -0
  171. package/android/build/.transforms/247a8b1d1f926cbf4f656139274d68b6/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/ExpoRealtimeIvsBroadcastModule.dex +0 -0
  172. package/android/build/.transforms/247a8b1d1f926cbf4f656139274d68b6/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/IVSStageManager.dex +0 -0
  173. package/android/build/.transforms/247a8b1d1f926cbf4f656139274d68b6/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/expo/modules/realtimeivsbroadcast/IVSStageManagerDelegate.dex +0 -0
  174. package/android/build/.transforms/651ce6100f81d6b65301e359b6eaf22f/transformed/classes/classes_dex/classes.dex +0 -0
  175. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values +0 -0
  176. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.s +0 -1
  177. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values +0 -0
  178. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.s +0 -1
  179. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values +0 -0
  180. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.s +0 -1
  181. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values +0 -0
  182. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.s +0 -1
  183. /package/android/build/.transforms/{651ce6100f81d6b65301e359b6eaf22f → 10a4d332fad050fdaf4ee2d7badc1ee4}/results.bin +0 -0
  184. /package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/results.bin +0 -0
  185. /package/android/build/.transforms/{247a8b1d1f926cbf4f656139274d68b6 → 9f2f591934de19590757f5a4b0b59398}/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  186. /package/android/build/intermediates/incremental/{packageDebugAssets → mergeDebugAssets}/merger.xml +0 -0
@@ -5,6 +5,7 @@ import android.os.Build
5
5
  import android.os.Handler
6
6
  import android.os.Looper
7
7
  import android.util.Log
8
+ import android.view.ViewTreeObserver
8
9
  import android.widget.FrameLayout
9
10
  import androidx.annotation.RequiresApi
10
11
  import com.amazonaws.ivs.broadcast.BroadcastConfiguration.AspectMode
@@ -28,24 +29,82 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
28
29
  // Props from React Native
29
30
  private var mirror: Boolean = false
30
31
  private var scaleMode: String = "fill"
32
+
33
+ // Track view attachment state
34
+ @Volatile
35
+ private var isViewAttached = false
31
36
 
32
37
  init {
33
38
  Log.i("ExpoIVSStagePreviewView", "Initializing Stage Preview View...")
34
- resolveStageManagerAndStreamWithRetry()
39
+ // Note: We don't start initialization here because isViewAttached is false
40
+ // The initialization will happen in onAttachedToWindow when the view is ready
41
+ }
42
+
43
+ // Override onLayout to ensure child views are properly sized
44
+ override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
45
+ super.onLayout(changed, left, top, right, bottom)
46
+
47
+ // Manually layout children to fill the entire view
48
+ val childWidth = right - left
49
+ val childHeight = bottom - top
50
+
51
+ // Use safe iteration - get count once and check for null children
52
+ val count = childCount
53
+ for (i in 0 until count) {
54
+ val child = getChildAt(i) ?: continue // Skip null children
55
+ try {
56
+ child.layout(0, 0, childWidth, childHeight)
57
+ } catch (e: Exception) {
58
+ Log.w("ExpoIVSStagePreviewView", "Error laying out child $i: ${e.message}")
59
+ }
60
+ }
61
+
62
+ Log.d("ExpoIVSStagePreviewView", "📐 onLayout: ${childWidth}x${childHeight}, children: $count")
63
+ }
64
+
65
+ // Override onMeasure to properly measure children
66
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
67
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec)
68
+
69
+ val width = MeasureSpec.getSize(widthMeasureSpec)
70
+ val height = MeasureSpec.getSize(heightMeasureSpec)
71
+
72
+ // Measure all children with exact dimensions
73
+ val childWidthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)
74
+ val childHeightSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
75
+
76
+ // Use safe iteration - get count once and check for null children
77
+ val count = childCount
78
+ for (i in 0 until count) {
79
+ val child = getChildAt(i) ?: continue // Skip null children
80
+ try {
81
+ child.measure(childWidthSpec, childHeightSpec)
82
+ } catch (e: Exception) {
83
+ Log.w("ExpoIVSStagePreviewView", "Error measuring child $i: ${e.message}")
84
+ }
85
+ }
86
+
87
+ Log.d("ExpoIVSStagePreviewView", "📐 onMeasure: ${width}x${height}")
35
88
  }
36
89
 
37
90
  private fun resolveStageManagerAndStreamWithRetry() {
91
+ // Guard: Don't proceed if view is not attached
92
+ if (!isViewAttached) {
93
+ Log.w("ExpoIVSStagePreviewView", "⚠️ View not attached, skipping resolveStageManagerAndStreamWithRetry")
94
+ return
95
+ }
96
+
38
97
  Log.d("ExpoIVSStagePreviewView", "Attempting to resolve StageManager (attempt ${retryCount + 1})...")
39
98
 
40
99
  val manager = IVSStageManager.instance
41
100
 
42
101
  if (manager == null) {
43
- if (retryCount < maxRetries) {
102
+ if (retryCount < maxRetries && isViewAttached) {
44
103
  retryCount++
45
104
  Log.w("ExpoIVSStagePreviewView", "IVSStageManager not ready, retrying in ${retryDelayMs}ms...")
46
105
  mainHandler.postDelayed({ resolveStageManagerAndStreamWithRetry() }, retryDelayMs)
47
106
  } else {
48
- Log.e("ExpoIVSStagePreviewView", "IVSStageManager singleton is null after $maxRetries attempts.")
107
+ Log.e("ExpoIVSStagePreviewView", "IVSStageManager singleton is null after $maxRetries attempts or view detached.")
49
108
  }
50
109
  return
51
110
  }
@@ -57,16 +116,21 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
57
116
  }
58
117
 
59
118
  private fun attachStreamWithRetry() {
119
+ // Guard: Don't attach if view is not attached to window
120
+ if (!isViewAttached) {
121
+ Log.w("ExpoIVSStagePreviewView", "⚠️ View not attached to window, skipping attachStreamWithRetry")
122
+ return
123
+ }
124
+
60
125
  val cameraDevice = this.stageManager?.getLocalCameraDevice()
61
126
 
62
127
  if (cameraDevice == null) {
63
- // Camera not ready yet, retry
64
- if (retryCount < maxRetries) {
128
+ if (retryCount < maxRetries && isViewAttached) {
65
129
  retryCount++
66
130
  Log.w("ExpoIVSStagePreviewView", "Camera device not ready, retrying in ${retryDelayMs}ms...")
67
131
  mainHandler.postDelayed({ attachStreamWithRetry() }, retryDelayMs)
68
132
  } else {
69
- Log.e("ExpoIVSStagePreviewView", "Camera device not available after $maxRetries attempts.")
133
+ Log.e("ExpoIVSStagePreviewView", "Camera device not available after $maxRetries attempts or view detached.")
70
134
  }
71
135
  return
72
136
  }
@@ -78,19 +142,27 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
78
142
  }
79
143
 
80
144
  val newDeviceUrn = cameraDevice.descriptor.urn
145
+ Log.i("ExpoIVSStagePreviewView", "📷 attachStreamWithRetry - Camera: ${cameraDevice.descriptor.friendlyName}, URN: $newDeviceUrn")
146
+ Log.i("ExpoIVSStagePreviewView", "📷 Current preview URN: $currentPreviewDeviceUrn, Has preview: ${ivsImagePreviewView != null}")
81
147
 
82
- // If preview exists for the same device, do nothing.
83
148
  if (ivsImagePreviewView != null && this.currentPreviewDeviceUrn == newDeviceUrn) {
84
149
  Log.d("ExpoIVSStagePreviewView", "Already showing preview for device: $newDeviceUrn")
85
150
  return
86
151
  }
87
152
 
88
- // Cleanup existing preview
89
- if (ivsImagePreviewView != null) {
153
+ // Cleanup existing preview - clear references first, then remove view
154
+ val oldPreview = ivsImagePreviewView
155
+ if (oldPreview != null) {
90
156
  Log.d("ExpoIVSStagePreviewView", "Cleaning up existing preview")
91
- removeView(ivsImagePreviewView)
92
157
  ivsImagePreviewView = null
93
- this.currentPreviewDeviceUrn = null
158
+ currentPreviewDeviceUrn = null
159
+ if (oldPreview.parent == this) {
160
+ try {
161
+ removeView(oldPreview)
162
+ } catch (e: Exception) {
163
+ Log.w("ExpoIVSStagePreviewView", "Error removing old preview: ${e.message}")
164
+ }
165
+ }
94
166
  }
95
167
 
96
168
  try {
@@ -102,23 +174,54 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
102
174
  return
103
175
  }
104
176
 
105
- val newPreview = imageDevice.previewView
177
+ // Use getPreviewView() with aspect mode to get a fresh preview view
178
+ // This is more reliable than using the previewView property after camera swap
179
+ val newPreview = try {
180
+ imageDevice.getPreviewView(AspectMode.FILL)
181
+ } catch (e: Exception) {
182
+ Log.w("ExpoIVSStagePreviewView", "getPreviewView(FILL) failed, trying previewView property: ${e.message}")
183
+ imageDevice.previewView
184
+ }
185
+
106
186
  if (newPreview == null) {
107
- // Preview view not ready yet, retry after delay
108
- if (retryCount < maxRetries) {
187
+ if (retryCount < maxRetries && isViewAttached) {
109
188
  retryCount++
110
189
  Log.w("ExpoIVSStagePreviewView", "Preview view is null, retrying in ${retryDelayMs}ms (attempt $retryCount)...")
111
190
  mainHandler.postDelayed({ attachStreamWithRetry() }, retryDelayMs)
112
191
  } else {
113
- Log.e("ExpoIVSStagePreviewView", "Failed to get preview view from camera after $maxRetries attempts")
192
+ Log.e("ExpoIVSStagePreviewView", "Failed to get preview view from camera after $maxRetries attempts or view detached")
114
193
  }
115
194
  return
116
195
  }
117
196
 
118
- // Check if preview is attached to another parent and detach it first
119
- if (newPreview.parent != null) {
120
- Log.w("ExpoIVSStagePreviewView", "Preview view already has a parent, detaching first...")
121
- (newPreview.parent as? android.view.ViewGroup)?.removeView(newPreview)
197
+ Log.i("ExpoIVSStagePreviewView", "📷 Got preview view: ${newPreview.javaClass.simpleName}, hashCode: ${newPreview.hashCode()}")
198
+
199
+ // Double-check we're still attached before modifying view hierarchy
200
+ if (!isViewAttached) {
201
+ Log.w("ExpoIVSStagePreviewView", "⚠️ View detached while getting preview, aborting")
202
+ return
203
+ }
204
+
205
+ // IMPORTANT: Check if preview is attached to another parent and detach it first
206
+ val existingParent = newPreview.parent
207
+ if (existingParent != null && existingParent != this) {
208
+ Log.w("ExpoIVSStagePreviewView", "Preview view has another parent, detaching first...")
209
+ (existingParent as? android.view.ViewGroup)?.removeView(newPreview)
210
+ }
211
+
212
+ // If already attached to this view, no need to re-add
213
+ if (newPreview.parent == this) {
214
+ Log.d("ExpoIVSStagePreviewView", "Preview already attached to this view")
215
+ this.ivsImagePreviewView = newPreview
216
+ this.currentPreviewDeviceUrn = newDeviceUrn
217
+ applyProps()
218
+ return
219
+ }
220
+
221
+ // Final check before adding view
222
+ if (!isViewAttached) {
223
+ Log.w("ExpoIVSStagePreviewView", "⚠️ View detached before addView, aborting")
224
+ return
122
225
  }
123
226
 
124
227
  newPreview.layoutParams = FrameLayout.LayoutParams(
@@ -131,13 +234,55 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
131
234
  this.currentPreviewDeviceUrn = newDeviceUrn
132
235
 
133
236
  applyProps()
237
+
238
+ // Force layout update - measure and layout immediately with current dimensions
239
+ if (width > 0 && height > 0) {
240
+ val widthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)
241
+ val heightSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
242
+ newPreview.measure(widthSpec, heightSpec)
243
+ newPreview.layout(0, 0, width, height)
244
+ Log.i("ExpoIVSStagePreviewView", "📐 Forced layout: preview now ${newPreview.measuredWidth}x${newPreview.measuredHeight}")
245
+ } else {
246
+ // Parent not yet measured, use ViewTreeObserver to layout after measure
247
+ viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
248
+ override fun onGlobalLayout() {
249
+ viewTreeObserver.removeOnGlobalLayoutListener(this)
250
+ // Guard: check if still attached and preview exists
251
+ if (!isViewAttached) {
252
+ Log.w("ExpoIVSStagePreviewView", "📐 Deferred layout skipped - view detached")
253
+ return
254
+ }
255
+ val preview = ivsImagePreviewView ?: return
256
+ if (this@ExpoIVSStagePreviewView.width > 0 && this@ExpoIVSStagePreviewView.height > 0) {
257
+ val w = this@ExpoIVSStagePreviewView.width
258
+ val h = this@ExpoIVSStagePreviewView.height
259
+ val wSpec = MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY)
260
+ val hSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY)
261
+ try {
262
+ preview.measure(wSpec, hSpec)
263
+ preview.layout(0, 0, w, h)
264
+ Log.i("ExpoIVSStagePreviewView", "📐 Deferred layout: preview now ${preview.measuredWidth}x${preview.measuredHeight}")
265
+ } catch (e: Exception) {
266
+ Log.w("ExpoIVSStagePreviewView", "📐 Deferred layout error: ${e.message}")
267
+ }
268
+ }
269
+ }
270
+ })
271
+ }
272
+
273
+ // Also request layout for next frame
274
+ newPreview.requestLayout()
275
+ requestLayout()
276
+ invalidate()
277
+
134
278
  Log.i("ExpoIVSStagePreviewView", "✅ Successfully attached camera preview for: ${cameraDevice.descriptor.friendlyName}")
279
+ Log.i("ExpoIVSStagePreviewView", "📷 Preview dimensions: ${newPreview.width}x${newPreview.height}, visibility: ${newPreview.visibility}")
280
+ Log.i("ExpoIVSStagePreviewView", "📷 Parent dimensions: ${this.width}x${this.height}, childCount: ${this.childCount}")
135
281
  } catch (e: Exception) {
136
282
  Log.e("ExpoIVSStagePreviewView", "❌ Failed to attach camera preview: ${e.message}", e)
137
283
  this.ivsImagePreviewView = null
138
284
  this.currentPreviewDeviceUrn = null
139
285
 
140
- // Retry on exception as well
141
286
  if (retryCount < maxRetries) {
142
287
  retryCount++
143
288
  Log.w("ExpoIVSStagePreviewView", "Retrying after exception in ${retryDelayMs}ms (attempt $retryCount)...")
@@ -148,7 +293,8 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
148
293
 
149
294
  // Public method for manager to notify when camera changes (e.g., after swapCamera)
150
295
  fun refreshPreview() {
151
- Log.d("ExpoIVSStagePreviewView", "Refresh preview requested - clearing current preview and reattaching")
296
+ Log.i("ExpoIVSStagePreviewView", "🔄 Refresh preview requested - clearing current preview and reattaching")
297
+ Log.i("ExpoIVSStagePreviewView", "🔄 Current URN before refresh: $currentPreviewDeviceUrn")
152
298
 
153
299
  // Ensure we're on the main thread
154
300
  if (Looper.myLooper() != Looper.getMainLooper()) {
@@ -156,23 +302,38 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
156
302
  return
157
303
  }
158
304
 
159
- // Clear the current preview first
160
- if (ivsImagePreviewView != null) {
305
+ // Don't refresh if view is no longer attached
306
+ if (!isViewAttached) {
307
+ Log.w("ExpoIVSStagePreviewView", "🔄 Skipping refresh - view not attached")
308
+ return
309
+ }
310
+
311
+ // Capture and clear references BEFORE removing view
312
+ val oldPreview = ivsImagePreviewView
313
+ ivsImagePreviewView = null
314
+ currentPreviewDeviceUrn = null
315
+
316
+ // Now remove the old preview if it exists
317
+ if (oldPreview != null && oldPreview.parent == this) {
318
+ Log.i("ExpoIVSStagePreviewView", "🔄 Removing old preview view")
161
319
  try {
162
- removeView(ivsImagePreviewView)
320
+ removeView(oldPreview)
163
321
  } catch (e: Exception) {
164
322
  Log.w("ExpoIVSStagePreviewView", "Error removing old preview view: ${e.message}")
165
323
  }
166
- ivsImagePreviewView = null
167
324
  }
168
- currentPreviewDeviceUrn = null
169
325
 
170
326
  retryCount = 0
171
- // Add a small delay to ensure the old preview is fully detached
172
- // before attaching the new one (prevents green screen on camera swap)
327
+ // Add a delay to allow the new camera stream to initialize
173
328
  mainHandler.postDelayed({
174
- attachStreamWithRetry()
175
- }, 50)
329
+ // Double-check we're still attached before trying to attach stream
330
+ if (isViewAttached) {
331
+ Log.i("ExpoIVSStagePreviewView", "🔄 Now attaching new preview after delay")
332
+ attachStreamWithRetry()
333
+ } else {
334
+ Log.w("ExpoIVSStagePreviewView", "🔄 Skipping attach - view no longer attached")
335
+ }
336
+ }, 200)
176
337
  }
177
338
 
178
339
  private fun applyProps() {
@@ -180,7 +341,6 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
180
341
  setScaleMode(this.scaleMode)
181
342
  }
182
343
 
183
- // Prop setters
184
344
  fun setMirror(mirror: Boolean) {
185
345
  this.mirror = mirror
186
346
  (ivsImagePreviewView as? ImagePreviewView)?.setMirrored(this.mirror)
@@ -204,20 +364,62 @@ class ExpoIVSStagePreviewView(context: Context, appContext: AppContext) : ExpoVi
204
364
 
205
365
  override fun onAttachedToWindow() {
206
366
  super.onAttachedToWindow()
367
+ isViewAttached = true
207
368
  Log.d("ExpoIVSStagePreviewView", "View attached to window")
208
- // Re-attempt to attach if we don't have a preview yet
369
+
370
+ // If we don't have a preview yet, try to attach one
209
371
  if (ivsImagePreviewView == null) {
210
372
  retryCount = 0
211
373
  resolveStageManagerAndStreamWithRetry()
374
+ } else {
375
+ // Re-add the preview if it was removed during detach
376
+ val preview = ivsImagePreviewView
377
+ if (preview != null && preview.parent == null) {
378
+ Log.d("ExpoIVSStagePreviewView", "Re-adding preview on attach")
379
+ try {
380
+ addView(preview)
381
+ } catch (e: Exception) {
382
+ Log.w("ExpoIVSStagePreviewView", "Error re-adding preview: ${e.message}")
383
+ // Try fresh attach
384
+ ivsImagePreviewView = null
385
+ currentPreviewDeviceUrn = null
386
+ retryCount = 0
387
+ attachStreamWithRetry()
388
+ }
389
+ }
212
390
  }
213
391
  }
214
392
 
215
393
  override fun onDetachedFromWindow() {
216
- super.onDetachedFromWindow()
217
394
  Log.d("ExpoIVSStagePreviewView", "View detached from window")
218
- // Remove any pending retries
395
+ isViewAttached = false
396
+
397
+ // Remove pending callbacks FIRST to prevent any async operations
219
398
  mainHandler.removeCallbacksAndMessages(null)
220
- // Unregister from manager
399
+
400
+ // Unregister from manager BEFORE touching views
221
401
  stageManager?.unregisterPreviewView(this)
402
+
403
+ // Capture reference before clearing
404
+ val preview = ivsImagePreviewView
405
+
406
+ // Clear references BEFORE removing view to prevent race conditions
407
+ // This ensures no other code can access the preview during removal
408
+ ivsImagePreviewView = null
409
+ currentPreviewDeviceUrn = null
410
+
411
+ // Remove the preview view synchronously if it exists and is our child
412
+ // We do this AFTER clearing references but BEFORE calling super
413
+ // to ensure the view hierarchy is consistent
414
+ if (preview != null && preview.parent == this) {
415
+ try {
416
+ removeView(preview)
417
+ Log.d("ExpoIVSStagePreviewView", "Preview removed synchronously on detach")
418
+ } catch (e: Exception) {
419
+ Log.w("ExpoIVSStagePreviewView", "Error removing preview on detach: ${e.message}")
420
+ }
421
+ }
422
+
423
+ super.onDetachedFromWindow()
222
424
  }
223
425
  }
@@ -165,16 +165,39 @@ class IVSStageManager(private val context: Context) : Stage.Strategy, StageRende
165
165
  return
166
166
  }
167
167
 
168
+ Log.i("ExpoIVSStageManager", "🔄 Swapping camera from ${currentDevice.descriptor.friendlyName} to ${newCamera.descriptor.friendlyName}")
169
+
170
+ // First, notify preview views to clear their current preview
171
+ // This releases the old camera's preview before we switch
172
+ previewViews.mapNotNull { it.get() }.forEach { view ->
173
+ mainHandler.post {
174
+ try {
175
+ // Force clear the preview by calling refreshPreview which removes the old one
176
+ Log.i("ExpoIVSStageManager", "🔄 Clearing preview before swap")
177
+ } catch (e: Exception) {
178
+ Log.w("ExpoIVSStageManager", "Error clearing preview: ${e.message}")
179
+ }
180
+ }
181
+ }
182
+
183
+ // Update the local camera reference
168
184
  localCamera = newCamera
169
- cameraStream = ImageLocalStageStream(newCamera)
185
+
186
+ // Create new stream with video configuration
187
+ val oldStream = cameraStream
188
+ cameraStream = ImageLocalStageStream(newCamera, this.stageConfiguration.videoConfiguration)
189
+
190
+ // Refresh the stage strategy to use the new stream
170
191
  stage?.refreshStrategy()
171
- Log.i("ExpoIVSStageManager", "✅ Camera swapped to: ${newCamera.descriptor.friendlyName}")
192
+
193
+ Log.i("ExpoIVSStageManager", "✅ Camera swapped to: ${newCamera.descriptor.friendlyName}, URN: ${newCamera.descriptor.urn}")
172
194
 
173
195
  // Delay the preview refresh to allow the new camera stream to fully initialize
174
- // The green screen issue occurs when we try to get previewView before the stream is ready
196
+ // The back camera especially needs more time to warm up
175
197
  mainHandler.postDelayed({
198
+ Log.i("ExpoIVSStageManager", "🔄 Triggering preview refresh after camera swap")
176
199
  notifyPreviewViewsToRefresh()
177
- }, 150) // 150ms delay for stream initialization
200
+ }, 500) // 500ms delay for camera to fully initialize
178
201
  }
179
202
 
180
203
  private fun notifyPreviewViewsToRefresh() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-realtime-ivs-broadcast",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "An Expo module for real-time broadcasting using Amazon IVS.",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",