#pragma once #include #include #include #include #include "JNIHelper.h" namespace reanimated { using namespace facebook::jni; using namespace facebook; class LayoutAnimations : public jni::HybridClass { using AnimationStartingBlock = std::function>)>; using HasAnimationBlock = std::function; using ShouldAnimateExitingBlock = std::function; #ifndef NDEBUG using CheckDuplicateSharedTag = std::function; #endif using ClearAnimationConfigBlock = std::function; using CancelAnimationBlock = std::function; using FindPrecedingViewTagForTransitionBlock = std::function; public: static auto constexpr kJavaDescriptor = "Lcom/swmansion/reanimated/layoutReanimation/LayoutAnimations;"; static jni::local_ref initHybrid( jni::alias_ref jThis); static void registerNatives(); void startAnimationForTag( int tag, int type, alias_ref> values); bool hasAnimationForTag(int tag, int type); bool shouldAnimateExiting(int tag, bool shouldAnimate); bool isLayoutAnimationEnabled(); void setAnimationStartingBlock(AnimationStartingBlock animationStartingBlock); void setHasAnimationBlock(HasAnimationBlock hasAnimationBlock); void setShouldAnimateExitingBlock( ShouldAnimateExitingBlock shouldAnimateExitingBlock); #ifndef NDEBUG void setCheckDuplicateSharedTag( CheckDuplicateSharedTag checkDuplicateSharedTag); void checkDuplicateSharedTag(int viewTag, int screenTag); #endif void setClearAnimationConfigBlock( ClearAnimationConfigBlock clearAnimationConfigBlock); void setCancelAnimationForTag(CancelAnimationBlock cancelAnimationBlock); void setFindPrecedingViewTagForTransition( FindPrecedingViewTagForTransitionBlock findPrecedingViewTagForTransitionBlock); void progressLayoutAnimation( int tag, const jni::local_ref &updates, bool isSharedTransition); void endLayoutAnimation(int tag, bool removeView); void clearAnimationConfigForTag(int tag); void cancelAnimationForTag(int tag); int findPrecedingViewTagForTransition(int tag); private: friend HybridBase; jni::global_ref javaPart_; AnimationStartingBlock animationStartingBlock_; HasAnimationBlock hasAnimationBlock_; ShouldAnimateExitingBlock shouldAnimateExitingBlock_; ClearAnimationConfigBlock clearAnimationConfigBlock_; CancelAnimationBlock cancelAnimationBlock_; FindPrecedingViewTagForTransitionBlock findPrecedingViewTagForTransitionBlock_; #ifndef NDEBUG CheckDuplicateSharedTag checkDuplicateSharedTag_; #endif explicit LayoutAnimations( jni::alias_ref jThis); }; }; // namespace reanimated