Skip to content
This repository has been archived by the owner on Nov 14, 2018. It is now read-only.

Added ViewPropertyAnimator extensions #560

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions api/current.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@ package androidx.core.animation {
method public static android.animation.Animator.AnimatorListener doOnStart(android.animation.Animator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
}

public final class ViewPropertyAnimatorKt {
ctor public ViewPropertyAnimatorKt();
method public static android.animation.Animator.AnimatorListener doOnCancel(android.view.ViewPropertyAnimator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
method public static android.animation.Animator.AnimatorListener doOnEnd(android.view.ViewPropertyAnimator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
method public static android.animation.Animator.AnimatorListener doOnRepeat(android.view.ViewPropertyAnimator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
method public static android.animation.Animator.AnimatorListener doOnStart(android.view.ViewPropertyAnimator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit> action);
method public static android.animation.ValueAnimator.AnimatorUpdateListener doOnUpdate(android.view.ViewPropertyAnimator, kotlin.jvm.functions.Function1<? super android.animation.ValueAnimator,kotlin.Unit> action);
method public static android.animation.Animator.AnimatorListener setListener(android.view.ViewPropertyAnimator, kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit>? onEnd = "null", kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit>? onStart = "null", kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit>? onCancel = "null", kotlin.jvm.functions.Function1<? super android.animation.Animator,kotlin.Unit>? onRepeat = "null");
method public static android.animation.ValueAnimator.AnimatorUpdateListener setUpdateListener(android.view.ViewPropertyAnimator, kotlin.jvm.functions.Function1<? super android.animation.ValueAnimator,kotlin.Unit>? onUpdate = "null");
}

}

package androidx.core.content {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package androidx.core.animation
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing copyright header

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I added the copyright header.


import android.support.test.InstrumentationRegistry
import android.support.test.annotation.UiThreadTest
import android.support.test.filters.SdkSuppress
import android.support.test.runner.AndroidJUnit4
import android.view.View
import android.view.ViewPropertyAnimator
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class ViewPropertyAnimatorTest {
private val context = InstrumentationRegistry.getContext()
private val view = View(context)

private lateinit var animator: ViewPropertyAnimator

@Before
fun before() {
view.alpha = 0f
animator = view.animate().alpha(1f).setDuration(0)
}

@UiThreadTest
@Test fun testDoOnStart() {
var called = false
animator.doOnStart {
called = true
}

animator.start()
Assert.assertTrue(called)
}

@UiThreadTest
@Test fun testDoOnEnd() {
var called = false
animator.doOnEnd {
called = true
}

animator.start()
animator.cancel()
Assert.assertTrue(called)
}

@UiThreadTest
@Test fun testDoOnCancel() {
var cancelCalled = false
animator.doOnCancel {
cancelCalled = true
}

animator.start()
animator.cancel()
Assert.assertTrue(cancelCalled)
}

@UiThreadTest
@SdkSuppress(minSdkVersion = 19)
@Test fun testDoOnUpdate() {
var called = false
animator.doOnUpdate {
called = true
}

animator.start()
Assert.assertTrue(called)
}
}
110 changes: 110 additions & 0 deletions src/main/java/androidx/core/animation/ViewPropertyAnimator.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package androidx.core.animation
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing copyright header

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I added the copyright header.


import android.animation.Animator
import android.animation.ValueAnimator
import android.view.ViewPropertyAnimator
import androidx.annotation.RequiresApi

/**
* Add an action which will be invoked when the animation has ended.
*
* @return the [Animator.AnimatorListener] added to the Animator
* @see Animator.end
*/
fun ViewPropertyAnimator.doOnEnd(action: (animator: Animator) -> Unit) =
setListener(onEnd = action)

/**
* Add an action which will be invoked when the animation has started.
*
* @return the [Animator.AnimatorListener] added to the Animator
* @see Animator.start
*/
fun ViewPropertyAnimator.doOnStart(action: (animator: Animator) -> Unit) =
setListener(onStart = action)

/**
* Add an action which will be invoked when the animation has been cancelled.
*
* @return the [Animator.AnimatorListener] added to the Animator
* @see Animator.cancel
*/
fun ViewPropertyAnimator.doOnCancel(action: (animator: Animator) -> Unit) =
setListener(onCancel = action)

/**
* Add an action which will be invoked when the animation has repeated.
* @return the [Animator.AnimatorListener] added to the Animator
*/
fun ViewPropertyAnimator.doOnRepeat(action: (animator: Animator) -> Unit) =
setListener(onRepeat = action)

/**
* Add an action which will be invoked when the animation has been updated.
*
* @return the [ValueAnimator.AnimatorUpdateListener] added to the Animator
* @see Animator.pause
*/
@RequiresApi(19)
fun ViewPropertyAnimator.doOnUpdate(action: (animator: ValueAnimator?) -> Unit) =
setUpdateListener(onUpdate = action)

/**
* Add a listener to this Animator using the provided actions.
*/
fun ViewPropertyAnimator.setListener(
onEnd: ((animator: Animator) -> Unit)? = null,
onStart: ((animator: Animator) -> Unit)? = null,
onCancel: ((animator: Animator) -> Unit)? = null,
onRepeat: ((animator: Animator) -> Unit)? = null
): Animator.AnimatorListener {
val listener = object : Animator.AnimatorListener {
override fun onAnimationRepeat(animator: Animator) {
onRepeat?.invoke(animator)
}

override fun onAnimationEnd(animator: Animator) {
onEnd?.invoke(animator)
}

override fun onAnimationCancel(animator: Animator) {
onCancel?.invoke(animator)
}

override fun onAnimationStart(animator: Animator) {
onStart?.invoke(animator)
}
}
setListener(listener)
return listener
}

/**
* Add an update listener to this Animator using the provided actions.
*/
@RequiresApi(19)
fun ViewPropertyAnimator.setUpdateListener(
onUpdate: ((animator: ValueAnimator?) -> Unit)? = null
): ValueAnimator.AnimatorUpdateListener {
val listener = ValueAnimator.AnimatorUpdateListener {
onUpdate?.invoke(it)
}
setUpdateListener(listener)
return listener
}