Work around some Views not using ThemedReactContext
Summary: ThemedReactContext should be what is stored as the context on all RN views, but some legacy components use other things like an Activity. Changelog: [Internal] Reviewed By: cortinico Differential Revision: D37356865 fbshipit-source-id: bc914cd06a8846037506a50f254995a6e10c8a9c
This commit is contained in:
Родитель
97291bfa31
Коммит
777a92de2f
|
@ -11,6 +11,7 @@ import android.content.Context;
|
|||
import android.view.View;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.react.bridge.BaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReadableArray;
|
||||
|
@ -36,6 +37,8 @@ import java.util.Stack;
|
|||
public abstract class ViewManager<T extends View, C extends ReactShadowNode>
|
||||
extends BaseJavaModule {
|
||||
|
||||
private static String NAME = ViewManager.class.getSimpleName();
|
||||
|
||||
/**
|
||||
* For View recycling: we store a Stack of unused, dead Views. This is null by default, and when
|
||||
* null signals that View Recycling is disabled. `enableViewRecycling` must be explicitly called
|
||||
|
@ -199,8 +202,26 @@ public abstract class ViewManager<T extends View, C extends ReactShadowNode>
|
|||
* {@link ViewManager} subclass.
|
||||
*/
|
||||
public void onDropViewInstance(@NonNull T view) {
|
||||
// Some legacy components will return an Activity here instead of a ThemedReactContext
|
||||
Context viewContext = view.getContext();
|
||||
if (viewContext == null) {
|
||||
// Who knows! Anything is possible. Checking instanceof on null is an NPE,
|
||||
// So this is not redundant.
|
||||
FLog.e(NAME, "onDropViewInstance: view [" + view.getId() + "] has a null context");
|
||||
return;
|
||||
}
|
||||
if (!(viewContext instanceof ThemedReactContext)) {
|
||||
FLog.e(
|
||||
NAME,
|
||||
"onDropViewInstance: view ["
|
||||
+ view.getId()
|
||||
+ "] has a context that is not a ThemedReactContext: "
|
||||
+ viewContext);
|
||||
return;
|
||||
}
|
||||
|
||||
// View recycling
|
||||
ThemedReactContext themedReactContext = (ThemedReactContext) view.getContext();
|
||||
ThemedReactContext themedReactContext = (ThemedReactContext) viewContext;
|
||||
int surfaceId = themedReactContext.getSurfaceId();
|
||||
@Nullable Stack<T> recyclableViews = getRecyclableViewStack(surfaceId);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче