react-native-navigation的迁移库

SyncUiImplementation.java 3.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.reactnativenavigation.react;
  2. import android.support.annotation.Nullable;
  3. import com.facebook.react.bridge.ReactApplicationContext;
  4. import com.facebook.react.bridge.ReadableArray;
  5. import com.facebook.react.bridge.ReadableMap;
  6. import com.facebook.react.uimanager.ThemedReactContext;
  7. import com.facebook.react.uimanager.UIImplementation;
  8. import com.facebook.react.uimanager.UIImplementationProvider;
  9. import com.facebook.react.uimanager.UIManagerModule;
  10. import com.facebook.react.uimanager.ViewManager;
  11. import com.facebook.react.uimanager.common.MeasureSpecProvider;
  12. import com.facebook.react.uimanager.common.SizeMonitoringFrameLayout;
  13. import com.facebook.react.uimanager.events.EventDispatcher;
  14. import java.util.List;
  15. @SuppressWarnings("WeakerAccess")
  16. public class SyncUiImplementation extends UIImplementation {
  17. private static final Object lock = new Object();
  18. public static class Provider extends UIImplementationProvider {
  19. @Override
  20. public UIImplementation createUIImplementation(ReactApplicationContext reactContext, List<ViewManager> viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) {
  21. return new SyncUiImplementation(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs);
  22. }
  23. @Override
  24. public UIImplementation createUIImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) {
  25. return new SyncUiImplementation(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs);
  26. }
  27. }
  28. public SyncUiImplementation(ReactApplicationContext reactContext, List<ViewManager> viewManagerList, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) {
  29. super(reactContext, viewManagerList, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs);
  30. }
  31. public SyncUiImplementation(ReactApplicationContext reactContext, UIManagerModule.ViewManagerResolver viewManagerResolver, EventDispatcher eventDispatcher, int minTimeLeftInFrameForNonBatchedOperationMs) {
  32. super(reactContext, viewManagerResolver, eventDispatcher, minTimeLeftInFrameForNonBatchedOperationMs);
  33. }
  34. @Override
  35. public void manageChildren(
  36. int viewTag,
  37. @Nullable ReadableArray moveFrom,
  38. @Nullable ReadableArray moveTo,
  39. @Nullable ReadableArray addChildTags,
  40. @Nullable ReadableArray addAtIndices,
  41. @Nullable ReadableArray removeFrom) {
  42. synchronized (lock) {
  43. super.manageChildren(viewTag, moveFrom, moveTo, addChildTags, addAtIndices, removeFrom);
  44. }
  45. }
  46. @Override
  47. public void setChildren(int viewTag, ReadableArray childrenTags) {
  48. synchronized (lock) {
  49. super.setChildren(viewTag, childrenTags);
  50. }
  51. }
  52. @Override
  53. public void createView(int tag, String className, int rootViewTag, ReadableMap props) {
  54. synchronized (lock) {
  55. super.createView(tag, className, rootViewTag, props);
  56. }
  57. }
  58. @Override
  59. public void removeRootShadowNode(int rootViewTag) {
  60. synchronized (lock) {
  61. super.removeRootShadowNode(rootViewTag);
  62. }
  63. }
  64. @Override
  65. public <T extends SizeMonitoringFrameLayout & MeasureSpecProvider> void registerRootView(T rootView, int tag, ThemedReactContext context) {
  66. synchronized (lock) {
  67. super.registerRootView(rootView, tag, context);
  68. }
  69. }
  70. }