Merge "Fixed a bug with the notification appear animation" into lmp-mr1-dev
This commit is contained in:
@@ -23,10 +23,8 @@ import android.graphics.drawable.Drawable;
|
||||
import android.service.notification.StatusBarNotification;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewStub;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
|
||||
import android.widget.ImageView;
|
||||
import com.android.systemui.R;
|
||||
|
||||
|
||||
@@ -27,11 +27,11 @@ import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.view.animation.Interpolator;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
@@ -60,6 +60,16 @@ public class NotificationContentView extends FrameLayout {
|
||||
private boolean mDark;
|
||||
|
||||
private final Paint mFadePaint = new Paint();
|
||||
private boolean mAnimate;
|
||||
private ViewTreeObserver.OnPreDrawListener mEnableAnimationPredrawListener
|
||||
= new ViewTreeObserver.OnPreDrawListener() {
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
mAnimate = true;
|
||||
getViewTreeObserver().removeOnPreDrawListener(this);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
public NotificationContentView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
@@ -73,6 +83,12 @@ public class NotificationContentView extends FrameLayout {
|
||||
updateClipping();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
if (mContractedChild != null) {
|
||||
mContractedChild.animate().cancel();
|
||||
@@ -117,9 +133,31 @@ public class NotificationContentView extends FrameLayout {
|
||||
selectLayout(false /* animate */, true /* force */);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onVisibilityChanged(View changedView, int visibility) {
|
||||
super.onVisibilityChanged(changedView, visibility);
|
||||
updateVisibility();
|
||||
}
|
||||
|
||||
private void updateVisibility() {
|
||||
setVisible(isShown());
|
||||
}
|
||||
|
||||
private void setVisible(final boolean isVisible) {
|
||||
if (isVisible) {
|
||||
|
||||
// We only animate if we are drawn at least once, otherwise the view might animate when
|
||||
// it's shown the first time
|
||||
getViewTreeObserver().addOnPreDrawListener(mEnableAnimationPredrawListener);
|
||||
} else {
|
||||
getViewTreeObserver().removeOnPreDrawListener(mEnableAnimationPredrawListener);
|
||||
mAnimate = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void setActualHeight(int actualHeight) {
|
||||
mActualHeight = actualHeight;
|
||||
selectLayout(true /* animate */, false /* force */);
|
||||
selectLayout(mAnimate /* animate */, false /* force */);
|
||||
updateClipping();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user