1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.launcher3.states; 17 18 import android.view.animation.Interpolator; 19 20 import androidx.annotation.IntDef; 21 22 import java.lang.annotation.Retention; 23 import java.lang.annotation.RetentionPolicy; 24 25 /** 26 * Utility class for building animator set 27 */ 28 public class StateAnimationConfig { 29 30 @IntDef(flag = true, value = { 31 SKIP_ALL_ANIMATIONS, 32 SKIP_OVERVIEW, 33 SKIP_DEPTH_CONTROLLER, 34 SKIP_SCRIM, 35 }) 36 @Retention(RetentionPolicy.SOURCE) 37 public @interface AnimationFlags {} 38 public static final int SKIP_ALL_ANIMATIONS = 1 << 0; 39 public static final int SKIP_OVERVIEW = 1 << 1; 40 public static final int SKIP_DEPTH_CONTROLLER = 1 << 2; 41 public static final int SKIP_SCRIM = 1 << 3; 42 43 public long duration; 44 public boolean userControlled; 45 public @AnimationFlags int animFlags = 0; 46 47 48 // Various types of animation state transition 49 @IntDef(value = { 50 ANIM_VERTICAL_PROGRESS, 51 ANIM_WORKSPACE_SCALE, 52 ANIM_WORKSPACE_TRANSLATE, 53 ANIM_WORKSPACE_FADE, 54 ANIM_HOTSEAT_SCALE, 55 ANIM_HOTSEAT_TRANSLATE, 56 ANIM_OVERVIEW_SCALE, 57 ANIM_OVERVIEW_TRANSLATE_X, 58 ANIM_OVERVIEW_TRANSLATE_Y, 59 ANIM_OVERVIEW_FADE, 60 ANIM_ALL_APPS_FADE, 61 ANIM_SCRIM_FADE, 62 ANIM_OVERVIEW_MODAL, 63 ANIM_DEPTH, 64 ANIM_OVERVIEW_ACTIONS_FADE, 65 }) 66 @Retention(RetentionPolicy.SOURCE) 67 public @interface AnimType {} 68 public static final int ANIM_VERTICAL_PROGRESS = 0; 69 public static final int ANIM_WORKSPACE_SCALE = 1; 70 public static final int ANIM_WORKSPACE_TRANSLATE = 2; 71 public static final int ANIM_WORKSPACE_FADE = 3; 72 public static final int ANIM_HOTSEAT_SCALE = 4; 73 public static final int ANIM_HOTSEAT_TRANSLATE = 5; 74 public static final int ANIM_OVERVIEW_SCALE = 6; 75 public static final int ANIM_OVERVIEW_TRANSLATE_X = 7; 76 public static final int ANIM_OVERVIEW_TRANSLATE_Y = 8; 77 public static final int ANIM_OVERVIEW_FADE = 9; 78 public static final int ANIM_ALL_APPS_FADE = 10; 79 public static final int ANIM_SCRIM_FADE = 11; 80 public static final int ANIM_OVERVIEW_MODAL = 12; 81 public static final int ANIM_DEPTH = 13; 82 public static final int ANIM_OVERVIEW_ACTIONS_FADE = 14; 83 84 private static final int ANIM_TYPES_COUNT = 15; 85 86 protected final Interpolator[] mInterpolators = new Interpolator[ANIM_TYPES_COUNT]; 87 StateAnimationConfig()88 public StateAnimationConfig() { } 89 90 /** 91 * Copies the config to target 92 */ copyTo(StateAnimationConfig target)93 public void copyTo(StateAnimationConfig target) { 94 target.duration = duration; 95 target.animFlags = animFlags; 96 target.userControlled = userControlled; 97 for (int i = 0; i < ANIM_TYPES_COUNT; i++) { 98 target.mInterpolators[i] = mInterpolators[i]; 99 } 100 } 101 102 /** 103 * Returns the interpolator set for animId or fallback if nothing is set 104 * 105 * @see #setInterpolator(int, Interpolator) 106 */ getInterpolator(@nimType int animId, Interpolator fallback)107 public Interpolator getInterpolator(@AnimType int animId, Interpolator fallback) { 108 return mInterpolators[animId] == null ? fallback : mInterpolators[animId]; 109 } 110 111 /** 112 * Sets an interpolator for a given animation type 113 */ setInterpolator(@nimType int animId, Interpolator interpolator)114 public void setInterpolator(@AnimType int animId, Interpolator interpolator) { 115 mInterpolators[animId] = interpolator; 116 } 117 118 /** 119 * Returns true if the config and any of the provided component flags 120 */ hasAnimationFlag(@nimationFlags int a)121 public boolean hasAnimationFlag(@AnimationFlags int a) { 122 return (animFlags & a) != 0; 123 } 124 } 125