Merge "Fixed an issue where added icons were white in multiwindow" into oc-mr1-dev

This commit is contained in:
TreeHugger Robot
2017-10-07 17:34:40 +00:00
committed by Android (Google) Code Review
2 changed files with 31 additions and 10 deletions

View File

@@ -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);
}

View File

@@ -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);