mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-09 13:37:58 +08:00
Revert D4494386: [react-native][PR] BREAKING - Remove LayoutAnimation experimental flag on Android
Differential Revision: D4494386 fbshipit-source-id: 1ba6fc60467d1c3347c90e52a3251e6591a99e25
This commit is contained in:
committed by
Facebook Github Bot
parent
b47000a051
commit
28ed5eddf2
@@ -76,6 +76,8 @@ public class NativeViewHierarchyManager {
|
||||
private final RootViewManager mRootViewManager;
|
||||
private final LayoutAnimationController mLayoutAnimator = new LayoutAnimationController();
|
||||
|
||||
private boolean mLayoutAnimationEnabled;
|
||||
|
||||
public NativeViewHierarchyManager(ViewManagerRegistry viewManagers) {
|
||||
this(viewManagers, new RootViewManager());
|
||||
}
|
||||
@@ -110,6 +112,10 @@ public class NativeViewHierarchyManager {
|
||||
return mAnimationRegistry;
|
||||
}
|
||||
|
||||
public void setLayoutAnimationEnabled(boolean enabled) {
|
||||
mLayoutAnimationEnabled = enabled;
|
||||
}
|
||||
|
||||
public void updateProperties(int tag, ReactStylesDiffMap props) {
|
||||
UiThreadUtil.assertOnUiThread();
|
||||
|
||||
@@ -186,7 +192,8 @@ public class NativeViewHierarchyManager {
|
||||
}
|
||||
|
||||
private void updateLayout(View viewToUpdate, int x, int y, int width, int height) {
|
||||
if (mLayoutAnimator.shouldAnimateLayout(viewToUpdate)) {
|
||||
if (mLayoutAnimationEnabled &&
|
||||
mLayoutAnimator.shouldAnimateLayout(viewToUpdate)) {
|
||||
mLayoutAnimator.applyLayoutUpdate(viewToUpdate, x, y, width, height);
|
||||
} else {
|
||||
viewToUpdate.layout(x, y, x + width, y + height);
|
||||
@@ -356,7 +363,8 @@ public class NativeViewHierarchyManager {
|
||||
|
||||
View viewToRemove = viewManager.getChildAt(viewToManage, indexToRemove);
|
||||
|
||||
if (mLayoutAnimator.shouldAnimateLayout(viewToRemove) &&
|
||||
if (mLayoutAnimationEnabled &&
|
||||
mLayoutAnimator.shouldAnimateLayout(viewToRemove) &&
|
||||
arrayContains(tagsToDelete, viewToRemove.getId())) {
|
||||
// The view will be removed and dropped by the 'delete' layout animation
|
||||
// instead, so do nothing
|
||||
@@ -403,7 +411,8 @@ public class NativeViewHierarchyManager {
|
||||
tagsToDelete));
|
||||
}
|
||||
|
||||
if (mLayoutAnimator.shouldAnimateLayout(viewToDestroy)) {
|
||||
if (mLayoutAnimationEnabled &&
|
||||
mLayoutAnimator.shouldAnimateLayout(viewToDestroy)) {
|
||||
mLayoutAnimator.deleteView(viewToDestroy, new LayoutAnimationListener() {
|
||||
@Override
|
||||
public void onAnimationEnd() {
|
||||
|
||||
@@ -569,6 +569,21 @@ public class UIImplementation {
|
||||
mOperationsQueue.enqueueRemoveAnimation(animationID);
|
||||
}
|
||||
|
||||
/**
|
||||
* LayoutAnimation API on Android is currently experimental. Therefore, it needs to be enabled
|
||||
* explicitly in order to avoid regression in existing application written for iOS using this API.
|
||||
*
|
||||
* Warning : This method will be removed in future version of React Native, and layout animation
|
||||
* will be enabled by default, so always check for its existence before invoking it.
|
||||
*
|
||||
* TODO(9139831) : remove this method once layout animation is fully stable.
|
||||
*
|
||||
* @param enabled whether layout animation is enabled or not
|
||||
*/
|
||||
public void setLayoutAnimationEnabledExperimental(boolean enabled) {
|
||||
mOperationsQueue.enqueueSetLayoutAnimationEnabled(enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure an animation to be used for the native layout changes, and native views
|
||||
* creation. The animation will only apply during the current batch operations.
|
||||
|
||||
@@ -474,6 +474,22 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
|
||||
mUIImplementation.showPopupMenu(reactTag, items, error, success);
|
||||
}
|
||||
|
||||
/**
|
||||
* LayoutAnimation API on Android is currently experimental. Therefore, it needs to be enabled
|
||||
* explicitly in order to avoid regression in existing application written for iOS using this API.
|
||||
*
|
||||
* Warning : This method will be removed in future version of React Native, and layout animation
|
||||
* will be enabled by default, so always check for its existence before invoking it.
|
||||
*
|
||||
* TODO(9139831) : remove this method once layout animation is fully stable.
|
||||
*
|
||||
* @param enabled whether layout animation is enabled or not
|
||||
*/
|
||||
@ReactMethod
|
||||
public void setLayoutAnimationEnabledExperimental(boolean enabled) {
|
||||
mUIImplementation.setLayoutAnimationEnabledExperimental(enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure an animation to be used for the native layout changes, and native views
|
||||
* creation. The animation will only apply during the current batch operations.
|
||||
|
||||
@@ -351,6 +351,19 @@ public class UIViewOperationQueue {
|
||||
}
|
||||
}
|
||||
|
||||
private class SetLayoutAnimationEnabledOperation implements UIOperation {
|
||||
private final boolean mEnabled;
|
||||
|
||||
private SetLayoutAnimationEnabledOperation(final boolean enabled) {
|
||||
mEnabled = enabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
mNativeViewHierarchyManager.setLayoutAnimationEnabled(mEnabled);
|
||||
}
|
||||
}
|
||||
|
||||
private class ConfigureLayoutAnimationOperation implements UIOperation {
|
||||
private final ReadableMap mConfig;
|
||||
|
||||
@@ -686,6 +699,11 @@ public class UIViewOperationQueue {
|
||||
mOperations.add(new RemoveAnimationOperation(animationID));
|
||||
}
|
||||
|
||||
public void enqueueSetLayoutAnimationEnabled(
|
||||
final boolean enabled) {
|
||||
mOperations.add(new SetLayoutAnimationEnabledOperation(enabled));
|
||||
}
|
||||
|
||||
public void enqueueConfigureLayoutAnimation(
|
||||
final ReadableMap config,
|
||||
final Callback onSuccess,
|
||||
|
||||
Reference in New Issue
Block a user