diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java | 15 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java | 26 |
2 files changed, 31 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 561fbb2b4aba..6cfd42fa00eb 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -43,6 +43,7 @@ import android.util.FloatProperty; import android.util.Log; import android.util.Property; import android.util.TypedValue; +import android.view.View; import android.view.ViewDebug; import android.view.accessibility.AccessibilityEvent; import android.view.animation.Interpolator; @@ -142,6 +143,7 @@ public class StatusBarIconView extends AnimatedImageView { private float[] mMatrix; private ColorMatrixColorFilter mMatrixColorFilter; private boolean mIsInShelf; + private Runnable mLayoutRunnable; public StatusBarIconView(Context context, String slot, StatusBarNotification sbn) { this(context, slot, sbn, false); @@ -822,6 +824,19 @@ public class StatusBarIconView extends AnimatedImageView { return mIsInShelf; } + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mLayoutRunnable != null) { + mLayoutRunnable.run(); + mLayoutRunnable = null; + } + } + + public void executeOnLayout(Runnable runnable) { + mLayoutRunnable = runnable; + } + public interface OnVisibilityChangedListener { void onVisibilityChanged(int newVisibility); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java index 41a69b4ba557..40fe50fb9325 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java @@ -4,10 +4,8 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Rect; -import android.graphics.drawable.Icon; import android.support.annotation.NonNull; import android.support.v4.util.ArrayMap; -import android.support.v4.util.ArraySet; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; @@ -269,18 +267,26 @@ public class NotificationIconAreaController implements DarkReceiver { */ private void applyNotificationIconsTint() { for (int i = 0; i < mNotificationIcons.getChildCount(); i++) { - StatusBarIconView v = (StatusBarIconView) mNotificationIcons.getChildAt(i); - boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L)); - int color = StatusBarIconView.NO_COLOR; - boolean colorize = !isPreL || NotificationUtils.isGrayscale(v, mNotificationColorUtil); - if (colorize) { - color = DarkIconDispatcher.getTint(mTintArea, v, mIconTint); + final StatusBarIconView iv = (StatusBarIconView) mNotificationIcons.getChildAt(i); + if (iv.getWidth() != 0) { + updateTintForIcon(iv); + } else { + iv.executeOnLayout(() -> updateTintForIcon(iv)); } - v.setStaticDrawableColor(color); - v.setDecorColor(mIconTint); } } + private void updateTintForIcon(StatusBarIconView v) { + boolean isPreL = Boolean.TRUE.equals(v.getTag(R.id.icon_is_pre_L)); + int color = StatusBarIconView.NO_COLOR; + boolean colorize = !isPreL || NotificationUtils.isGrayscale(v, mNotificationColorUtil); + if (colorize) { + color = DarkIconDispatcher.getTint(mTintArea, v, mIconTint); + } + v.setStaticDrawableColor(color); + v.setDecorColor(mIconTint); + } + public void setDark(boolean dark) { mNotificationIcons.setDark(dark, false, 0); mShelfIcons.setDark(dark, false, 0); |