blob: 212d7041c88774cce0cef76db95dc3b297d34898 [file] [log] [blame]
/*
* Copyright (C) 2013 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.phone;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.app.ActivityManager;
import android.content.res.Resources;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.View;
import com.android.systemui.R;
public class BarTransitions {
private static final boolean DEBUG = false;
public static final int MODE_OPAQUE = 0;
public static final int MODE_SEMI_TRANSPARENT = 1;
public static final int MODE_TRANSPARENT = 2;
public static final int MODE_LIGHTS_OUT = 3;
protected static final int LIGHTS_IN_DURATION = 250;
protected static final int LIGHTS_OUT_DURATION = 750;
private final String mTag;
protected final View mTarget;
protected final int mOpaque;
protected final int mSemiTransparent;
protected Drawable mTransparent;
private int mMode;
private ValueAnimator mBackgroundColorAnimator;
private final AnimatorUpdateListener mBackgroundColorListener = new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animator) {
mTarget.setBackgroundColor((Integer) animator.getAnimatedValue());
}
};
public BarTransitions(View target) {
mTag = "BarTransitions." + target.getClass().getSimpleName();
mTarget = target;
final Resources res = target.getContext().getResources();
mOpaque = res.getColor(R.drawable.status_bar_background);
mSemiTransparent = res.getColor(R.color.status_bar_background_semi_transparent);
}
public int getMode() {
return mMode;
}
public void transitionTo(int mode, boolean animate) {
if (mMode == mode) return;
int oldMode = mMode;
mMode = mode;
if (!ActivityManager.isHighEndGfx()) return;
if (DEBUG) Log.d(mTag, modeToString(oldMode) + " -> " + modeToString(mode));
onTransition(oldMode, mMode, animate);
}
protected Integer getBackgroundColor(int mode) {
if (mode == MODE_SEMI_TRANSPARENT) return mSemiTransparent;
if (mode == MODE_OPAQUE) return mOpaque;
if (mode == MODE_LIGHTS_OUT) return mOpaque;
return null;
}
protected void onTransition(int oldMode, int newMode, boolean animate) {
cancelBackgroundColorAnimation();
Integer oldColor = getBackgroundColor(oldMode);
Integer newColor = getBackgroundColor(newMode);
if (oldColor != null && newColor != null) {
if (animate) {
startBackgroundColorAnimation(oldColor, newColor);
} else {
mTarget.setBackgroundColor(newColor);
}
} else {
mTarget.setBackground(newMode == MODE_TRANSPARENT ? mTransparent
: newMode == MODE_SEMI_TRANSPARENT ? new ColorDrawable(mSemiTransparent)
: new ColorDrawable(mOpaque));
}
}
private void startBackgroundColorAnimation(int from, int to) {
mBackgroundColorAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), from, to);
mBackgroundColorAnimator.addUpdateListener(mBackgroundColorListener);
mBackgroundColorAnimator.start();
}
private void cancelBackgroundColorAnimation() {
if (mBackgroundColorAnimator != null && mBackgroundColorAnimator.isStarted()) {
mBackgroundColorAnimator.cancel();
mBackgroundColorAnimator = null;
}
}
public static String modeToString(int mode) {
if (mode == MODE_OPAQUE) return "MODE_OPAQUE";
if (mode == MODE_SEMI_TRANSPARENT) return "MODE_SEMI_TRANSPARENT";
if (mode == MODE_TRANSPARENT) return "MODE_TRANSPARENT";
if (mode == MODE_LIGHTS_OUT) return "MODE_LIGHTS_OUT";
throw new IllegalArgumentException("Unknown mode " + mode);
}
}