Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cbee971a authored by John Reck's avatar John Reck
Browse files

resolved conflicts for merge of 08372601 to lmp-mr1-dev-plus-aosp

Change-Id: I86b78ada4f30c23ae1232ac5a509986d5b8dc546
parents 161b51ba 08372601
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -189,9 +189,6 @@ public class RenderNodeAnimator extends Animator {
    }

    private void doStart() {
        mState = STATE_RUNNING;
        nStart(mNativePtr.get(), this);

        // Alpha is a special snowflake that has the canonical value stored
        // in mTransformationInfo instead of in RenderNode, so we need to update
        // it with the final value here.
@@ -201,7 +198,7 @@ public class RenderNodeAnimator extends Animator {
            mViewTarget.mTransformationInfo.mAlpha = mFinalValue;
        }

        notifyStartListeners();
        moveToRunningState();

        if (mViewTarget != null) {
            // Kick off a frame to start the process
@@ -209,6 +206,12 @@ public class RenderNodeAnimator extends Animator {
        }
    }

    private void moveToRunningState() {
        mState = STATE_RUNNING;
        nStart(mNativePtr.get(), this);
        notifyStartListeners();
    }

    private void notifyStartListeners() {
        final ArrayList<AnimatorListener> listeners = cloneListeners();
        final int numListeners = listeners == null ? 0 : listeners.size();
@@ -222,7 +225,7 @@ public class RenderNodeAnimator extends Animator {
        if (mState != STATE_PREPARE && mState != STATE_FINISHED) {
            if (mState == STATE_DELAYED) {
                getHelper().removeDelayedAnimation(this);
                notifyStartListeners();
                moveToRunningState();
            }
            nEnd(mNativePtr.get());

@@ -242,7 +245,15 @@ public class RenderNodeAnimator extends Animator {
    @Override
    public void end() {
        if (mState != STATE_FINISHED) {
            if (mState < STATE_RUNNING) {
                getHelper().removeDelayedAnimation(this);
                doStart();
            }
            nEnd(mNativePtr.get());
            if (mViewTarget != null) {
                // Kick off a frame to flush the state change
                mViewTarget.invalidateViewProperty(true, false);
            }
        }
    }

+17 −3
Original line number Diff line number Diff line
@@ -47,6 +47,15 @@ static JNIEnv* getEnv(JavaVM* vm) {
    return env;
}

class AnimationListenerLifecycleChecker : public AnimationListener {
public:
    virtual void onAnimationFinished(BaseRenderNodeAnimator* animator) {
        LOG_ALWAYS_FATAL("Lifecycle failure, nStart(%p) wasn't called", animator);
    }
};

static AnimationListenerLifecycleChecker sLifecycleChecker;

class AnimationListenerBridge : public AnimationListener {
public:
    // This holds a strong reference to a Java WeakReference<T> object. This avoids
@@ -102,6 +111,7 @@ static jlong createAnimator(JNIEnv* env, jobject clazz,
        jint propertyRaw, jfloat finalValue) {
    RenderPropertyAnimator::RenderProperty property = toRenderProperty(propertyRaw);
    BaseRenderNodeAnimator* animator = new RenderPropertyAnimator(property, finalValue);
    animator->setListener(&sLifecycleChecker);
    return reinterpret_cast<jlong>( animator );
}

@@ -109,6 +119,7 @@ static jlong createCanvasPropertyFloatAnimator(JNIEnv* env, jobject clazz,
        jlong canvasPropertyPtr, jfloat finalValue) {
    CanvasPropertyPrimitive* canvasProperty = reinterpret_cast<CanvasPropertyPrimitive*>(canvasPropertyPtr);
    BaseRenderNodeAnimator* animator = new CanvasPropertyPrimitiveAnimator(canvasProperty, finalValue);
    animator->setListener(&sLifecycleChecker);
    return reinterpret_cast<jlong>( animator );
}

@@ -119,12 +130,14 @@ static jlong createCanvasPropertyPaintAnimator(JNIEnv* env, jobject clazz,
    CanvasPropertyPaintAnimator::PaintField paintField = toPaintField(paintFieldRaw);
    BaseRenderNodeAnimator* animator = new CanvasPropertyPaintAnimator(
            canvasProperty, paintField, finalValue);
    animator->setListener(&sLifecycleChecker);
    return reinterpret_cast<jlong>( animator );
}

static jlong createRevealAnimator(JNIEnv* env, jobject clazz,
        jint centerX, jint centerY, jfloat startRadius, jfloat endRadius) {
    BaseRenderNodeAnimator* animator = new RevealAnimator(centerX, centerY, startRadius, endRadius);
    animator->setListener(&sLifecycleChecker);
    return reinterpret_cast<jlong>( animator );
}

@@ -163,9 +176,7 @@ static void setAllowRunningAsync(JNIEnv* env, jobject clazz, jlong animatorPtr,

static void start(JNIEnv* env, jobject clazz, jlong animatorPtr, jobject finishListener) {
    BaseRenderNodeAnimator* animator = reinterpret_cast<BaseRenderNodeAnimator*>(animatorPtr);
    if (finishListener) {
    animator->setListener(new AnimationListenerBridge(env, finishListener));
    }
    animator->start();
}

@@ -200,6 +211,9 @@ static JNINativeMethod gMethods[] = {
};

int register_android_view_RenderNodeAnimator(JNIEnv* env) {
#ifdef USE_OPENGL_RENDERER
    sLifecycleChecker.incStrong(0);
#endif
    gRenderNodeAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName);
    gRenderNodeAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env,
                                                            gRenderNodeAnimatorClassInfo.clazz);