1766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu/* 2766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * Copyright (C) 2016 The Android Open Source Project 3766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * 4766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * Licensed under the Apache License, Version 2.0 (the "License"); 5766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * you may not use this file except in compliance with the License. 6766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * You may obtain a copy of the License at 7766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * 8766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * http://www.apache.org/licenses/LICENSE-2.0 9766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * 10766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * Unless required by applicable law or agreed to in writing, software 11766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * distributed under the License is distributed on an "AS IS" BASIS, 12766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * See the License for the specific language governing permissions and 14766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu * limitations under the License. 15766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu */ 16766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#define LOG_TAG "OpenGLRenderer" 17766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 1896bf5985d5a360568832fd26b6d5b44236c9343eMark Salyzyn#include "android/log.h" 1996bf5985d5a360568832fd26b6d5b44236c9343eMark Salyzyn 20766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "jni.h" 21766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "GraphicsJNI.h" 22766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "core_jni_helpers.h" 23766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 24766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "Animator.h" 25766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "Interpolator.h" 26766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "PropertyValuesAnimatorSet.h" 27766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "PropertyValuesHolder.h" 28766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "VectorDrawable.h" 29766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 30766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liunamespace android { 31766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuusing namespace uirenderer; 32766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuusing namespace VectorDrawable; 33766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 34766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic struct { 35766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jclass clazz; 36766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jmethodID callOnFinished; 37766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} gVectorDrawableAnimatorClassInfo; 38766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 39766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic JNIEnv* getEnv(JavaVM* vm) { 40766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JNIEnv* env; 41766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { 42766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return 0; 43766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 44766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return env; 45766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 46766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 47c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liustatic AnimationListener* createAnimationListener(JNIEnv* env, jobject finishListener, jint id) { 48766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu class AnimationListenerBridge : public AnimationListener { 49766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu public: 50c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu AnimationListenerBridge(JNIEnv* env, jobject finishListener, jint id) { 51766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu mFinishListener = env->NewGlobalRef(finishListener); 52766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->GetJavaVM(&mJvm); 53c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu mId = id; 54766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 55766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 56766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual ~AnimationListenerBridge() { 57766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu if (mFinishListener) { 58766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu onAnimationFinished(NULL); 59766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 60766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 61766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 62766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual void onAnimationFinished(BaseRenderNodeAnimator*) { 63766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu LOG_ALWAYS_FATAL_IF(!mFinishListener, "Finished listener twice?"); 64766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JNIEnv* env = getEnv(mJvm); 65766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->CallStaticVoidMethod( 66766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz, 67766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.callOnFinished, 68c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu mFinishListener, mId); 69766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu releaseJavaObject(); 70766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 71766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 72766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu private: 73766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void releaseJavaObject() { 74766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JNIEnv* env = getEnv(mJvm); 75766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->DeleteGlobalRef(mFinishListener); 76766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu mFinishListener = NULL; 77766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 78766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 79766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JavaVM* mJvm; 80766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jobject mFinishListener; 81c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu jint mId; 82766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu }; 83c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu return new AnimationListenerBridge(env, finishListener, id); 84766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 85766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 86766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic void addAnimator(JNIEnv*, jobject, jlong animatorSetPtr, jlong propertyHolderPtr, 87f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu jlong interpolatorPtr, jlong startDelay, jlong duration, jint repeatCount, 88f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu jint repeatMode) { 89766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 90766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesHolder* holder = reinterpret_cast<PropertyValuesHolder*>(propertyHolderPtr); 91766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu Interpolator* interpolator = reinterpret_cast<Interpolator*>(interpolatorPtr); 92f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu RepeatMode mode = static_cast<RepeatMode>(repeatMode); 93f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu set->addPropertyAnimator(holder, interpolator, startDelay, duration, repeatCount, mode); 94766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 95766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 96766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createAnimatorSet(JNIEnv*, jobject) { 97766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* animatorSet = new PropertyValuesAnimatorSet(); 98766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(animatorSet); 99766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 100766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 101718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liustatic void setVectorDrawableTarget(JNIEnv*, jobject,jlong animatorPtr, jlong vectorDrawablePtr) { 102718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(vectorDrawablePtr); 103718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorPtr); 104718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu set->setVectorDrawable(tree); 105718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu} 106718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu 107766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createGroupPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jint propertyId, 108766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jfloat startValue, jfloat endValue) { 109766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(nativePtr); 110766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu GroupPropertyValuesHolder* newHolder = new GroupPropertyValuesHolder(group, propertyId, 111766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu startValue, endValue); 112766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 113766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 114766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 115766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createPathDataPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jlong startValuePtr, 116766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jlong endValuePtr) { 117766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::Path* path = reinterpret_cast<VectorDrawable::Path*>(nativePtr); 118766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PathData* startData = reinterpret_cast<PathData*>(startValuePtr); 119766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PathData* endData = reinterpret_cast<PathData*>(endValuePtr); 120766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PathDataPropertyValuesHolder* newHolder = new PathDataPropertyValuesHolder(path, 121766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu startData, endData); 122766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 123766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 124766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 125766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createPathColorPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jint propertyId, 126766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu int startValue, jint endValue) { 127766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(nativePtr); 128766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu FullPathColorPropertyValuesHolder* newHolder = new FullPathColorPropertyValuesHolder(fullPath, 129766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu propertyId, startValue, endValue); 130766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 131766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 132766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 133766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createPathPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jint propertyId, 134766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu float startValue, jfloat endValue) { 135766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(nativePtr); 136766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu FullPathPropertyValuesHolder* newHolder = new FullPathPropertyValuesHolder(fullPath, 137766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu propertyId, startValue, endValue); 138766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 139766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 140766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 141766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createRootAlphaPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jfloat startValue, 142766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu float endValue) { 143766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(nativePtr); 144766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu RootAlphaPropertyValuesHolder* newHolder = new RootAlphaPropertyValuesHolder(tree, 145766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu startValue, endValue); 146766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 147766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 148c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liustatic void setFloatPropertyHolderData(JNIEnv* env, jobject, jlong propertyHolderPtr, 149766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jfloatArray srcData, jint length) { 150766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jfloat* propertyData = env->GetFloatArrayElements(srcData, nullptr); 151c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu PropertyValuesHolderImpl<float>* holder = 152c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu reinterpret_cast<PropertyValuesHolderImpl<float>*>(propertyHolderPtr); 153766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu holder->setPropertyDataSource(propertyData, length); 154766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->ReleaseFloatArrayElements(srcData, propertyData, JNI_ABORT); 155766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 156c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu 157c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liustatic void setIntPropertyHolderData(JNIEnv* env, jobject, jlong propertyHolderPtr, 158c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu jintArray srcData, jint length) { 159c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu jint* propertyData = env->GetIntArrayElements(srcData, nullptr); 160c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu PropertyValuesHolderImpl<int>* holder = 161c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu reinterpret_cast<PropertyValuesHolderImpl<int>*>(propertyHolderPtr); 162c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu holder->setPropertyDataSource(propertyData, length); 163c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu env->ReleaseIntArrayElements(srcData, propertyData, JNI_ABORT); 164c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu} 165c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu 166c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liustatic void start(JNIEnv* env, jobject, jlong animatorSetPtr, jobject finishListener, jint id) { 167766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 168c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu AnimationListener* listener = createAnimationListener(env, finishListener, id); 169766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu set->start(listener); 170766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 171766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 172c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liustatic void reverse(JNIEnv* env, jobject, jlong animatorSetPtr, jobject finishListener, jint id) { 173c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 174c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu AnimationListener* listener = createAnimationListener(env, finishListener, id); 175c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu set->reverse(listener); 176766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 177766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 178766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic void end(JNIEnv*, jobject, jlong animatorSetPtr) { 179766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 180766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu set->end(); 181766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 182766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 183766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic void reset(JNIEnv*, jobject, jlong animatorSetPtr) { 184766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 185766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu set->reset(); 186766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 187766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 188766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic const JNINativeMethod gMethods[] = { 189766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nCreateAnimatorSet", "()J", (void*)createAnimatorSet}, 190718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu {"nSetVectorDrawableTarget", "(JJ)V", (void*)setVectorDrawableTarget}, 191f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu {"nAddAnimator", "(JJJJJII)V", (void*)addAnimator}, 192c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu {"nSetPropertyHolderData", "(J[FI)V", (void*)setFloatPropertyHolderData}, 193c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu {"nSetPropertyHolderData", "(J[II)V", (void*)setIntPropertyHolderData}, 19428cfd20f024a56a927014351c8bdf9d8552603e3Doris Liu {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)start}, 19528cfd20f024a56a927014351c8bdf9d8552603e3Doris Liu {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)reverse}, 196299659ddb7e0c34ca094abe485bcd0989727fc07John Reck 197299659ddb7e0c34ca094abe485bcd0989727fc07John Reck // ------------- @FastNative ------------------- 198299659ddb7e0c34ca094abe485bcd0989727fc07John Reck 199299659ddb7e0c34ca094abe485bcd0989727fc07John Reck {"nCreateGroupPropertyHolder", "(JIFF)J", (void*)createGroupPropertyHolder}, 200299659ddb7e0c34ca094abe485bcd0989727fc07John Reck {"nCreatePathDataPropertyHolder", "(JJJ)J", (void*)createPathDataPropertyHolder}, 201299659ddb7e0c34ca094abe485bcd0989727fc07John Reck {"nCreatePathColorPropertyHolder", "(JIII)J", (void*)createPathColorPropertyHolder}, 202299659ddb7e0c34ca094abe485bcd0989727fc07John Reck {"nCreatePathPropertyHolder", "(JIFF)J", (void*)createPathPropertyHolder}, 203299659ddb7e0c34ca094abe485bcd0989727fc07John Reck {"nCreateRootAlphaPropertyHolder", "(JFF)J", (void*)createRootAlphaPropertyHolder}, 204299659ddb7e0c34ca094abe485bcd0989727fc07John Reck {"nEnd", "(J)V", (void*)end}, 205299659ddb7e0c34ca094abe485bcd0989727fc07John Reck {"nReset", "(J)V", (void*)reset}, 206766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu}; 207766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 20828cfd20f024a56a927014351c8bdf9d8552603e3Doris Liuconst char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT"; 209766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuint register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { 210766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName); 211766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env, 212766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz); 213766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 214766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie( 215766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env, gVectorDrawableAnimatorClassInfo.clazz, "callOnFinished", 21628cfd20f024a56a927014351c8bdf9d8552603e3Doris Liu "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V"); 217766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return RegisterMethodsOrDie(env, "android/graphics/drawable/AnimatedVectorDrawable", 218766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gMethods, NELEM(gMethods)); 219766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 220766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 221766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu}; // namespace android 222