| /* |
| * Copyright (C) 2016 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 com.android.systemui.recents.tv.animations; |
| |
| import android.animation.Animator; |
| import android.animation.AnimatorSet; |
| import android.animation.ObjectAnimator; |
| import android.content.res.Resources; |
| import android.view.View; |
| |
| import com.android.systemui.Interpolators; |
| import com.android.systemui.R; |
| import com.android.systemui.recents.tv.views.TaskCardView; |
| |
| /** |
| * Recents row's focus animation with PIP controls. |
| */ |
| public class RecentsRowFocusAnimationHolder { |
| private final View mView; |
| private final View mTitleView; |
| |
| private AnimatorSet mFocusGainAnimatorSet; |
| private AnimatorSet mFocusLossAnimatorSet; |
| |
| public RecentsRowFocusAnimationHolder(View view, View titleView) { |
| mView = view; |
| mTitleView = titleView; |
| |
| Resources res = view.getResources(); |
| int duration = res.getInteger(R.integer.recents_tv_pip_focus_anim_duration); |
| float dimAlpha = res.getFloat(R.dimen.recents_recents_row_dim_alpha); |
| |
| mFocusGainAnimatorSet = new AnimatorSet(); |
| mFocusGainAnimatorSet.playTogether( |
| ObjectAnimator.ofFloat(mView, "alpha", 1f), |
| ObjectAnimator.ofFloat(mTitleView, "alpha", 1f)); |
| mFocusGainAnimatorSet.setDuration(duration); |
| mFocusGainAnimatorSet.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); |
| |
| mFocusLossAnimatorSet = new AnimatorSet(); |
| mFocusLossAnimatorSet.playTogether( |
| // Animation doesn't start from the current value (1f) sometimes, |
| // so specify the desired initial value here. |
| ObjectAnimator.ofFloat(mView, "alpha", 1f, dimAlpha), |
| ObjectAnimator.ofFloat(mTitleView, "alpha", 0f)); |
| mFocusLossAnimatorSet.setDuration(duration); |
| mFocusLossAnimatorSet.setInterpolator(Interpolators.FAST_OUT_SLOW_IN); |
| } |
| |
| /** |
| * Starts the Recents row's focus gain animation. |
| */ |
| public void startFocusGainAnimation() { |
| cancelAnimator(mFocusLossAnimatorSet); |
| mFocusGainAnimatorSet.start(); |
| } |
| |
| /** |
| * Starts the Recents row's focus loss animation. |
| */ |
| public void startFocusLossAnimation() { |
| cancelAnimator(mFocusGainAnimatorSet); |
| mFocusLossAnimatorSet.start(); |
| } |
| |
| /** |
| * Resets the views immediately and ends the animations. |
| */ |
| public void reset() { |
| cancelAnimator(mFocusLossAnimatorSet); |
| cancelAnimator(mFocusGainAnimatorSet); |
| mView.setAlpha(1f); |
| mTitleView.setAlpha(1f); |
| } |
| |
| private static void cancelAnimator(Animator animator) { |
| if (animator.isStarted()) { |
| animator.cancel(); |
| } |
| } |
| } |