@ReactMethod public void applyShadowForView(final Integer tag, final ReadableMap param) { Log.d(TAG,"AndroidShadowManager applyShadowForView! tag: " + tag); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { return; } UIManagerModule uiManager = reactContext.getNativeModule(UIManagerModule.class); uiManager.addUIBlock(new UIBlock() { @Override public void execute(NativeViewHierarchyManager nvhm) { ReactViewGroup targetView = (ReactViewGroup) nvhm.resolveView(tag); Log.d(TAG,"AndroidShadowManager view w = " + targetView.getWidth() + " h = " + targetView.getHeight()); // targetView.setBackgroundColor(Color.CYAN); targetView.getViewTreeObserver().addOnGlobalLayoutListener(new OutlineAdjuster(targetView,param)); } }); }
private void tryInitializeHandlerForReactRootView(int ancestorViewTag) { UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class); final int rootViewTag = uiManager.resolveRootTagFromReactTag(ancestorViewTag); if (rootViewTag < 1) { throw new JSApplicationIllegalArgumentException("Could find root view for a given ancestor with tag " + ancestorViewTag); } synchronized (mRoots) { for (int i = 0; i < mRoots.size(); i++) { RNGestureHandlerRootHelper root = mRoots.get(i); if (root.getRootView().getRootViewTag() == rootViewTag) { // we have found root helper registered for a given react root, we don't need to // initialize a new one then return; } } } synchronized (mEnqueuedRootViewInit) { if (mEnqueuedRootViewInit.contains(rootViewTag)) { // root view initialization already enqueued -> we skip return; } mEnqueuedRootViewInit.add(rootViewTag); } // root helper for a given root tag has not been found, we may wat to check if the root view is // an instance of RNGestureHandlerEnabledRootView and then initialize gesture handler with it uiManager.addUIBlock(new UIBlock() { @Override public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) { View view = nativeViewHierarchyManager.resolveView(rootViewTag); if (view instanceof RNGestureHandlerEnabledRootView) { ((RNGestureHandlerEnabledRootView) view).initialize(); } else { // Seems like the root view is something else than RNGestureHandlerEnabledRootView, this // is fine though as long as gestureHandlerRootHOC is used in JS // FIXME: check and warn about gestureHandlerRootHOC } synchronized (mEnqueuedRootViewInit) { mEnqueuedRootViewInit.remove(new Integer(rootViewTag)); } } }); }