blob: d60c17f7caf3940bdd84bca04f9397177fa86eb7 [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.statusbar;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
import android.widget.Button;
import android.widget.TextView;
import com.android.systemui.R;
public class DismissView extends ExpandableView {
private Button mClearAllText;
private boolean mIsVisible;
private boolean mAnimating;
private boolean mWillBeGone;
private final Interpolator mAppearInterpolator = new PathInterpolator(0f, 0.2f, 1f, 1f);
private final Interpolator mDisappearInterpolator = new PathInterpolator(0f, 0f, 0.8f, 1f);
public DismissView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mClearAllText = (Button) findViewById(R.id.dismiss_text);
setInvisible();
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
setOutlineProvider(null);
}
@Override
public boolean isTransparent() {
return true;
}
public void performVisibilityAnimation(boolean nowVisible) {
animateText(nowVisible, null /* onFinishedRunnable */);
}
public void performVisibilityAnimation(boolean nowVisible, Runnable onFinishedRunnable) {
animateText(nowVisible, onFinishedRunnable);
}
public boolean isVisible() {
return mIsVisible || mAnimating;
}
/**
* Animate the text to a new visibility.
*
* @param nowVisible should it now be visible
* @param onFinishedRunnable A runnable which should be run when the animation is
* finished.
*/
private void animateText(boolean nowVisible, final Runnable onFinishedRunnable) {
if (nowVisible != mIsVisible) {
// Animate text
float endValue = nowVisible ? 1.0f : 0.0f;
Interpolator interpolator;
if (nowVisible) {
interpolator = mAppearInterpolator;
} else {
interpolator = mDisappearInterpolator;
}
mAnimating = true;
mClearAllText.animate()
.alpha(endValue)
.setInterpolator(interpolator)
.setDuration(260)
.withLayer()
.withEndAction(new Runnable() {
@Override
public void run() {
mAnimating = false;
if (onFinishedRunnable != null) {
onFinishedRunnable.run();
}
}
});
mIsVisible = nowVisible;
} else {
if (onFinishedRunnable != null) {
onFinishedRunnable.run();
}
}
}
public void setInvisible() {
mClearAllText.setAlpha(0.0f);
mIsVisible = false;
}
@Override
public void performRemoveAnimation(float translationDirection, Runnable onFinishedRunnable) {
performVisibilityAnimation(false);
}
@Override
public void performAddAnimation(long delay) {
performVisibilityAnimation(true);
}
@Override
public void setScrimAmount(float scrimAmount) {
// We don't need to scrim the dismissView
}
public void setOnButtonClickListener(OnClickListener onClickListener) {
mClearAllText.setOnClickListener(onClickListener);
}
@Override
public boolean hasOverlappingRendering() {
return false;
}
public void cancelAnimation() {
mClearAllText.animate().cancel();
}
public boolean willBeGone() {
return mWillBeGone;
}
public void setWillBeGone(boolean willBeGone) {
mWillBeGone = willBeGone;
}
}