private static void updateTint(final Object nowPlayingFragment) throws Throwable {
if (PREFS.getBoolean(Common.NP_TINT_ICONS, false)) {
ViewGroup root = (ViewGroup) getObjectField(nowPlayingFragment, "mRootView");
Object currentState = getObjectField(nowPlayingFragment, "mCurrentState");
Class exStateClass = findClass(EXPANDING_STATE, nowPlayingFragment.getClass().getClassLoader());
if (currentState == Enum.valueOf(exStateClass, "FULLY_EXPANDED")) {
Object artPager = getObjectField(nowPlayingFragment, "mArtPager");
ArrayList<?> mItems = (ArrayList<?>) getObjectField(artPager, "mItems");
Object artPageFragment = null;
for (int i = 0; i < mItems.size(); i++) {
if (getIntField(mItems.get(i), "position") == (int) callMethod(artPager, "getCurrentItem")) {
artPageFragment = getObjectField(mItems.get(i), "object");
break;
}
}
// Update color
if (artPageFragment != null) {
ImageView mAlbum = (ImageView) getObjectField(artPageFragment, "mAlbum");
if (mAlbum.getDrawable() != null) {
Palette coverPalette = Palette.from(((BitmapDrawable) mAlbum.getDrawable()).getBitmap()).maximumColorCount(16).generate();
lastColor = coverPalette.getVibrantColor(Color.parseColor("#9E9E9E"));
} else {
((Handler) getObjectField(nowPlayingFragment, "mHandler")).postDelayed(new Runnable() {
@Override
public void run() {
try {
updateTint(nowPlayingFragment);
} catch (Throwable t) {
log(t);
}
}
}, 200);
return;
}
}
if (isNewDesignEnabled()) {
// Tint header bar & its items
RelativeLayout customHeaderBar = (RelativeLayout) root.findViewById(modRes.getIdentifier("header_bar", "id", XGPM));
if (customHeaderBar != null) {
customHeaderBar.setBackgroundColor(lastColor);
RelativeLayout wrapper = (RelativeLayout) customHeaderBar.getChildAt(0);
double contrastBlack = ColorUtils.calculateContrast(Color.BLACK, lastColor);
double contrastWhite = ColorUtils.calculateContrast(Color.WHITE, lastColor);
int imageColor = contrastBlack > contrastWhite ? Color.BLACK : Color.WHITE;
for (int j = 0; j < wrapper.getChildCount(); j++) {
View current = wrapper.getChildAt(j);
if (current instanceof ImageView && current.getId() != root.getResources().getIdentifier("play_pause_header", "id", GPM)) {
((ImageView) current).setColorFilter(imageColor);
} else if (current instanceof FrameLayout && ((FrameLayout) current).getChildCount() > 0 &&
((FrameLayout) current).getChildAt(0).getClass().getSimpleName().equals("MediaRouteButton")) {
((Drawable) getObjectField(((FrameLayout) current).getChildAt(0), "mRemoteIndicator")).setColorFilter(imageColor, PorterDuff.Mode.SRC_ATOP);
}
}
}
} else {
tintQueueButton(nowPlayingFragment);
}
// Tint all the rest
for (Object pager : new Object[]{getObjectField(nowPlayingFragment, "mHeaderPager"), artPager}) {
if (pager == null)
continue;
for (Object edgeEffectCompat : new Object[]{getObjectField(pager, "mLeftEdge"), getObjectField(pager, "mRightEdge")}) {
((Paint) getObjectField(getObjectField(edgeEffectCompat, "mEdgeEffect"), "mPaint")).setColor(lastColor);
}
}
SeekBar seekBar = (SeekBar) getObjectField(nowPlayingFragment, "mProgress");
LayerDrawable progress = (LayerDrawable) seekBar.getProgressDrawable().getCurrent();
ClipDrawable clipProgress = (ClipDrawable) progress.findDrawableByLayerId(root.getResources().getIdentifier("progress", "id", "android"));
clipProgress.setColorFilter(lastColor, PorterDuff.Mode.SRC_IN);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
AnimatedStateListDrawable thumb = (AnimatedStateListDrawable) seekBar.getThumb();
thumb.setColorFilter(lastColor, PorterDuff.Mode.SRC_IN);
}
ImageButton playPause = (ImageButton) root.findViewById(root.getResources().getIdentifier("pause", "id", GPM));
playPause.getBackground().setColorFilter(lastColor, PorterDuff.Mode.SRC_ATOP);
}
}
}
NowPlaying.java 文件源码
java
阅读 23
收藏 0
点赞 0
评论 0
项目:XGPM
作者:
评论列表
文章目录