Clean ups
This commit is contained in:
parent
62a84454ff
commit
44ba560d77
28 changed files with 243 additions and 422 deletions
|
|
@ -139,4 +139,6 @@ dependencies {
|
||||||
compile 'com.github.bumptech.glide:glide:3.6.1'
|
compile 'com.github.bumptech.glide:glide:3.6.1'
|
||||||
compile 'com.github.kabouzeid:RecyclerView-FastScroll:v1.2-kmod'
|
compile 'com.github.kabouzeid:RecyclerView-FastScroll:v1.2-kmod'
|
||||||
compile 'com.github.kabouzeid:app-theme-helper:0.7.8kmod'
|
compile 'com.github.kabouzeid:app-theme-helper:0.7.8kmod'
|
||||||
|
|
||||||
|
compile 'com.github.kabouzeid:GlidePalette:e34717bced@aar'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.PopupMenu;
|
import android.widget.PopupMenu;
|
||||||
|
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
|
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
|
||||||
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
||||||
|
|
@ -24,7 +26,6 @@ import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
|
@ -98,7 +99,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
holder.image.setImageDrawable(Util.getTintedDrawable(
|
holder.image.setImageDrawable(Util.getTintedDrawable(
|
||||||
activity,
|
activity,
|
||||||
getIconRes(playlist),
|
getIconRes(playlist),
|
||||||
ColorUtil.resolveColor(activity, android.R.attr.textColorSecondary)
|
ATHUtil.resolveColor(activity, R.attr.icon_color, ThemeStore.textColorSecondary(activity))
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -178,7 +179,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
if (shortSeparator != null) {
|
if (shortSeparator != null) {
|
||||||
shortSeparator.setVisibility(View.GONE);
|
shortSeparator.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
itemView.setBackgroundColor(ColorUtil.resolveColor(activity, R.attr.cardBackgroundColor));
|
itemView.setBackgroundColor(ATHUtil.resolveColor(activity, R.attr.cardBackgroundColor));
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation));
|
itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.Priority;
|
import com.bumptech.glide.Priority;
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||||
import com.bumptech.glide.request.target.Target;
|
import com.bumptech.glide.request.target.Target;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
|
||||||
import com.kabouzeid.gramophone.glide.SongGlideRequest;
|
import com.kabouzeid.gramophone.glide.SongGlideRequest;
|
||||||
|
|
@ -26,7 +27,6 @@ import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
import com.kabouzeid.gramophone.model.Artist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
|
||||||
|
|
@ -139,7 +139,7 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
|
||||||
itemView.setOnLongClickListener(null);
|
itemView.setOnLongClickListener(null);
|
||||||
|
|
||||||
if (itemViewType != HEADER) {
|
if (itemViewType != HEADER) {
|
||||||
itemView.setBackgroundColor(ColorUtil.resolveColor(activity, R.attr.cardBackgroundColor));
|
itemView.setBackgroundColor(ATHUtil.resolveColor(activity, R.attr.cardBackgroundColor));
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation));
|
itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.model.Album;
|
import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
||||||
|
|
@ -105,15 +104,16 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setColors(int color, ViewHolder holder) {
|
private void setColors(int color, ViewHolder holder) {
|
||||||
if (holder.paletteColorContainer != null) {
|
// TODO
|
||||||
holder.paletteColorContainer.setBackgroundColor(color);
|
// if (holder.paletteColorContainer != null) {
|
||||||
if (holder.title != null) {
|
// holder.paletteColorContainer.setBackgroundColor(color);
|
||||||
holder.title.setTextColor(ColorUtil.getPrimaryTextColorForBackground(activity, color));
|
// if (holder.title != null) {
|
||||||
}
|
// holder.title.setTextColor(PhonographColorUtil.getPrimaryTextColorForBackground(activity, color));
|
||||||
if (holder.text != null) {
|
// }
|
||||||
holder.text.setTextColor(ColorUtil.getSecondaryTextColorForBackground(activity, color));
|
// if (holder.text != null) {
|
||||||
}
|
// holder.text.setTextColor(PhonographColorUtil.getSecondaryTextColorForBackground(activity, color));
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void loadAlbumCover(Album album, final ViewHolder holder) {
|
protected void loadAlbumCover(Album album, final ViewHolder holder) {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||||
import com.kabouzeid.gramophone.model.Artist;
|
import com.kabouzeid.gramophone.model.Artist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
||||||
|
|
@ -88,7 +87,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
||||||
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
|
||||||
final Artist artist = dataSet.get(position);
|
final Artist artist = dataSet.get(position);
|
||||||
|
|
||||||
// final int defaultBarColor = ColorUtil.resolveColor(activity, R.attr.default_bar_color);
|
// final int defaultBarColor = PhonographColorUtil.resolveColor(activity, R.attr.default_bar_color);
|
||||||
// setColors(defaultBarColor, holder);
|
// setColors(defaultBarColor, holder);
|
||||||
|
|
||||||
boolean isChecked = isChecked(artist);
|
boolean isChecked = isChecked(artist);
|
||||||
|
|
@ -110,13 +109,14 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
|
||||||
|
|
||||||
private void setColors(int color, ViewHolder holder) {
|
private void setColors(int color, ViewHolder holder) {
|
||||||
if (holder.paletteColorContainer != null) {
|
if (holder.paletteColorContainer != null) {
|
||||||
holder.paletteColorContainer.setBackgroundColor(color);
|
// TODO
|
||||||
if (holder.title != null) {
|
// holder.paletteColorContainer.setBackgroundColor(color);
|
||||||
holder.title.setTextColor(ColorUtil.getPrimaryTextColorForBackground(activity, color));
|
// if (holder.title != null) {
|
||||||
}
|
// holder.title.setTextColor(PhonographColorUtil.getPrimaryTextColorForBackground(activity, color));
|
||||||
if (holder.text != null) {
|
// }
|
||||||
holder.text.setTextColor(ColorUtil.getSecondaryTextColorForBackground(activity, color));
|
// if (holder.text != null) {
|
||||||
}
|
// holder.text.setTextColor(PhonographColorUtil.getSecondaryTextColorForBackground(activity, color));
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ import android.view.LayoutInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.SectionIndexer;
|
|
||||||
|
|
||||||
import com.afollestad.materialcab.MaterialCab;
|
import com.afollestad.materialcab.MaterialCab;
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
|
|
@ -25,12 +24,10 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
||||||
|
|
||||||
import java.io.CharArrayReader;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -109,13 +106,14 @@ public class SongAdapter extends AbsMultiSelectAdapter<SongAdapter.ViewHolder, S
|
||||||
|
|
||||||
private void setColors(int color, ViewHolder holder) {
|
private void setColors(int color, ViewHolder holder) {
|
||||||
if (holder.paletteColorContainer != null) {
|
if (holder.paletteColorContainer != null) {
|
||||||
holder.paletteColorContainer.setBackgroundColor(color);
|
// TODO
|
||||||
if (holder.title != null) {
|
// holder.paletteColorContainer.setBackgroundColor(color);
|
||||||
holder.title.setTextColor(ColorUtil.getPrimaryTextColorForBackground(activity, color));
|
// if (holder.title != null) {
|
||||||
}
|
// holder.title.setTextColor(PhonographColorUtil.getPrimaryTextColorForBackground(activity, color));
|
||||||
if (holder.text != null) {
|
// }
|
||||||
holder.text.setTextColor(ColorUtil.getSecondaryTextColorForBackground(activity, color));
|
// if (holder.text != null) {
|
||||||
}
|
// holder.text.setTextColor(PhonographColorUtil.getSecondaryTextColorForBackground(activity, color));
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ import android.webkit.WebView;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.MaterialDialog;
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
|
@ -83,7 +83,7 @@ public class ChangelogDialog extends DialogFragment {
|
||||||
.replace("{style-placeholder}",
|
.replace("{style-placeholder}",
|
||||||
String.format("body { background-color: #%s; color: #%s; }", backgroundColor, contentColor))
|
String.format("body { background-color: #%s; color: #%s; }", backgroundColor, contentColor))
|
||||||
.replace("{link-color}", colorToHex(ThemeSingleton.get().positiveColor.getDefaultColor()))
|
.replace("{link-color}", colorToHex(ThemeSingleton.get().positiveColor.getDefaultColor()))
|
||||||
.replace("{link-color-active}", colorToHex(ColorUtil.shiftColorUp(ThemeSingleton.get().positiveColor.getDefaultColor())))
|
.replace("{link-color-active}", colorToHex(ColorUtil.lightenColor(ThemeSingleton.get().positiveColor.getDefaultColor())))
|
||||||
, "text/html", "UTF-8");
|
, "text/html", "UTF-8");
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
webView.loadData("<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", "UTF-8");
|
webView.loadData("<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", "UTF-8");
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,10 @@ import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||||
import com.anjlab.android.iab.v3.BillingProcessor;
|
import com.anjlab.android.iab.v3.BillingProcessor;
|
||||||
import com.anjlab.android.iab.v3.SkuDetails;
|
import com.anjlab.android.iab.v3.SkuDetails;
|
||||||
import com.anjlab.android.iab.v3.TransactionDetails;
|
import com.anjlab.android.iab.v3.TransactionDetails;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.gramophone.App;
|
import com.kabouzeid.gramophone.App;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -168,12 +169,14 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I
|
||||||
viewHolder.price.setText(skuDetails.priceText);
|
viewHolder.price.setText(skuDetails.priceText);
|
||||||
|
|
||||||
final boolean purchased = donationDialog.billingProcessor.isPurchased(skuDetails.productId);
|
final boolean purchased = donationDialog.billingProcessor.isPurchased(skuDetails.productId);
|
||||||
|
int titleTextColor = purchased ? ATHUtil.resolveColor(getContext(), android.R.attr.textColorHint) : ThemeStore.textColorPrimary(getContext());
|
||||||
|
int contentTextColor = purchased ? titleTextColor : ThemeStore.textColorSecondary(getContext());
|
||||||
|
|
||||||
int titleTextColor = purchased ? ColorUtil.resolveColor(getContext(), android.R.attr.textColorHint) : ColorUtil.resolveColor(getContext(), android.R.attr.textColorPrimary);
|
//noinspection ResourceAsColor
|
||||||
int contentTextColor = purchased ? titleTextColor : ColorUtil.resolveColor(getContext(), android.R.attr.textColorSecondary);
|
|
||||||
|
|
||||||
viewHolder.title.setTextColor(titleTextColor);
|
viewHolder.title.setTextColor(titleTextColor);
|
||||||
|
//noinspection ResourceAsColor
|
||||||
viewHolder.text.setTextColor(contentTextColor);
|
viewHolder.text.setTextColor(contentTextColor);
|
||||||
|
//noinspection ResourceAsColor
|
||||||
viewHolder.price.setTextColor(titleTextColor);
|
viewHolder.price.setTextColor(titleTextColor);
|
||||||
|
|
||||||
strikeThrough(viewHolder.title, purchased);
|
strikeThrough(viewHolder.title, purchased);
|
||||||
|
|
|
||||||
|
|
@ -4,10 +4,11 @@ import android.graphics.drawable.Drawable;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
import com.bumptech.glide.request.animation.GlideAnimation;
|
import com.bumptech.glide.request.animation.GlideAnimation;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTarget;
|
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTarget;
|
||||||
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
|
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
|
|
||||||
public abstract class PhonographColoredTarget extends BitmapPaletteTarget {
|
public abstract class PhonographColoredTarget extends BitmapPaletteTarget {
|
||||||
public PhonographColoredTarget(ImageView view) {
|
public PhonographColoredTarget(ImageView view) {
|
||||||
|
|
@ -23,11 +24,11 @@ public abstract class PhonographColoredTarget extends BitmapPaletteTarget {
|
||||||
@Override
|
@Override
|
||||||
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
||||||
super.onResourceReady(resource, glideAnimation);
|
super.onResourceReady(resource, glideAnimation);
|
||||||
onColorReady(ColorUtil.getColor(resource.getPalette(), getDefaultBarColor()));
|
onColorReady(PhonographColorUtil.getColor(resource.getPalette(), getDefaultBarColor()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int getDefaultBarColor() {
|
protected int getDefaultBarColor() {
|
||||||
return ColorUtil.resolveColor(getView().getContext(), R.attr.default_bar_color);
|
return ATHUtil.resolveColor(getView().getContext(), R.attr.default_bar_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void onColorReady(int color);
|
public abstract void onColorReady(int color);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.load.engine.Resource;
|
import com.bumptech.glide.load.engine.Resource;
|
||||||
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
|
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
|
||||||
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
|
import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
|
|
||||||
public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, BitmapPaletteWrapper> {
|
public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, BitmapPaletteWrapper> {
|
||||||
private final BitmapPool bitmapPool;
|
private final BitmapPool bitmapPool;
|
||||||
|
|
@ -23,7 +23,7 @@ public class BitmapPaletteTranscoder implements ResourceTranscoder<Bitmap, Bitma
|
||||||
@Override
|
@Override
|
||||||
public Resource<BitmapPaletteWrapper> transcode(Resource<Bitmap> bitmapResource) {
|
public Resource<BitmapPaletteWrapper> transcode(Resource<Bitmap> bitmapResource) {
|
||||||
Bitmap bitmap = bitmapResource.get();
|
Bitmap bitmap = bitmapResource.get();
|
||||||
BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(bitmap, ColorUtil.generatePalette(bitmap));
|
BitmapPaletteWrapper bitmapPaletteWrapper = new BitmapPaletteWrapper(bitmap, PhonographColorUtil.generatePalette(bitmap));
|
||||||
return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool);
|
return new BitmapPaletteResource(bitmapPaletteWrapper, bitmapPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.kabouzeid.gramophone.glide.palette;
|
||||||
|
|
||||||
|
import android.support.annotation.ColorInt;
|
||||||
|
import android.support.v7.graphics.Palette;
|
||||||
|
|
||||||
|
import com.github.florent37.glidepalette.common.BaseColorGenerator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
*/
|
||||||
|
public class CustomTextColorGenerator extends BaseColorGenerator {
|
||||||
|
private final int titleDark;
|
||||||
|
private final int titleLight;
|
||||||
|
private final int bodyDark;
|
||||||
|
private final int bodyLight;
|
||||||
|
|
||||||
|
public CustomTextColorGenerator(@ColorInt int titleDark, @ColorInt int titleLight, @ColorInt int bodyDark, @ColorInt int bodyLight) {
|
||||||
|
this.titleDark = titleDark;
|
||||||
|
this.titleLight = titleLight;
|
||||||
|
this.bodyDark = bodyDark;
|
||||||
|
this.bodyLight = bodyLight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getTitleTextColor(Palette.Swatch swatch) {
|
||||||
|
return super.getTitleTextColor(swatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getBodyTextColor(Palette.Swatch swatch) {
|
||||||
|
return super.getBodyTextColor(swatch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -24,13 +24,14 @@ import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.request.animation.GlideAnimation;
|
import com.bumptech.glide.request.animation.GlideAnimation;
|
||||||
import com.bumptech.glide.request.target.SimpleTarget;
|
import com.bumptech.glide.request.target.SimpleTarget;
|
||||||
import com.bumptech.glide.request.target.Target;
|
import com.bumptech.glide.request.target.Target;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.glide.SongGlideRequest;
|
import com.kabouzeid.gramophone.glide.SongGlideRequest;
|
||||||
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
|
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.service.MusicService;
|
import com.kabouzeid.gramophone.service.MusicService;
|
||||||
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
import com.kabouzeid.gramophone.ui.activities.MainActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
||||||
public class PlayingNotificationHelper {
|
public class PlayingNotificationHelper {
|
||||||
|
|
@ -69,7 +70,7 @@ public class PlayingNotificationHelper {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
||||||
setAlbumCover(resource.getBitmap(), ColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT));
|
setAlbumCover(resource.getBitmap(), PhonographColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -214,7 +215,7 @@ public class PlayingNotificationHelper {
|
||||||
bgColor = Color.TRANSPARENT;
|
bgColor = Color.TRANSPARENT;
|
||||||
}
|
}
|
||||||
setBackgroundColor(bgColor);
|
setBackgroundColor(bgColor);
|
||||||
setDarkNotificationContent(bgColor == Color.TRANSPARENT ? Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP : ColorUtil.useDarkTextColorOnBackground(bgColor));
|
setDarkNotificationContent(bgColor == Color.TRANSPARENT ? Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP : ColorUtil.isColorLight(bgColor));
|
||||||
|
|
||||||
if (notification != null) {
|
if (notification != null) {
|
||||||
notificationManager.notify(notificationId, notification);
|
notificationManager.notify(notificationId, notification);
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
package com.kabouzeid.gramophone.misc;
|
|
||||||
|
|
||||||
import android.content.res.ColorStateList;
|
|
||||||
import android.graphics.PorterDuff;
|
|
||||||
import android.support.design.widget.FloatingActionButton;
|
|
||||||
import android.util.Property;
|
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
|
||||||
*/
|
|
||||||
public class FloatingActionButtonProperties {
|
|
||||||
public static final Property<FloatingActionButton, Integer> COLOR = new Property<FloatingActionButton, Integer>(Integer.class, "color") {
|
|
||||||
@Override
|
|
||||||
public void set(FloatingActionButton object, Integer value) {
|
|
||||||
object.setBackgroundTintList(ColorStateList.valueOf(value));
|
|
||||||
object.getDrawable().mutate().setColorFilter(ColorUtil.getPrimaryTextColorForBackground(object.getContext(), value), PorterDuff.Mode.SRC_IN);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Integer get(FloatingActionButton object) {
|
|
||||||
return object.getBackgroundTintList() != null ? object.getBackgroundTintList().getDefaultColor() : 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -16,11 +16,11 @@ import android.widget.TextView;
|
||||||
|
|
||||||
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
import com.afollestad.materialdialogs.internal.ThemeSingleton;
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
import com.kabouzeid.gramophone.dialogs.ChangelogDialog;
|
||||||
import com.kabouzeid.gramophone.dialogs.DonationDialog;
|
import com.kabouzeid.gramophone.dialogs.DonationDialog;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
@ -176,7 +176,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpIconTint() {
|
private void setUpIconTint() {
|
||||||
int iconColor = ColorUtil.resolveColor(this, R.attr.icon_color);
|
int iconColor = ATHUtil.resolveColor(this, R.attr.icon_color, ThemeStore.textColorSecondary(this));
|
||||||
iconInfo.setColorFilter(iconColor);
|
iconInfo.setColorFilter(iconColor);
|
||||||
iconChangelog.setColorFilter(iconColor);
|
iconChangelog.setColorFilter(iconColor);
|
||||||
iconIntro.setColorFilter(iconColor);
|
iconIntro.setColorFilter(iconColor);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.request.RequestListener;
|
import com.bumptech.glide.request.RequestListener;
|
||||||
import com.bumptech.glide.request.target.Target;
|
import com.bumptech.glide.request.target.Target;
|
||||||
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
|
import com.github.ksoichiro.android.observablescrollview.ObservableRecyclerView;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter;
|
import com.kabouzeid.gramophone.adapter.song.AlbumSongAdapter;
|
||||||
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||||
|
|
@ -34,8 +36,8 @@ import com.kabouzeid.gramophone.model.Album;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
|
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
|
|
@ -106,8 +108,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
|
|
||||||
// Change alpha of overlay
|
// Change alpha of overlay
|
||||||
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
||||||
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
toolbar.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
|
||||||
setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.withAlpha(toolbarColor, cab != null && cab.isActive() ? 1 : toolbarAlpha));
|
||||||
|
|
||||||
// Translate name text
|
// Translate name text
|
||||||
int maxTitleTranslationY = albumArtViewHeight;
|
int maxTitleTranslationY = albumArtViewHeight;
|
||||||
|
|
@ -174,7 +176,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
private void setColors(int color) {
|
private void setColors(int color) {
|
||||||
toolbarColor = color;
|
toolbarColor = color;
|
||||||
albumTitleView.setBackgroundColor(color);
|
albumTitleView.setBackgroundColor(color);
|
||||||
albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, color));
|
albumTitleView.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color)));
|
||||||
|
|
||||||
setNavigationbarColor(color);
|
setNavigationbarColor(color);
|
||||||
setTaskDescriptionColor(color);
|
setTaskDescriptionColor(color);
|
||||||
|
|
@ -295,11 +297,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
cab = new MaterialCab(this, R.id.cab_stub)
|
||||||
.setMenu(menuRes)
|
.setMenu(menuRes)
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
|
.setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
|
||||||
.start(new MaterialCab.Callback() {
|
.start(new MaterialCab.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
||||||
setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
setStatusbarColor(ColorUtil.stripAlpha(toolbarColor));
|
||||||
return callback.onCabCreated(materialCab, menu);
|
return callback.onCabCreated(materialCab, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -310,7 +312,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabFinished(MaterialCab materialCab) {
|
public boolean onCabFinished(MaterialCab materialCab) {
|
||||||
setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
|
||||||
return callback.onCabFinished(materialCab);
|
return callback.onCabFinished(materialCab);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||||
import com.bumptech.glide.request.RequestListener;
|
import com.bumptech.glide.request.RequestListener;
|
||||||
import com.bumptech.glide.request.target.Target;
|
import com.bumptech.glide.request.target.Target;
|
||||||
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
|
import com.github.ksoichiro.android.observablescrollview.ObservableListView;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.adapter.album.HorizontalAlbumAdapter;
|
import com.kabouzeid.gramophone.adapter.album.HorizontalAlbumAdapter;
|
||||||
import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter;
|
import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter;
|
||||||
|
|
@ -48,8 +50,8 @@ import com.kabouzeid.gramophone.model.Artist;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
import com.kabouzeid.gramophone.util.ArtistSignatureUtil;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -131,8 +133,8 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
|
|
||||||
// Change alpha of overlay
|
// Change alpha of overlay
|
||||||
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange));
|
||||||
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
toolbar.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
|
||||||
setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.withAlpha(toolbarColor, cab != null && cab.isActive() ? 1 : toolbarAlpha));
|
||||||
|
|
||||||
// Translate name text
|
// Translate name text
|
||||||
int maxTitleTranslationY = artistImageViewHeight;
|
int maxTitleTranslationY = artistImageViewHeight;
|
||||||
|
|
@ -297,12 +299,12 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
return toolbarColor;
|
return toolbarColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setColors(int vibrantColor) {
|
private void setColors(int color) {
|
||||||
toolbarColor = vibrantColor;
|
toolbarColor = color;
|
||||||
artistName.setBackgroundColor(vibrantColor);
|
artistName.setBackgroundColor(color);
|
||||||
artistName.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, vibrantColor));
|
artistName.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color)));
|
||||||
setNavigationbarColor(vibrantColor);
|
setNavigationbarColor(color);
|
||||||
setTaskDescriptionColor(vibrantColor);
|
setTaskDescriptionColor(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getArtistFromIntentExtras() {
|
private void getArtistFromIntentExtras() {
|
||||||
|
|
@ -380,11 +382,11 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
cab = new MaterialCab(this, R.id.cab_stub)
|
||||||
.setMenu(menuRes)
|
.setMenu(menuRes)
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
|
.setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(getPaletteColor()))
|
||||||
.start(new MaterialCab.Callback() {
|
.start(new MaterialCab.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
public boolean onCabCreated(MaterialCab materialCab, Menu menu) {
|
||||||
setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor));
|
setStatusbarColor(ColorUtil.stripAlpha(toolbarColor));
|
||||||
return callback.onCabCreated(materialCab, menu);
|
return callback.onCabCreated(materialCab, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -395,7 +397,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCabFinished(MaterialCab materialCab) {
|
public boolean onCabFinished(MaterialCab materialCab) {
|
||||||
setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor));
|
setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha));
|
||||||
return callback.onCabFinished(materialCab);
|
return callback.onCabFinished(materialCab);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,18 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities;
|
package com.kabouzeid.gramophone.ui.activities;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.app.ActivityManager;
|
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.support.annotation.ColorInt;
|
|
||||||
import android.support.v4.content.ContextCompat;
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.github.paolorotolo.appintro.AppIntro;
|
import com.github.paolorotolo.appintro.AppIntro;
|
||||||
import com.github.paolorotolo.appintro.AppIntroFragment;
|
import com.github.paolorotolo.appintro.AppIntroFragment;
|
||||||
|
import com.kabouzeid.appthemehelper.ATH;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -23,8 +22,9 @@ public class IntroActivity extends AppIntro {
|
||||||
@Override
|
@Override
|
||||||
public void init(Bundle savedInstanceState) {
|
public void init(Bundle savedInstanceState) {
|
||||||
int color = ContextCompat.getColor(this, R.color.blue_grey_700);
|
int color = ContextCompat.getColor(this, R.color.blue_grey_700);
|
||||||
setStatusBarColor(ColorUtil.shiftColorDown(color));
|
|
||||||
setTaskColor(color);
|
ATH.setStatusbarColor(this, ColorUtil.darkenColor(color));
|
||||||
|
ATH.setTaskDescriptionColor(this, color);
|
||||||
|
|
||||||
showSkipButton(false);
|
showSkipButton(false);
|
||||||
|
|
||||||
|
|
@ -40,15 +40,6 @@ public class IntroActivity extends AppIntro {
|
||||||
addSlide(AppIntroFragment.newInstance(getString(R.string.label_playing_queue), getString(R.string.rearrange_playing_queue_instruction), R.drawable.tutorial_rearrange_queue, color));
|
addSlide(AppIntroFragment.newInstance(getString(R.string.label_playing_queue), getString(R.string.rearrange_playing_queue_instruction), R.drawable.tutorial_rearrange_queue, color));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setTaskColor(@ColorInt int color) {
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
||||||
setTaskDescription(new ActivityManager.TaskDescription(
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
ColorUtil.getOpaqueColor(color)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hasExternalStoragePermission() {
|
private boolean hasExternalStoragePermission() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
return checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
|
return checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,8 @@ import com.kabouzeid.gramophone.service.MusicService;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment;
|
||||||
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment;
|
import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityRecyclerViewCustomGridSizeFragment;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
import com.sothree.slidinguppanel.SlidingUpPanelLayout;
|
||||||
|
|
@ -538,7 +538,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
cab = new MaterialCab(this, R.id.cab_stub)
|
||||||
.setMenu(menu)
|
.setMenu(menu)
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
.setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
||||||
.start(callback);
|
.start(callback);
|
||||||
return cab;
|
return cab;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.NavigationUtil;
|
import com.kabouzeid.gramophone.util.NavigationUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -188,7 +188,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
cab = new MaterialCab(this, R.id.cab_stub)
|
cab = new MaterialCab(this, R.id.cab_stub)
|
||||||
.setMenu(menu)
|
.setMenu(menu)
|
||||||
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
.setCloseDrawableRes(R.drawable.ic_close_white_24dp)
|
||||||
.setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
.setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
|
||||||
.start(callback);
|
.start(callback);
|
||||||
return cab;
|
return cab;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,8 @@ package com.kabouzeid.gramophone.ui.activities.tageditor;
|
||||||
import android.app.SearchManager;
|
import android.app.SearchManager;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.content.res.ColorStateList;
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.PorterDuff;
|
|
||||||
import android.media.MediaScannerConnection;
|
import android.media.MediaScannerConnection;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
|
@ -25,10 +23,11 @@ import android.widget.LinearLayout;
|
||||||
import com.afollestad.materialdialogs.MaterialDialog;
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
|
import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.TintHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
|
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
|
|
||||||
|
|
@ -85,7 +84,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
header.setTranslationY(scrollY);
|
header.setTranslationY(scrollY);
|
||||||
alpha = 1;
|
alpha = 1;
|
||||||
}
|
}
|
||||||
toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(alpha, paletteColorPrimary));
|
toolbar.setBackgroundColor(ColorUtil.withAlpha(paletteColorPrimary, alpha));
|
||||||
image.setTranslationY(scrollY / 2);
|
image.setTranslationY(scrollY / 2);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -188,10 +187,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
int accentColor = ThemeStore.accentColor(this);
|
TintHelper.setTintAuto(fab, ThemeStore.accentColor(this), true);
|
||||||
int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, accentColor);
|
|
||||||
fab.setBackgroundTintList(ColorStateList.valueOf(accentColor));
|
|
||||||
fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void save();
|
protected abstract void save();
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||||
import com.bumptech.glide.request.animation.GlideAnimation;
|
import com.bumptech.glide.request.animation.GlideAnimation;
|
||||||
import com.bumptech.glide.request.target.SimpleTarget;
|
import com.bumptech.glide.request.target.SimpleTarget;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
|
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder;
|
||||||
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
|
import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper;
|
||||||
|
|
@ -25,9 +26,9 @@ import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient;
|
||||||
import com.kabouzeid.gramophone.lastfm.rest.model.LastFmAlbum;
|
import com.kabouzeid.gramophone.lastfm.rest.model.LastFmAlbum;
|
||||||
import com.kabouzeid.gramophone.loader.AlbumLoader;
|
import com.kabouzeid.gramophone.loader.AlbumLoader;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.LastFMUtil;
|
import com.kabouzeid.gramophone.util.LastFMUtil;
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
|
import com.kabouzeid.gramophone.util.PhonographColorUtil;
|
||||||
|
|
||||||
import org.jaudiotagger.tag.FieldKey;
|
import org.jaudiotagger.tag.FieldKey;
|
||||||
import org.jaudiotagger.tag.images.Artwork;
|
import org.jaudiotagger.tag.images.Artwork;
|
||||||
|
|
@ -92,7 +93,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
||||||
@Override
|
@Override
|
||||||
protected void loadCurrentImage() {
|
protected void loadCurrentImage() {
|
||||||
Bitmap bitmap = getAlbumArt();
|
Bitmap bitmap = getAlbumArt();
|
||||||
setImageBitmap(bitmap, ColorUtil.getColor(ColorUtil.generatePalette(bitmap), ColorUtil.resolveColor(this, R.attr.default_bar_color)));
|
setImageBitmap(bitmap, PhonographColorUtil.getColor(PhonographColorUtil.generatePalette(bitmap), ATHUtil.resolveColor(this, R.attr.default_bar_color)));
|
||||||
deleteAlbumArt = false;
|
deleteAlbumArt = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -128,7 +129,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
||||||
@Override
|
@Override
|
||||||
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
||||||
albumArtBitmap = getResizedAlbumCover(resource.getBitmap(), 2048);
|
albumArtBitmap = getResizedAlbumCover(resource.getBitmap(), 2048);
|
||||||
setImageBitmap(albumArtBitmap, ColorUtil.getColor(resource.getPalette(), ColorUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
|
setImageBitmap(albumArtBitmap, PhonographColorUtil.getColor(resource.getPalette(), ATHUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
|
||||||
deleteAlbumArt = false;
|
deleteAlbumArt = false;
|
||||||
dataChanged();
|
dataChanged();
|
||||||
setResult(RESULT_OK);
|
setResult(RESULT_OK);
|
||||||
|
|
@ -159,7 +160,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void deleteImage() {
|
protected void deleteImage() {
|
||||||
setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.default_album_art), ColorUtil.resolveColor(this, R.attr.default_bar_color));
|
setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.default_album_art), ATHUtil.resolveColor(this, R.attr.default_bar_color));
|
||||||
deleteAlbumArt = true;
|
deleteAlbumArt = true;
|
||||||
dataChanged();
|
dataChanged();
|
||||||
}
|
}
|
||||||
|
|
@ -223,9 +224,9 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
||||||
ColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT);
|
PhonographColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT);
|
||||||
albumArtBitmap = getResizedAlbumCover(resource.getBitmap(), 2048);
|
albumArtBitmap = getResizedAlbumCover(resource.getBitmap(), 2048);
|
||||||
setImageBitmap(albumArtBitmap, ColorUtil.getColor(resource.getPalette(), ColorUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
|
setImageBitmap(albumArtBitmap, PhonographColorUtil.getColor(resource.getPalette(), ATHUtil.resolveColor(AlbumTagEditorActivity.this, R.attr.default_bar_color)));
|
||||||
deleteAlbumArt = false;
|
deleteAlbumArt = false;
|
||||||
dataChanged();
|
dataChanged();
|
||||||
setResult(RESULT_OK);
|
setResult(RESULT_OK);
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,11 @@ import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
|
|
@ -63,9 +65,9 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
|
||||||
if (recyclerView instanceof FastScrollRecyclerView) {
|
if (recyclerView instanceof FastScrollRecyclerView) {
|
||||||
int accentColor = ThemeStore.accentColor(getActivity());
|
int accentColor = ThemeStore.accentColor(getActivity());
|
||||||
((FastScrollRecyclerView) recyclerView).setPopupBgColor(accentColor);
|
((FastScrollRecyclerView) recyclerView).setPopupBgColor(accentColor);
|
||||||
((FastScrollRecyclerView) recyclerView).setPopupTextColor(ColorUtil.getPrimaryTextColorForBackground(getActivity(), accentColor));
|
((FastScrollRecyclerView) recyclerView).setPopupTextColor(MaterialValueHelper.getPrimaryTextColor(getActivity(), ColorUtil.isColorLight(accentColor)));
|
||||||
((FastScrollRecyclerView) recyclerView).setThumbColor(accentColor);
|
((FastScrollRecyclerView) recyclerView).setThumbColor(accentColor);
|
||||||
((FastScrollRecyclerView) recyclerView).setTrackColor(ColorUtil.getColorWithAlpha(0.12f, ColorUtil.resolveColor(getContext(), R.attr.colorControlNormal)));
|
((FastScrollRecyclerView) recyclerView).setTrackColor(ColorUtil.withAlpha(ATHUtil.resolveColor(getContext(), R.attr.colorControlNormal), 0.12f));
|
||||||
}
|
}
|
||||||
invalidateLayoutManager();
|
invalidateLayoutManager();
|
||||||
invalidateAdapter();
|
invalidateAdapter();
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,15 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
||||||
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
||||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
||||||
|
|
||||||
|
|
@ -95,9 +97,9 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpMiniPlayer() {
|
private void setUpMiniPlayer() {
|
||||||
setMiniPlayerColor(ColorUtil.resolveColor(activity, R.attr.cardBackgroundColor));
|
setMiniPlayerColor(ATHUtil.resolveColor(activity, R.attr.cardBackgroundColor));
|
||||||
miniPlayerImage.setImageDrawable(Util.getTintedDrawable(activity, R.drawable.ic_keyboard_arrow_up_white_24dp,
|
miniPlayerImage.setImageDrawable(Util.getTintedDrawable(activity, R.drawable.ic_keyboard_arrow_up_white_24dp,
|
||||||
ColorUtil.resolveColor(activity, android.R.attr.textColorSecondary)));
|
ATHUtil.resolveColor(activity, R.attr.icon_color, ThemeStore.textColorSecondary(getActivity()))));
|
||||||
setUpPlayPauseButton();
|
setUpPlayPauseButton();
|
||||||
|
|
||||||
progressBar.setProgressTintList(ColorStateList.valueOf(ThemeStore.accentColor(activity)));
|
progressBar.setProgressTintList(ColorStateList.valueOf(ThemeStore.accentColor(activity)));
|
||||||
|
|
@ -106,13 +108,13 @@ public class MiniPlayerFragment extends Fragment implements MusicServiceEventLis
|
||||||
public void setMiniPlayerColor(int color) {
|
public void setMiniPlayerColor(int color) {
|
||||||
if (getView() == null) return;
|
if (getView() == null) return;
|
||||||
getView().setBackgroundColor(color);
|
getView().setBackgroundColor(color);
|
||||||
miniPlayerTitle.setTextColor(ColorUtil.getPrimaryTextColorForBackground(activity, color));
|
miniPlayerTitle.setTextColor(MaterialValueHelper.getPrimaryTextColor(activity, ColorUtil.isColorLight(color)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpPlayPauseButton() {
|
private void setUpPlayPauseButton() {
|
||||||
updatePlayPauseDrawableState(false);
|
updatePlayPauseDrawableState(false);
|
||||||
miniPlayerPlayPauseButton.setImageDrawable(miniPlayerPlayPauseDrawable);
|
miniPlayerPlayPauseButton.setImageDrawable(miniPlayerPlayPauseDrawable);
|
||||||
miniPlayerPlayPauseButton.setColorFilter(ColorUtil.resolveColor(activity, android.R.attr.textColorSecondary), PorterDuff.Mode.SRC_IN);
|
miniPlayerPlayPauseButton.setColorFilter(ATHUtil.resolveColor(activity, R.attr.icon_color, ThemeStore.textColorSecondary(getActivity())), PorterDuff.Mode.SRC_IN);
|
||||||
miniPlayerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
miniPlayerPlayPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,16 +14,17 @@ import android.widget.ImageButton;
|
||||||
import android.widget.SeekBar;
|
import android.widget.SeekBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
|
import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
|
||||||
|
import com.kabouzeid.appthemehelper.util.TintHelper;
|
||||||
import com.kabouzeid.gramophone.R;
|
import com.kabouzeid.gramophone.R;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
import com.kabouzeid.gramophone.helper.MusicProgressViewUpdateHelper;
|
||||||
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
import com.kabouzeid.gramophone.helper.PlayPauseButtonOnClickHandler;
|
||||||
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
import com.kabouzeid.gramophone.interfaces.MusicServiceEventListener;
|
||||||
import com.kabouzeid.gramophone.misc.FloatingActionButtonProperties;
|
|
||||||
import com.kabouzeid.gramophone.misc.SimpleOnSeekbarChangeListener;
|
import com.kabouzeid.gramophone.misc.SimpleOnSeekbarChangeListener;
|
||||||
import com.kabouzeid.gramophone.service.MusicService;
|
import com.kabouzeid.gramophone.service.MusicService;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicServiceActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
import com.kabouzeid.gramophone.views.PlayPauseDrawable;
|
||||||
|
|
@ -148,12 +149,12 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setColor(int color) {
|
public void setColor(int color) {
|
||||||
if (ColorUtil.useDarkTextColorOnBackground(color)) {
|
if (ColorUtil.isColorLight(color)) {
|
||||||
lastPlaybackControlsColor = ColorUtil.getSecondaryTextColor(getActivity(), true);
|
lastPlaybackControlsColor = MaterialValueHelper.getSecondaryTextColor(getActivity(), true);
|
||||||
lastDisabledPlaybackControlsColor = ColorUtil.getSecondaryDisabledTextColor(getActivity(), true);
|
lastDisabledPlaybackControlsColor = MaterialValueHelper.getSecondaryDisabledTextColor(getActivity(), true);
|
||||||
} else {
|
} else {
|
||||||
lastPlaybackControlsColor = ColorUtil.getPrimaryTextColor(getActivity(), false);
|
lastPlaybackControlsColor = MaterialValueHelper.getPrimaryTextColor(getActivity(), false);
|
||||||
lastDisabledPlaybackControlsColor = ColorUtil.getPrimaryDisabledTextColor(getActivity(), false);
|
lastDisabledPlaybackControlsColor = MaterialValueHelper.getPrimaryDisabledTextColor(getActivity(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateRepeatState();
|
updateRepeatState();
|
||||||
|
|
@ -166,7 +167,10 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
private void setUpPlayPauseFab() {
|
private void setUpPlayPauseFab() {
|
||||||
updatePlayPauseDrawableState(false);
|
updatePlayPauseDrawableState(false);
|
||||||
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable);
|
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable);
|
||||||
FloatingActionButtonProperties.COLOR.set(playPauseFab, Color.WHITE);
|
final int fabColor = Color.WHITE;
|
||||||
|
TintHelper.setTintAuto(playPauseFab, fabColor, true);
|
||||||
|
// because of our custom drawable we have to set the tint manually
|
||||||
|
playPauseFab.getDrawable().mutate().setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
|
||||||
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
||||||
playPauseFab.post(new Runnable() {
|
playPauseFab.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -215,7 +219,7 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateProgressTextColor() {
|
private void updateProgressTextColor() {
|
||||||
int color = ColorUtil.getPrimaryTextColor(getContext(), false);
|
int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false);
|
||||||
songTotalTime.setTextColor(color);
|
songTotalTime.setTextColor(color);
|
||||||
songCurrentProgress.setTextColor(color);
|
songCurrentProgress.setTextColor(color);
|
||||||
}
|
}
|
||||||
|
|
@ -295,7 +299,7 @@ public class PlaybackControlsFragment extends Fragment implements MusicServiceEv
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateProgressSliderTint() {
|
private void updateProgressSliderTint() {
|
||||||
int color = ColorUtil.getPrimaryTextColor(getContext(), false);
|
int color = MaterialValueHelper.getPrimaryTextColor(getContext(), false);
|
||||||
progressSlider.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
progressSlider.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
|
||||||
progressSlider.getProgressDrawable().mutate().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_IN);
|
progressSlider.getProgressDrawable().mutate().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_IN);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
|
import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
|
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
|
||||||
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
||||||
|
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||||
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
import com.kabouzeid.appthemehelper.util.ATHUtil;
|
||||||
import com.kabouzeid.appthemehelper.util.TintHelper;
|
import com.kabouzeid.appthemehelper.util.TintHelper;
|
||||||
import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
|
import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper;
|
||||||
|
|
@ -36,7 +37,6 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
import com.kabouzeid.gramophone.helper.menu.SongMenuHelper;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||||
import com.kabouzeid.gramophone.util.ColorUtil;
|
|
||||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||||
import com.kabouzeid.gramophone.util.Util;
|
import com.kabouzeid.gramophone.util.Util;
|
||||||
import com.kabouzeid.gramophone.util.ViewUtil;
|
import com.kabouzeid.gramophone.util.ViewUtil;
|
||||||
|
|
@ -115,7 +115,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
});
|
});
|
||||||
|
|
||||||
// for some reason the xml attribute doesn't get applied here.
|
// for some reason the xml attribute doesn't get applied here.
|
||||||
playingQueueCard.setCardBackgroundColor(ColorUtil.resolveColor(getActivity(), R.attr.cardBackgroundColor));
|
playingQueueCard.setCardBackgroundColor(ATHUtil.resolveColor(getActivity(), R.attr.cardBackgroundColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -365,7 +365,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
@Override
|
@Override
|
||||||
public void animateColorChange(PlayerFragment fragment, int newColor) {
|
public void animateColorChange(PlayerFragment fragment, int newColor) {
|
||||||
if (ATHUtil.isWindowBackgroundDark(fragment.getActivity())) {
|
if (ATHUtil.isWindowBackgroundDark(fragment.getActivity())) {
|
||||||
fragment.playerQueueSubHeader.setTextColor(ColorUtil.getSecondaryTextColor(fragment.getActivity(), false));
|
fragment.playerQueueSubHeader.setTextColor(ThemeStore.textColorSecondary(fragment.getActivity()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -382,7 +382,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
currentSongViewHolder.separator.setVisibility(View.VISIBLE);
|
currentSongViewHolder.separator.setVisibility(View.VISIBLE);
|
||||||
currentSongViewHolder.shortSeparator.setVisibility(View.GONE);
|
currentSongViewHolder.shortSeparator.setVisibility(View.GONE);
|
||||||
currentSongViewHolder.image.setScaleType(ImageView.ScaleType.CENTER);
|
currentSongViewHolder.image.setScaleType(ImageView.ScaleType.CENTER);
|
||||||
currentSongViewHolder.image.setImageDrawable(Util.getTintedDrawable(fragment.getActivity(), R.drawable.ic_volume_up_white_24dp, ColorUtil.resolveColor(fragment.getActivity(), R.attr.icon_color)));
|
currentSongViewHolder.image.setImageDrawable(Util.getTintedDrawable(fragment.getActivity(), R.drawable.ic_volume_up_white_24dp, ATHUtil.resolveColor(fragment.getActivity(), R.attr.icon_color, ThemeStore.textColorSecondary(fragment.getActivity()))));
|
||||||
currentSongViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
currentSongViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
|
@ -481,8 +481,7 @@ public class PlayerFragment extends AbsPlayerFragment implements PlayerAlbumCove
|
||||||
fragment.slidingUpPanelLayout.setBackgroundColor(fragment.lastColor);
|
fragment.slidingUpPanelLayout.setBackgroundColor(fragment.lastColor);
|
||||||
|
|
||||||
AnimatorSet animatorSet = createDefaultColorChangeAnimatorSet(fragment, newColor);
|
AnimatorSet animatorSet = createDefaultColorChangeAnimatorSet(fragment, newColor);
|
||||||
animatorSet.play(ViewUtil.createBackgroundColorTransition(fragment.toolbar, fragment.lastColor, newColor))
|
animatorSet.play(ViewUtil.createBackgroundColorTransition(fragment.toolbar, fragment.lastColor, newColor));
|
||||||
.with(ViewUtil.createBackgroundColorTransition(fragment.getView().findViewById(R.id.status_bar), ColorUtil.shiftColorDown(fragment.lastColor), ColorUtil.shiftColorDown(newColor)));
|
|
||||||
animatorSet.start();
|
animatorSet.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,266 +0,0 @@
|
||||||
package com.kabouzeid.gramophone.util;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.res.TypedArray;
|
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.support.annotation.AttrRes;
|
|
||||||
import android.support.annotation.ColorInt;
|
|
||||||
import android.support.annotation.FloatRange;
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
import android.support.v4.content.ContextCompat;
|
|
||||||
import android.support.v7.graphics.Palette;
|
|
||||||
|
|
||||||
import com.kabouzeid.gramophone.R;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Karim Abou Zeid (kabouzeid)
|
|
||||||
*/
|
|
||||||
public class ColorUtil {
|
|
||||||
public static final int PALETTE_BITMAP_SIZE = 100;
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public static Palette generatePalette(Bitmap bitmap) {
|
|
||||||
if (bitmap == null) return null;
|
|
||||||
return Palette.from(bitmap)
|
|
||||||
.resizeBitmapSize(PALETTE_BITMAP_SIZE)
|
|
||||||
.generate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getColor(@Nullable Palette palette, int fallback) {
|
|
||||||
if (palette != null) {
|
|
||||||
if (palette.getVibrantSwatch() != null) {
|
|
||||||
return palette.getVibrantSwatch().getRgb();
|
|
||||||
} else if (palette.getMutedSwatch() != null) {
|
|
||||||
return palette.getMutedSwatch().getRgb();
|
|
||||||
} else if (palette.getDarkVibrantSwatch() != null) {
|
|
||||||
return palette.getDarkVibrantSwatch().getRgb();
|
|
||||||
} else if (palette.getDarkMutedSwatch() != null) {
|
|
||||||
return palette.getDarkMutedSwatch().getRgb();
|
|
||||||
} else if (palette.getLightVibrantSwatch() != null) {
|
|
||||||
return palette.getLightVibrantSwatch().getRgb();
|
|
||||||
} else if (palette.getLightMutedSwatch() != null) {
|
|
||||||
return palette.getLightMutedSwatch().getRgb();
|
|
||||||
} else if (palette.getSwatches() != null && !palette.getSwatches().isEmpty()) {
|
|
||||||
return Collections.max(palette.getSwatches(), SwatchComparator.getInstance()).getRgb();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SwatchComparator implements Comparator<Palette.Swatch> {
|
|
||||||
private static SwatchComparator sInstance;
|
|
||||||
|
|
||||||
static SwatchComparator getInstance() {
|
|
||||||
if (sInstance == null) {
|
|
||||||
sInstance = new SwatchComparator();
|
|
||||||
}
|
|
||||||
return sInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compare(Palette.Swatch lhs, Palette.Swatch rhs) {
|
|
||||||
return lhs.getPopulation() - rhs.getPopulation();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int resolveColor(@NonNull Context context, @AttrRes int colorAttr) {
|
|
||||||
TypedArray a = context.obtainStyledAttributes(new int[]{colorAttr});
|
|
||||||
int resId = a.getColor(0, 0);
|
|
||||||
a.recycle();
|
|
||||||
return resId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getOpaqueColor(@ColorInt int color) {
|
|
||||||
return color | 0xFF000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getColorWithAlpha(float alpha, @ColorInt int baseColor) {
|
|
||||||
int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24;
|
|
||||||
int rgb = 0x00ffffff & baseColor;
|
|
||||||
return a + rgb;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int shiftColor(@ColorInt int color, @FloatRange(from = 0.0f, to = 2.0f) float by) {
|
|
||||||
if (by == 1f) return color;
|
|
||||||
int alpha = Color.alpha(color);
|
|
||||||
float[] hsv = new float[3];
|
|
||||||
Color.colorToHSV(color, hsv);
|
|
||||||
hsv[2] *= by; // value component
|
|
||||||
// don't use getColorWithAlpha(float alpha, int baseColor) here
|
|
||||||
return (alpha << 24) + (0x00ffffff & Color.HSVToColor(hsv));
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("ResourceType")
|
|
||||||
@ColorInt
|
|
||||||
public static int shiftColorDown(@ColorInt int color) {
|
|
||||||
return shiftColor(color, 0.9f);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("ResourceType")
|
|
||||||
@ColorInt
|
|
||||||
public static int shiftColorUp(@ColorInt int color) {
|
|
||||||
return shiftColor(color, 1.1f);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getPrimaryTextColor(final Context context, boolean dark) {
|
|
||||||
return dark ? ContextCompat.getColor(context, R.color.primary_text_default_material_light) : ContextCompat.getColor(context, R.color.primary_text_default_material_dark);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getSecondaryTextColor(final Context context, boolean dark) {
|
|
||||||
return dark ? ContextCompat.getColor(context, R.color.secondary_text_default_material_light) : ContextCompat.getColor(context, R.color.secondary_text_default_material_dark);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getPrimaryDisabledTextColor(final Context context, boolean dark) {
|
|
||||||
return dark ? ContextCompat.getColor(context, R.color.primary_text_disabled_material_light) : ContextCompat.getColor(context, R.color.primary_text_disabled_material_dark);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getSecondaryDisabledTextColor(final Context context, boolean dark) {
|
|
||||||
return dark ? ContextCompat.getColor(context, R.color.secondary_text_disabled_material_light) : ContextCompat.getColor(context, R.color.secondary_text_disabled_material_dark);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static float getLuminance(@ColorInt int color) {
|
|
||||||
return (Color.red(color) * 0.299f + Color.green(color) * 0.587f + Color.blue(color) * 0.114f);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean useDarkTextColorOnBackground(@ColorInt int backgroundColor) {
|
|
||||||
return getLuminance(backgroundColor) > (255f / 1.5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getPrimaryTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
|
|
||||||
return getPrimaryTextColor(context, useDarkTextColorOnBackground(backgroundColor));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getSecondaryTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
|
|
||||||
return getSecondaryTextColor(context, useDarkTextColorOnBackground(backgroundColor));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getPrimaryDisabledTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
|
|
||||||
return getPrimaryDisabledTextColor(context, useDarkTextColorOnBackground(backgroundColor));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int getSecondaryDisabledTextColorForBackground(final Context context, @ColorInt int backgroundColor) {
|
|
||||||
return getSecondaryDisabledTextColor(context, useDarkTextColorOnBackground(backgroundColor));
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int shiftBackgroundColorForLightText(@ColorInt int backgroundColor) {
|
|
||||||
while (ColorUtil.useDarkTextColorOnBackground(backgroundColor)) {
|
|
||||||
backgroundColor = ColorUtil.shiftColorDown(backgroundColor);
|
|
||||||
}
|
|
||||||
return backgroundColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ColorInt
|
|
||||||
public static int shiftBackgroundColorForDarkText(@ColorInt int backgroundColor) {
|
|
||||||
while (!ColorUtil.useDarkTextColorOnBackground(backgroundColor)) {
|
|
||||||
backgroundColor = ColorUtil.shiftColorUp(backgroundColor);
|
|
||||||
}
|
|
||||||
return backgroundColor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int[] rgb2lab(int R, int G, int B) {
|
|
||||||
//http://www.brucelindbloom.com
|
|
||||||
|
|
||||||
float r, g, b, X, Y, Z, fx, fy, fz, xr, yr, zr;
|
|
||||||
float Ls, as, bs;
|
|
||||||
float eps = 216.f / 24389.f;
|
|
||||||
float k = 24389.f / 27.f;
|
|
||||||
|
|
||||||
float Xr = 0.964221f; // reference white D50
|
|
||||||
float Yr = 1.0f;
|
|
||||||
float Zr = 0.825211f;
|
|
||||||
|
|
||||||
// RGB to XYZ
|
|
||||||
r = R / 255.f; //R 0..1
|
|
||||||
g = G / 255.f; //G 0..1
|
|
||||||
b = B / 255.f; //B 0..1
|
|
||||||
|
|
||||||
// assuming sRGB (D65)
|
|
||||||
if (r <= 0.04045)
|
|
||||||
r = r / 12;
|
|
||||||
else
|
|
||||||
r = (float) Math.pow((r + 0.055) / 1.055, 2.4);
|
|
||||||
|
|
||||||
if (g <= 0.04045)
|
|
||||||
g = g / 12;
|
|
||||||
else
|
|
||||||
g = (float) Math.pow((g + 0.055) / 1.055, 2.4);
|
|
||||||
|
|
||||||
if (b <= 0.04045)
|
|
||||||
b = b / 12;
|
|
||||||
else
|
|
||||||
b = (float) Math.pow((b + 0.055) / 1.055, 2.4);
|
|
||||||
|
|
||||||
|
|
||||||
X = 0.436052025f * r + 0.385081593f * g + 0.143087414f * b;
|
|
||||||
Y = 0.222491598f * r + 0.71688606f * g + 0.060621486f * b;
|
|
||||||
Z = 0.013929122f * r + 0.097097002f * g + 0.71418547f * b;
|
|
||||||
|
|
||||||
// XYZ to Lab
|
|
||||||
xr = X / Xr;
|
|
||||||
yr = Y / Yr;
|
|
||||||
zr = Z / Zr;
|
|
||||||
|
|
||||||
if (xr > eps)
|
|
||||||
fx = (float) Math.pow(xr, 1 / 3.);
|
|
||||||
else
|
|
||||||
fx = (float) ((k * xr + 16.) / 116.);
|
|
||||||
|
|
||||||
if (yr > eps)
|
|
||||||
fy = (float) Math.pow(yr, 1 / 3.);
|
|
||||||
else
|
|
||||||
fy = (float) ((k * yr + 16.) / 116.);
|
|
||||||
|
|
||||||
if (zr > eps)
|
|
||||||
fz = (float) Math.pow(zr, 1 / 3.);
|
|
||||||
else
|
|
||||||
fz = (float) ((k * zr + 16.) / 116);
|
|
||||||
|
|
||||||
Ls = (116 * fy) - 16;
|
|
||||||
as = 500 * (fx - fy);
|
|
||||||
bs = 200 * (fy - fz);
|
|
||||||
|
|
||||||
int[] lab = new int[3];
|
|
||||||
lab[0] = (int) (2.55 * Ls + .5);
|
|
||||||
lab[1] = (int) (as + .5);
|
|
||||||
lab[2] = (int) (bs + .5);
|
|
||||||
return lab;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Computes the difference between two RGB colors by converting them to the L*a*b scale and
|
|
||||||
* comparing them using the CIE76 algorithm { http://en.wikipedia.org/wiki/Color_difference#CIE76}
|
|
||||||
*
|
|
||||||
* @return > 23 corresponds to a JND (just noticeable difference)
|
|
||||||
*/
|
|
||||||
public static double getColorDifference(int a, int b) {
|
|
||||||
int r1, g1, b1, r2, g2, b2;
|
|
||||||
r1 = Color.red(a);
|
|
||||||
g1 = Color.green(a);
|
|
||||||
b1 = Color.blue(a);
|
|
||||||
r2 = Color.red(b);
|
|
||||||
g2 = Color.green(b);
|
|
||||||
b2 = Color.blue(b);
|
|
||||||
int[] lab1 = rgb2lab(r1, g1, b1);
|
|
||||||
int[] lab2 = rgb2lab(r2, g2, b2);
|
|
||||||
return Math.sqrt(Math.pow(lab2[0] - lab1[0], 2) + Math.pow(lab2[1] - lab1[1], 2) + Math.pow(lab2[2] - lab1[2], 2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
package com.kabouzeid.gramophone.util;
|
||||||
|
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.support.annotation.ColorInt;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v7.graphics.Palette;
|
||||||
|
|
||||||
|
import com.kabouzeid.appthemehelper.util.ColorUtil;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Karim Abou Zeid (kabouzeid)
|
||||||
|
*/
|
||||||
|
public class PhonographColorUtil {
|
||||||
|
public static final int PALETTE_BITMAP_SIZE = 100;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static Palette generatePalette(Bitmap bitmap) {
|
||||||
|
if (bitmap == null) return null;
|
||||||
|
return Palette.from(bitmap)
|
||||||
|
.resizeBitmapSize(PALETTE_BITMAP_SIZE)
|
||||||
|
.generate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ColorInt
|
||||||
|
public static int getColor(@Nullable Palette palette, int fallback) {
|
||||||
|
if (palette != null) {
|
||||||
|
if (palette.getVibrantSwatch() != null) {
|
||||||
|
return palette.getVibrantSwatch().getRgb();
|
||||||
|
} else if (palette.getMutedSwatch() != null) {
|
||||||
|
return palette.getMutedSwatch().getRgb();
|
||||||
|
} else if (palette.getDarkVibrantSwatch() != null) {
|
||||||
|
return palette.getDarkVibrantSwatch().getRgb();
|
||||||
|
} else if (palette.getDarkMutedSwatch() != null) {
|
||||||
|
return palette.getDarkMutedSwatch().getRgb();
|
||||||
|
} else if (palette.getLightVibrantSwatch() != null) {
|
||||||
|
return palette.getLightVibrantSwatch().getRgb();
|
||||||
|
} else if (palette.getLightMutedSwatch() != null) {
|
||||||
|
return palette.getLightMutedSwatch().getRgb();
|
||||||
|
} else if (palette.getSwatches() != null && !palette.getSwatches().isEmpty()) {
|
||||||
|
return Collections.max(palette.getSwatches(), SwatchComparator.getInstance()).getRgb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class SwatchComparator implements Comparator<Palette.Swatch> {
|
||||||
|
private static SwatchComparator sInstance;
|
||||||
|
|
||||||
|
static SwatchComparator getInstance() {
|
||||||
|
if (sInstance == null) {
|
||||||
|
sInstance = new SwatchComparator();
|
||||||
|
}
|
||||||
|
return sInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compare(Palette.Swatch lhs, Palette.Swatch rhs) {
|
||||||
|
return lhs.getPopulation() - rhs.getPopulation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ColorInt
|
||||||
|
public static int shiftBackgroundColorForLightText(@ColorInt int backgroundColor) {
|
||||||
|
while (ColorUtil.isColorLight(backgroundColor)) {
|
||||||
|
backgroundColor = ColorUtil.darkenColor(backgroundColor);
|
||||||
|
}
|
||||||
|
return backgroundColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ColorInt
|
||||||
|
public static int shiftBackgroundColorForDarkText(@ColorInt int backgroundColor) {
|
||||||
|
while (!ColorUtil.isColorLight(backgroundColor)) {
|
||||||
|
backgroundColor = ColorUtil.lightenColor(backgroundColor);
|
||||||
|
}
|
||||||
|
return backgroundColor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -48,11 +48,6 @@ public class Util {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getSmallerScreenSize(@NonNull Context c) {
|
|
||||||
Point size = Util.getScreenSize(c);
|
|
||||||
return Math.min(size.x, size.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TargetApi(19)
|
@TargetApi(19)
|
||||||
public static void setStatusBarTranslucent(@NonNull Window window) {
|
public static void setStatusBarTranslucent(@NonNull Window window) {
|
||||||
window.setFlags(
|
window.setFlags(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue