diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java index d0cd0fafeb5..88324df35ac 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ContextBasedViewPool.java @@ -6,15 +6,14 @@ */ package com.facebook.react.fabric.mounting; -import androidx.annotation.UiThread; import android.view.View; -import com.facebook.react.bridge.UiThreadUtil; +import androidx.annotation.UiThread; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ViewManagerRegistry; import java.util.WeakHashMap; /** Class that provides pool for views based on {@link ThemedReactContext}. */ -public final class ContextBasedViewPool { +public final class ContextBasedViewPool implements ViewFactory { private final WeakHashMap mContextViewPoolHashMap = new WeakHashMap<>(); private final ViewManagerRegistry mViewManagerRegistry; @@ -25,19 +24,18 @@ public final class ContextBasedViewPool { @UiThread void createView(ThemedReactContext context, String componentName) { - UiThreadUtil.assertOnUiThread(); getViewPool(context).createView(componentName, context); } @UiThread - View getOrCreateView(String componentName, ThemedReactContext context) { - UiThreadUtil.assertOnUiThread(); + @Override + public View getOrCreateView(String componentName, ThemedReactContext context) { return getViewPool(context).getOrCreateView(componentName, context); } @UiThread - void returnToPool(ThemedReactContext context, String componentName, View view) { - UiThreadUtil.assertOnUiThread(); + @Override + public void recycle(ThemedReactContext context, String componentName, View view) { getViewPool(context).returnToPool(componentName, view); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java index d589e7ab5dd..0ddd0487956 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.java @@ -42,12 +42,12 @@ public class MountingManager { private final ConcurrentHashMap mTagToViewState; private final ViewManagerRegistry mViewManagerRegistry; private final RootViewManager mRootViewManager = new RootViewManager(); - private final ContextBasedViewPool mViewPool; + private final ViewFactory mViewFactory; public MountingManager(ViewManagerRegistry viewManagerRegistry) { mTagToViewState = new ConcurrentHashMap<>(); mViewManagerRegistry = viewManagerRegistry; - mViewPool = new ContextBasedViewPool(viewManagerRegistry); + mViewFactory = new ViewManagerFactory(viewManagerRegistry); } @UiThread @@ -91,7 +91,7 @@ public class MountingManager { mTagToViewState.remove(reactTag); Context context = view.getContext(); - mViewPool.returnToPool( + mViewFactory.recycle( (ThemedReactContext) context, Assertions.assertNotNull(viewManager).getName(), view); } @@ -174,7 +174,7 @@ public class MountingManager { if (isLayoutable) { viewManager = mViewManagerRegistry.get(componentName); - view = mViewPool.getOrCreateView(componentName, themedReactContext); + view = mViewFactory.getOrCreateView(componentName, themedReactContext); view.setId(reactTag); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewFactory.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewFactory.java new file mode 100644 index 00000000000..408119dc553 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewFactory.java @@ -0,0 +1,18 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +package com.facebook.react.fabric.mounting; + +import android.view.View; +import com.facebook.react.uimanager.ThemedReactContext; + +public interface ViewFactory { + + View getOrCreateView(String componentName, ThemedReactContext context); + + void recycle(ThemedReactContext context, String componentName, View view); + +} diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewManagerFactory.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewManagerFactory.java new file mode 100644 index 00000000000..46a053c994b --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/ViewManagerFactory.java @@ -0,0 +1,34 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +package com.facebook.react.fabric.mounting; + +import androidx.annotation.UiThread; +import android.view.View; +import com.facebook.react.uimanager.ThemedReactContext; +import com.facebook.react.uimanager.ViewManagerRegistry; + +public class ViewManagerFactory implements ViewFactory { + + private ViewManagerRegistry mViewManagerRegistry; + + ViewManagerFactory(ViewManagerRegistry viewManagerRegistry) { + mViewManagerRegistry = viewManagerRegistry; + } + + @UiThread + @Override + public View getOrCreateView( + String componentName, ThemedReactContext context) { + return mViewManagerRegistry.get(componentName).createView(context, null); + } + + @UiThread + @Override + public void recycle(ThemedReactContext context, String componentName, View view) { + // do nothing + } +}