[go: nahoru, domu]

blob: 6854f93f53424c6930d58a6b8c59b27ff40169a6 [file] [log] [blame]
/*
* Copyright 2020 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.compose.animation.tooling
/**
* Type of the animation. Different types might have different properties, for example a
* `TransitionAnimation` (represented by [TRANSITION_ANIMATION]) has a set of states associated
* with it.
*/
enum class ComposeAnimationType {
TRANSITION_ANIMATION, ANIMATED_VALUE
}
/**
* Simple interface to make it easier to share Compose animation objects between `ui-tooling` and
* Android Studio. Since both ends communicate mostly using bytecode manipulation and reflection,
* being able to parse these objects into a common type makes
*/
interface ComposeAnimation {
/**
* Returns the animation type. Ideally, the type should be checked before calling methods
* specific to a certain type, e.g. [getStates].
*/
fun getType(): ComposeAnimationType
/**
* Returns the actual animation object.
*/
fun getAnimation(): Any
/**
* Returns all the available states of a `TransitionAnimation`.
*
* @throws UnsupportedOperationException if [getType] does not return `TRANSITION_ANIMATION`.
*/
fun getStates(): Set<Any> {
throw UnsupportedOperationException("Only available when getType() is TRANSITION_ANIMATION")
}
/**
* Returns the animation label, which can be used to represent it as text in Android Studio.
* Null if the label is not set or if it can't be inferred from the animation states.
*/
fun getLabel(): String?
}