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 18766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "jni.h" 19766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "GraphicsJNI.h" 20766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "core_jni_helpers.h" 21766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "log/log.h" 22766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 23766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "Animator.h" 24766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "Interpolator.h" 25766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "PropertyValuesAnimatorSet.h" 26766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "PropertyValuesHolder.h" 27766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu#include "VectorDrawable.h" 28766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 29766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liunamespace android { 30766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuusing namespace uirenderer; 31766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuusing namespace VectorDrawable; 32766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 33766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic struct { 34766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jclass clazz; 35766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jmethodID callOnFinished; 36766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} gVectorDrawableAnimatorClassInfo; 37766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 38766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic JNIEnv* getEnv(JavaVM* vm) { 39766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JNIEnv* env; 40766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { 41766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return 0; 42766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 43766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return env; 44766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 45766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 46c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liustatic AnimationListener* createAnimationListener(JNIEnv* env, jobject finishListener, jint id) { 47766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu class AnimationListenerBridge : public AnimationListener { 48766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu public: 49c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu AnimationListenerBridge(JNIEnv* env, jobject finishListener, jint id) { 50766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu mFinishListener = env->NewGlobalRef(finishListener); 51766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->GetJavaVM(&mJvm); 52c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu mId = id; 53766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 54766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 55766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual ~AnimationListenerBridge() { 56766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu if (mFinishListener) { 57766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu onAnimationFinished(NULL); 58766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 59766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 60766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 61766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu virtual void onAnimationFinished(BaseRenderNodeAnimator*) { 62766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu LOG_ALWAYS_FATAL_IF(!mFinishListener, "Finished listener twice?"); 63766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JNIEnv* env = getEnv(mJvm); 64766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->CallStaticVoidMethod( 65766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz, 66766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.callOnFinished, 67c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu mFinishListener, mId); 68766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu releaseJavaObject(); 69766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 70766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 71766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu private: 72766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu void releaseJavaObject() { 73766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JNIEnv* env = getEnv(mJvm); 74766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->DeleteGlobalRef(mFinishListener); 75766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu mFinishListener = NULL; 76766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu } 77766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 78766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu JavaVM* mJvm; 79766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jobject mFinishListener; 80c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu jint mId; 81766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu }; 82c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu return new AnimationListenerBridge(env, finishListener, id); 83766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 84766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 85766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic void addAnimator(JNIEnv*, jobject, jlong animatorSetPtr, jlong propertyHolderPtr, 86f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu jlong interpolatorPtr, jlong startDelay, jlong duration, jint repeatCount, 87f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu jint repeatMode) { 88766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 89766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesHolder* holder = reinterpret_cast<PropertyValuesHolder*>(propertyHolderPtr); 90766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu Interpolator* interpolator = reinterpret_cast<Interpolator*>(interpolatorPtr); 91f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu RepeatMode mode = static_cast<RepeatMode>(repeatMode); 92f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu set->addPropertyAnimator(holder, interpolator, startDelay, duration, repeatCount, mode); 93766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 94766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 95766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createAnimatorSet(JNIEnv*, jobject) { 96766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* animatorSet = new PropertyValuesAnimatorSet(); 97766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(animatorSet); 98766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 99766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 100718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liustatic void setVectorDrawableTarget(JNIEnv*, jobject,jlong animatorPtr, jlong vectorDrawablePtr) { 101718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(vectorDrawablePtr); 102718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorPtr); 103718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu set->setVectorDrawable(tree); 104718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu} 105718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu 106766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createGroupPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jint propertyId, 107766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jfloat startValue, jfloat endValue) { 108766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::Group* group = reinterpret_cast<VectorDrawable::Group*>(nativePtr); 109766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu GroupPropertyValuesHolder* newHolder = new GroupPropertyValuesHolder(group, propertyId, 110766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu startValue, endValue); 111766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 112766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 113766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 114766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createPathDataPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jlong startValuePtr, 115766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jlong endValuePtr) { 116766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::Path* path = reinterpret_cast<VectorDrawable::Path*>(nativePtr); 117766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PathData* startData = reinterpret_cast<PathData*>(startValuePtr); 118766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PathData* endData = reinterpret_cast<PathData*>(endValuePtr); 119766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PathDataPropertyValuesHolder* newHolder = new PathDataPropertyValuesHolder(path, 120766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu startData, endData); 121766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 122766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 123766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 124766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createPathColorPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jint propertyId, 125766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu int startValue, jint endValue) { 126766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(nativePtr); 127766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu FullPathColorPropertyValuesHolder* newHolder = new FullPathColorPropertyValuesHolder(fullPath, 128766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu propertyId, startValue, endValue); 129766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 130766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 131766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 132766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createPathPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jint propertyId, 133766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu float startValue, jfloat endValue) { 134766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::FullPath* fullPath = reinterpret_cast<VectorDrawable::FullPath*>(nativePtr); 135766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu FullPathPropertyValuesHolder* newHolder = new FullPathPropertyValuesHolder(fullPath, 136766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu propertyId, startValue, endValue); 137766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 138766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 139766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 140766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic jlong createRootAlphaPropertyHolder(JNIEnv*, jobject, jlong nativePtr, jfloat startValue, 141766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu float endValue) { 142766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu VectorDrawable::Tree* tree = reinterpret_cast<VectorDrawable::Tree*>(nativePtr); 143766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu RootAlphaPropertyValuesHolder* newHolder = new RootAlphaPropertyValuesHolder(tree, 144766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu startValue, endValue); 145766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return reinterpret_cast<jlong>(newHolder); 146766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 147c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liustatic void setFloatPropertyHolderData(JNIEnv* env, jobject, jlong propertyHolderPtr, 148766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jfloatArray srcData, jint length) { 149766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu jfloat* propertyData = env->GetFloatArrayElements(srcData, nullptr); 150c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu PropertyValuesHolderImpl<float>* holder = 151c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu reinterpret_cast<PropertyValuesHolderImpl<float>*>(propertyHolderPtr); 152766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu holder->setPropertyDataSource(propertyData, length); 153766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env->ReleaseFloatArrayElements(srcData, propertyData, JNI_ABORT); 154766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 155c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu 156c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liustatic void setIntPropertyHolderData(JNIEnv* env, jobject, jlong propertyHolderPtr, 157c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu jintArray srcData, jint length) { 158c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu jint* propertyData = env->GetIntArrayElements(srcData, nullptr); 159c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu PropertyValuesHolderImpl<int>* holder = 160c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu reinterpret_cast<PropertyValuesHolderImpl<int>*>(propertyHolderPtr); 161c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu holder->setPropertyDataSource(propertyData, length); 162c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu env->ReleaseIntArrayElements(srcData, propertyData, JNI_ABORT); 163c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu} 164c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu 165c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liustatic void start(JNIEnv* env, jobject, jlong animatorSetPtr, jobject finishListener, jint id) { 166766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 167c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu AnimationListener* listener = createAnimationListener(env, finishListener, id); 168766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu set->start(listener); 169766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 170766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 171c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liustatic void reverse(JNIEnv* env, jobject, jlong animatorSetPtr, jobject finishListener, jint id) { 172c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 173c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu AnimationListener* listener = createAnimationListener(env, finishListener, id); 174c4bb185d41cfb960ed9a3178a4f8974c351abdb0Doris Liu set->reverse(listener); 175766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 176766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 177766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic void end(JNIEnv*, jobject, jlong animatorSetPtr) { 178766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 179766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu set->end(); 180766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 181766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 182766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic void reset(JNIEnv*, jobject, jlong animatorSetPtr) { 183766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu PropertyValuesAnimatorSet* set = reinterpret_cast<PropertyValuesAnimatorSet*>(animatorSetPtr); 184766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu set->reset(); 185766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 186766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 187766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liustatic const JNINativeMethod gMethods[] = { 188766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nCreateAnimatorSet", "()J", (void*)createAnimatorSet}, 189718cd3eb70703c43f29ca37907bbf0e153d8cca0Doris Liu {"nSetVectorDrawableTarget", "(JJ)V", (void*)setVectorDrawableTarget}, 190f7167e8f286cff91dec01fdf617bf568f1d100e6Doris Liu {"nAddAnimator", "(JJJJJII)V", (void*)addAnimator}, 191766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nCreateGroupPropertyHolder", "!(JIFF)J", (void*)createGroupPropertyHolder}, 192766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nCreatePathDataPropertyHolder", "!(JJJ)J", (void*)createPathDataPropertyHolder}, 193766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nCreatePathColorPropertyHolder", "!(JIII)J", (void*)createPathColorPropertyHolder}, 194766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nCreatePathPropertyHolder", "!(JIFF)J", (void*)createPathPropertyHolder}, 195766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nCreateRootAlphaPropertyHolder", "!(JFF)J", (void*)createRootAlphaPropertyHolder}, 196c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu {"nSetPropertyHolderData", "(J[FI)V", (void*)setFloatPropertyHolderData}, 197c9493879d7b38b9d0b5b09aa3760966a3ca33eacDoris Liu {"nSetPropertyHolderData", "(J[II)V", (void*)setIntPropertyHolderData}, 19828cfd20f024a56a927014351c8bdf9d8552603e3Doris Liu {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)start}, 19928cfd20f024a56a927014351c8bdf9d8552603e3Doris Liu {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)reverse}, 200766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nEnd", "!(J)V", (void*)end}, 201766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu {"nReset", "!(J)V", (void*)reset}, 202766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu}; 203766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 20428cfd20f024a56a927014351c8bdf9d8552603e3Doris Liuconst char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT"; 205766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liuint register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { 206766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName); 207766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env, 208766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.clazz); 209766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 210766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gVectorDrawableAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie( 211766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu env, gVectorDrawableAnimatorClassInfo.clazz, "callOnFinished", 21228cfd20f024a56a927014351c8bdf9d8552603e3Doris Liu "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V"); 213766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu return RegisterMethodsOrDie(env, "android/graphics/drawable/AnimatedVectorDrawable", 214766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu gMethods, NELEM(gMethods)); 215766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu} 216766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu 217766431aa57c16ece8842287a92b2e7208e3b8ac3Doris Liu}; // namespace android 218