/* * Copyright (C) 2014 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.views; import android.animation.ObjectAnimator; import android.content.Context; import android.util.AttributeSet; import android.widget.FrameLayout; import com.android.systemui.recents.RecentsConfiguration; /** The task footer view */ public class TaskViewFooter extends FrameLayout { interface TaskFooterViewCallbacks { public void onTaskFooterHeightChanged(int height, int maxHeight); } RecentsConfiguration mConfig; TaskFooterViewCallbacks mCb; int mFooterHeight; int mMaxFooterHeight; ObjectAnimator mFooterAnimator; public TaskViewFooter(Context context) { this(context, null); } public TaskViewFooter(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TaskViewFooter(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } public TaskViewFooter(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); mConfig = RecentsConfiguration.getInstance(); mMaxFooterHeight = mConfig.taskViewLockToAppButtonHeight; setFooterHeight(getFooterHeight()); } /** Sets the callbacks for when the footer height changes. */ void setCallbacks(TaskFooterViewCallbacks cb) { mCb = cb; mCb.onTaskFooterHeightChanged(mFooterHeight, mMaxFooterHeight); } /** Sets the footer height. */ public void setFooterHeight(int footerHeight) { if (footerHeight != mFooterHeight) { mFooterHeight = footerHeight; mCb.onTaskFooterHeightChanged(footerHeight, mMaxFooterHeight); } } /** Gets the footer height. */ public int getFooterHeight() { return mFooterHeight; } /** Animates the footer into and out of view. */ void animateFooterVisibility(final boolean visible, int duration) { // Return early if there is no footer if (mMaxFooterHeight <= 0) return; // Cancel the previous animation if (mFooterAnimator != null) { mFooterAnimator.removeAllListeners(); mFooterAnimator.cancel(); } int finalHeight = visible ? mMaxFooterHeight : 0; if (duration > 0) { mFooterAnimator = ObjectAnimator.ofInt(this, "footerHeight", finalHeight); mFooterAnimator.setDuration(duration); mFooterAnimator.setInterpolator(mConfig.fastOutSlowInInterpolator); mFooterAnimator.start(); } else { setFooterHeight(finalHeight); } } }