diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index e32d7f2a3a788..ff85cb4b479e5 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -70,7 +70,6 @@ import com.android.systemui.R; import com.android.systemui.RecentsComponent; import com.android.systemui.SearchPanelView; import com.android.systemui.SystemUI; -import com.android.systemui.statusbar.phone.BarTransitions; import com.android.systemui.statusbar.policy.NotificationRowLayout; import java.util.ArrayList; @@ -828,7 +827,7 @@ public abstract class BaseStatusBar extends SystemUI implements // Construct the icon. final StatusBarIconView iconView = new StatusBarIconView(mContext, notification.getPackageName() + "/0x" + Integer.toHexString(notification.getId()), - notification.getNotification(), getStatusBarMode()); + notification.getNotification()); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); final StatusBarIcon ic = new StatusBarIcon(notification.getPackageName(), @@ -851,10 +850,6 @@ public abstract class BaseStatusBar extends SystemUI implements return entry; } - protected int getStatusBarMode() { - return BarTransitions.MODE_OPAQUE; - } - protected void addNotificationViews(NotificationData.Entry entry) { // Add the expanded view and icon. int pos = mNotificationData.add(entry); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 5689bfafd9ad6..9f9524bf94135 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -16,11 +16,6 @@ package com.android.systemui.statusbar; -import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE; -import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; -import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT; - -import android.animation.ObjectAnimator; import android.app.Notification; import android.content.Context; import android.content.pm.PackageManager; @@ -53,13 +48,10 @@ public class StatusBarIconView extends AnimatedImageView { private int mNumberY; private String mNumberText; private Notification mNotification; - private final float mAlphaWhenOpaque; - private final float mAlphaWhenTransparent = 1; - public StatusBarIconView(Context context, String slot, Notification notification, int mode) { + public StatusBarIconView(Context context, String slot, Notification notification) { super(context); final Resources res = context.getResources(); - mAlphaWhenOpaque = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1); mSlot = slot; mNumberPain = new Paint(); mNumberPain.setTextAlign(Paint.Align.CENTER); @@ -76,7 +68,6 @@ public class StatusBarIconView extends AnimatedImageView { final float scale = (float)imageBounds / (float)outerBounds; setScaleX(scale); setScaleY(scale); - setAlpha(getAlphaFor(mode)); } setScaleType(ImageView.ScaleType.CENTER); @@ -85,22 +76,11 @@ public class StatusBarIconView extends AnimatedImageView { public StatusBarIconView(Context context, AttributeSet attrs) { super(context, attrs); final Resources res = context.getResources(); - mAlphaWhenOpaque = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1); final int outerBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_size); final int imageBounds = res.getDimensionPixelSize(R.dimen.status_bar_icon_drawing_size); final float scale = (float)imageBounds / (float)outerBounds; setScaleX(scale); setScaleY(scale); - setAlpha(getAlphaFor(MODE_OPAQUE)); - } - - public ObjectAnimator animateTransitionTo(int mode) { - return ObjectAnimator.ofFloat(this, "alpha", getAlpha(), getAlphaFor(mode)); - } - - public float getAlphaFor(int mode) { - final boolean isTransparent = mode == MODE_SEMI_TRANSPARENT || mode == MODE_TRANSPARENT; - return isTransparent ? mAlphaWhenTransparent : mAlphaWhenOpaque; } private static boolean streq(String a, String b) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index ddd7c8b68cff3..bde3795dc4cab 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -839,7 +839,7 @@ public class PhoneStatusBar extends BaseStatusBar { public void addIcon(String slot, int index, int viewIndex, StatusBarIcon icon) { if (SPEW) Log.d(TAG, "addIcon slot=" + slot + " index=" + index + " viewIndex=" + viewIndex + " icon=" + icon); - StatusBarIconView view = new StatusBarIconView(mContext, slot, null, getStatusBarMode()); + StatusBarIconView view = new StatusBarIconView(mContext, slot, null); view.set(icon); mStatusIcons.addView(view, viewIndex, new LinearLayout.LayoutParams(mIconSize, mIconSize)); } @@ -1857,11 +1857,6 @@ public class PhoneStatusBar extends BaseStatusBar { } } - @Override - protected int getStatusBarMode() { - return mStatusBarView.getBarTransitions().getMode(); - } - private int computeBarMode(int oldVis, int newVis, BarTransitions transitions, int transientFlag, int transparentFlag) { final int oldMode = barMode(oldVis, transientFlag, transparentFlag); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java index 2e9ee879c6d91..fa494c2ae705d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java @@ -16,8 +16,12 @@ package com.android.systemui.statusbar.phone; +import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; +import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT; + import android.animation.Animator; import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.app.ActivityManager; import android.content.Context; import android.content.res.Resources; @@ -27,15 +31,10 @@ import android.util.EventLog; import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.view.ViewGroup; import android.view.accessibility.AccessibilityEvent; import com.android.systemui.EventLogTags; import com.android.systemui.R; -import com.android.systemui.statusbar.StatusBarIconView; - -import java.util.ArrayList; -import java.util.List; public class PhoneStatusBarView extends PanelBar { private static final String TAG = "PhoneStatusBarView"; @@ -56,11 +55,22 @@ public class PhoneStatusBarView extends PanelBar { private final class StatusBarTransitions extends BarTransitions { private final int mTransparent; + private final float mAlphaWhenOpaque; + private final float mAlphaWhenTransparent = 1; + private View mLeftSide; + private View mRightSide; public StatusBarTransitions(Context context) { super(context, PhoneStatusBarView.this); final Resources res = context.getResources(); mTransparent = res.getColor(R.color.status_bar_background_transparent); + mAlphaWhenOpaque = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1); + } + + public void init() { + mLeftSide = findViewById(R.id.notification_icon_area); + mRightSide = findViewById(R.id.system_icon_area); + applyMode(getMode(), false /*animate*/); } @Override @@ -69,41 +79,32 @@ public class PhoneStatusBarView extends PanelBar { return super.getBackgroundColor(mode); } + public ObjectAnimator animateTransitionTo(View v, float toAlpha) { + return ObjectAnimator.ofFloat(v, "alpha", v.getAlpha(), toAlpha); + } + + public float getAlphaFor(int mode) { + final boolean isTransparent = mode == MODE_SEMI_TRANSPARENT || mode == MODE_TRANSPARENT; + return isTransparent ? mAlphaWhenTransparent : mAlphaWhenOpaque; + } + @Override protected void onTransition(int oldMode, int newMode, boolean animate) { super.onTransition(oldMode, newMode, animate); + applyMode(newMode, animate); + } + + private void applyMode(int mode, boolean animate) { + float newAlpha = getAlphaFor(mode); if (animate) { - List animators = new ArrayList(); - for(StatusBarIconView icon : findStatusBarIcons()) { - animators.add(icon.animateTransitionTo(newMode)); - } + ObjectAnimator lhs = animateTransitionTo(mLeftSide, newAlpha); + ObjectAnimator rhs = animateTransitionTo(mRightSide, newAlpha); AnimatorSet set = new AnimatorSet(); - set.playTogether(animators); + set.playTogether(lhs, rhs); set.start(); } else { - for(StatusBarIconView icon : findStatusBarIcons()) { - icon.setAlpha(icon.getAlphaFor(newMode)); - } - } - } - - private List findStatusBarIcons() { - List icons = new ArrayList(); - findStatusBarIcons(icons, findViewById(R.id.moreIcon)); - findStatusBarIcons(icons, findViewById(R.id.statusIcons)); - findStatusBarIcons(icons, findViewById(R.id.notificationIcons)); - return icons; - } - - private void findStatusBarIcons(List icons, View v) { - if (v instanceof StatusBarIconView) { - icons.add((StatusBarIconView) v); - } else if (v instanceof ViewGroup) { - ViewGroup group = (ViewGroup) v; - final int N = group.getChildCount(); - for (int i = 0; i < N; i++) { - findStatusBarIcons(icons, group.getChildAt(i)); - } + mLeftSide.setAlpha(newAlpha); + mRightSide.setAlpha(newAlpha); } } } @@ -140,6 +141,7 @@ public class PhoneStatusBarView extends PanelBar { for (PanelView pv : mPanels) { pv.setRubberbandingEnabled(!mFullWidthNotifications); } + mBarTransitions.init(); } @Override