1 package com.airbnb.lottie.model; 2 3 import androidx.annotation.Nullable; 4 import androidx.annotation.RestrictTo; 5 6 import com.airbnb.lottie.value.LottieValueCallback; 7 8 import java.util.List; 9 10 import static androidx.annotation.RestrictTo.Scope.LIBRARY; 11 12 /** 13 * Any item that can be a part of a {@link KeyPath} should implement this. 14 */ 15 @RestrictTo(LIBRARY) 16 public interface KeyPathElement { 17 18 /** 19 * Called recursively during keypath resolution. 20 * 21 * The overridden method should just call: 22 * MiscUtils.resolveKeyPath(keyPath, depth, accumulator, currentPartialKeyPath, this); 23 * 24 * @param keyPath The full keypath being resolved. 25 * @param depth The current depth that this element should be checked at in the keypath. 26 * @param accumulator A list of fully resolved keypaths. If this element fully matches the 27 * keypath then it should add itself to this list. 28 * @param currentPartialKeyPath A keypath that contains all parent element of this one. 29 * This element should create a copy of this and append itself 30 * with KeyPath#addKey when it adds itself to the accumulator 31 * or propagates resolution to its children. 32 */ resolveKeyPath( KeyPath keyPath, int depth, List<KeyPath> accumulator, KeyPath currentPartialKeyPath)33 void resolveKeyPath( 34 KeyPath keyPath, int depth, List<KeyPath> accumulator, KeyPath currentPartialKeyPath); 35 36 /** 37 * The overridden method should handle appropriate properties and set value callbacks on their 38 * animations. 39 */ addValueCallback(T property, @Nullable LottieValueCallback<T> callback)40 <T> void addValueCallback(T property, @Nullable LottieValueCallback<T> callback); 41 }