blob: 324169ed4b9e321e225670ac52d868420bf4b577 [file] [log] [blame]
/*
* 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);
}
}
}