From 44ba560d77e963bc650f5eced2a9baf4d730a43a Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Wed, 27 Jan 2016 22:11:38 +0100 Subject: [PATCH] Clean ups --- app/build.gradle | 2 + .../gramophone/adapter/PlaylistAdapter.java | 7 +- .../gramophone/adapter/SearchAdapter.java | 4 +- .../adapter/album/AlbumAdapter.java | 20 +- .../adapter/artist/ArtistAdapter.java | 18 +- .../gramophone/adapter/song/SongAdapter.java | 18 +- .../gramophone/dialogs/ChangelogDialog.java | 4 +- .../gramophone/dialogs/DonationDialog.java | 11 +- .../glide/PhonographColoredTarget.java | 7 +- .../palette/BitmapPaletteTranscoder.java | 4 +- .../palette/CustomTextColorGenerator.java | 33 +++ .../helper/PlayingNotificationHelper.java | 7 +- .../misc/FloatingActionButtonProperties.java | 26 -- .../ui/activities/AboutActivity.java | 4 +- .../ui/activities/AlbumDetailActivity.java | 16 +- .../ui/activities/ArtistDetailActivity.java | 26 +- .../ui/activities/IntroActivity.java | 19 +- .../ui/activities/MainActivity.java | 4 +- .../ui/activities/PlaylistDetailActivity.java | 4 +- .../tageditor/AbsTagEditorActivity.java | 12 +- .../tageditor/AlbumTagEditorActivity.java | 13 +- .../AbsMainActivityRecyclerViewFragment.java | 8 +- .../fragments/player/MiniPlayerFragment.java | 12 +- .../player/PlaybackControlsFragment.java | 24 +- .../ui/fragments/player/PlayerFragment.java | 11 +- .../kabouzeid/gramophone/util/ColorUtil.java | 266 ------------------ .../gramophone/util/PhonographColorUtil.java | 80 ++++++ .../com/kabouzeid/gramophone/util/Util.java | 5 - 28 files changed, 243 insertions(+), 422 deletions(-) create mode 100644 app/src/main/java/com/kabouzeid/gramophone/glide/palette/CustomTextColorGenerator.java delete mode 100644 app/src/main/java/com/kabouzeid/gramophone/misc/FloatingActionButtonProperties.java delete mode 100644 app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java create mode 100644 app/src/main/java/com/kabouzeid/gramophone/util/PhonographColorUtil.java diff --git a/app/build.gradle b/app/build.gradle index 206540c9..b87f1f78 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -139,4 +139,6 @@ dependencies { compile 'com.github.bumptech.glide:glide:3.6.1' compile 'com.github.kabouzeid:RecyclerView-FastScroll:v1.2-kmod' compile 'com.github.kabouzeid:app-theme-helper:0.7.8kmod' + + compile 'com.github.kabouzeid:GlidePalette:e34717bced@aar' } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java index b465daf4..14005734 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/PlaylistAdapter.java @@ -11,6 +11,8 @@ import android.view.View; import android.view.ViewGroup; import android.widget.PopupMenu; +import com.kabouzeid.appthemehelper.ThemeStore; +import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter; 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.Song; import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; -import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.Util; @@ -98,7 +99,7 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter= Build.VERSION_CODES.LOLLIPOP) { itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation)); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java index 62a01b1c..a9e5a17a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java @@ -13,6 +13,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.Priority; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.target.Target; +import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; 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.Song; import com.kabouzeid.gramophone.util.ArtistSignatureUtil; -import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; @@ -139,7 +139,7 @@ public class SearchAdapter extends RecyclerView.Adapter= Build.VERSION_CODES.LOLLIPOP) { itemView.setElevation(activity.getResources().getDimensionPixelSize(R.dimen.card_elevation)); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java index ff60d0e9..1498d54e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/album/AlbumAdapter.java @@ -23,7 +23,6 @@ import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.model.Album; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.NavigationUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; @@ -105,15 +104,16 @@ public class AlbumAdapter extends AbsMultiSelectAdapterUnable to load

" + e.getLocalizedMessage() + "

", "text/html", "UTF-8"); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java index 37e0ea63..9e815b8e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DonationDialog.java @@ -25,9 +25,10 @@ import com.afollestad.materialdialogs.internal.ThemeSingleton; import com.anjlab.android.iab.v3.BillingProcessor; import com.anjlab.android.iab.v3.SkuDetails; 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.R; -import com.kabouzeid.gramophone.util.ColorUtil; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -168,12 +169,14 @@ public class DonationDialog extends DialogFragment implements BillingProcessor.I viewHolder.price.setText(skuDetails.priceText); 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); - int contentTextColor = purchased ? titleTextColor : ColorUtil.resolveColor(getContext(), android.R.attr.textColorSecondary); - + //noinspection ResourceAsColor viewHolder.title.setTextColor(titleTextColor); + //noinspection ResourceAsColor viewHolder.text.setTextColor(contentTextColor); + //noinspection ResourceAsColor viewHolder.price.setTextColor(titleTextColor); strikeThrough(viewHolder.title, purchased); diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java b/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java index 09d8040d..13b4e375 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/PhonographColoredTarget.java @@ -4,10 +4,11 @@ import android.graphics.drawable.Drawable; import android.widget.ImageView; import com.bumptech.glide.request.animation.GlideAnimation; +import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTarget; 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 PhonographColoredTarget(ImageView view) { @@ -23,11 +24,11 @@ public abstract class PhonographColoredTarget extends BitmapPaletteTarget { @Override public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation glideAnimation) { super.onResourceReady(resource, glideAnimation); - onColorReady(ColorUtil.getColor(resource.getPalette(), getDefaultBarColor())); + onColorReady(PhonographColorUtil.getColor(resource.getPalette(), 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); diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java b/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java index b3585850..eee8f931 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/palette/BitmapPaletteTranscoder.java @@ -7,7 +7,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; 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 { private final BitmapPool bitmapPool; @@ -23,7 +23,7 @@ public class BitmapPaletteTranscoder implements ResourceTranscoder transcode(Resource bitmapResource) { 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); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/palette/CustomTextColorGenerator.java b/app/src/main/java/com/kabouzeid/gramophone/glide/palette/CustomTextColorGenerator.java new file mode 100644 index 00000000..a6268a7e --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/palette/CustomTextColorGenerator.java @@ -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); + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java index b7688bf7..525cf7be 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java +++ b/app/src/main/java/com/kabouzeid/gramophone/helper/PlayingNotificationHelper.java @@ -24,13 +24,14 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; import com.bumptech.glide.request.target.Target; +import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.glide.SongGlideRequest; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteWrapper; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.service.MusicService; 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; public class PlayingNotificationHelper { @@ -69,7 +70,7 @@ public class PlayingNotificationHelper { @Override public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation 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; } 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) { notificationManager.notify(notificationId, notification); diff --git a/app/src/main/java/com/kabouzeid/gramophone/misc/FloatingActionButtonProperties.java b/app/src/main/java/com/kabouzeid/gramophone/misc/FloatingActionButtonProperties.java deleted file mode 100644 index 1c692e6c..00000000 --- a/app/src/main/java/com/kabouzeid/gramophone/misc/FloatingActionButtonProperties.java +++ /dev/null @@ -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 COLOR = new Property(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; - } - }; -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java index 472b5a41..98bb454c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AboutActivity.java @@ -16,11 +16,11 @@ import android.widget.TextView; import com.afollestad.materialdialogs.internal.ThemeSingleton; import com.kabouzeid.appthemehelper.ThemeStore; +import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.dialogs.ChangelogDialog; import com.kabouzeid.gramophone.dialogs.DonationDialog; import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity; -import com.kabouzeid.gramophone.util.ColorUtil; import butterknife.Bind; import butterknife.ButterKnife; @@ -176,7 +176,7 @@ public class AboutActivity extends AbsBaseActivity implements View.OnClickListen } 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); iconChangelog.setColorFilter(iconColor); iconIntro.setColorFilter(iconColor); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index a8de2478..ff7b98eb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -19,6 +19,8 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; 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.adapter.song.AlbumSongAdapter; 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.tageditor.AbsTagEditorActivity; 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.PhonographColorUtil; import com.kabouzeid.gramophone.util.Util; import butterknife.Bind; @@ -106,8 +108,8 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements // Change alpha of overlay toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); - toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor)); - setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor)); + toolbar.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha)); + setStatusbarColor(ColorUtil.withAlpha(toolbarColor, cab != null && cab.isActive() ? 1 : toolbarAlpha)); // Translate name text int maxTitleTranslationY = albumArtViewHeight; @@ -174,7 +176,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements private void setColors(int color) { toolbarColor = color; albumTitleView.setBackgroundColor(color); - albumTitleView.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, color)); + albumTitleView.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color))); setNavigationbarColor(color); setTaskDescriptionColor(color); @@ -295,11 +297,11 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements cab = new MaterialCab(this, R.id.cab_stub) .setMenu(menuRes) .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getPaletteColor())) + .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(getPaletteColor())) .start(new MaterialCab.Callback() { @Override public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor)); + setStatusbarColor(ColorUtil.stripAlpha(toolbarColor)); return callback.onCabCreated(materialCab, menu); } @@ -310,7 +312,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements @Override public boolean onCabFinished(MaterialCab materialCab) { - setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor)); + setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha)); return callback.onCabFinished(materialCab); } }); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 9bd3b785..229edacb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -26,6 +26,8 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; 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.adapter.album.HorizontalAlbumAdapter; 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.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.util.ArtistSignatureUtil; -import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.NavigationUtil; +import com.kabouzeid.gramophone.util.PhonographColorUtil; import com.kabouzeid.gramophone.util.Util; import java.util.ArrayList; @@ -131,8 +133,8 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement // Change alpha of overlay toolbarAlpha = Math.max(0, Math.min(1, (float) scrollY / flexibleRange)); - toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor)); - setStatusbarColor(ColorUtil.getColorWithAlpha(cab != null && cab.isActive() ? 1 : toolbarAlpha, toolbarColor)); + toolbar.setBackgroundColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha)); + setStatusbarColor(ColorUtil.withAlpha(toolbarColor, cab != null && cab.isActive() ? 1 : toolbarAlpha)); // Translate name text int maxTitleTranslationY = artistImageViewHeight; @@ -297,12 +299,12 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement return toolbarColor; } - private void setColors(int vibrantColor) { - toolbarColor = vibrantColor; - artistName.setBackgroundColor(vibrantColor); - artistName.setTextColor(ColorUtil.getPrimaryTextColorForBackground(this, vibrantColor)); - setNavigationbarColor(vibrantColor); - setTaskDescriptionColor(vibrantColor); + private void setColors(int color) { + toolbarColor = color; + artistName.setBackgroundColor(color); + artistName.setTextColor(MaterialValueHelper.getPrimaryTextColor(this, ColorUtil.isColorLight(color))); + setNavigationbarColor(color); + setTaskDescriptionColor(color); } private void getArtistFromIntentExtras() { @@ -380,11 +382,11 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement cab = new MaterialCab(this, R.id.cab_stub) .setMenu(menuRes) .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(getPaletteColor())) + .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(getPaletteColor())) .start(new MaterialCab.Callback() { @Override public boolean onCabCreated(MaterialCab materialCab, Menu menu) { - setStatusbarColor(ColorUtil.getOpaqueColor(toolbarColor)); + setStatusbarColor(ColorUtil.stripAlpha(toolbarColor)); return callback.onCabCreated(materialCab, menu); } @@ -395,7 +397,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement @Override public boolean onCabFinished(MaterialCab materialCab) { - setStatusbarColor(ColorUtil.getColorWithAlpha(toolbarAlpha, toolbarColor)); + setStatusbarColor(ColorUtil.withAlpha(toolbarColor, toolbarAlpha)); return callback.onCabFinished(materialCab); } }); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java index c7869d9b..de368542 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/IntroActivity.java @@ -1,19 +1,18 @@ package com.kabouzeid.gramophone.ui.activities; import android.Manifest; -import android.app.ActivityManager; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.ColorInt; import android.support.v4.content.ContextCompat; import android.widget.Toast; import com.github.paolorotolo.appintro.AppIntro; 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.util.ColorUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; /** @@ -23,8 +22,9 @@ public class IntroActivity extends AppIntro { @Override public void init(Bundle savedInstanceState) { 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); @@ -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)); } - 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() { 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; diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index d04b404c..0621e555 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -57,8 +57,8 @@ import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.fragments.mainactivityfragments.AbsMainActivityFragment; 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.PhonographColorUtil; import com.kabouzeid.gramophone.util.PreferenceUtil; import com.kabouzeid.gramophone.util.Util; import com.sothree.slidinguppanel.SlidingUpPanelLayout; @@ -538,7 +538,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity cab = new MaterialCab(this, R.id.cab_stub) .setMenu(menu) .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this))) + .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this))) .start(callback); return cab; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index e595f36f..7c6c93c1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -29,8 +29,8 @@ import com.kabouzeid.gramophone.model.PlaylistSong; import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist; 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.PhonographColorUtil; import com.kabouzeid.gramophone.util.PlaylistsUtil; import java.util.ArrayList; @@ -188,7 +188,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme cab = new MaterialCab(this, R.id.cab_stub) .setMenu(menu) .setCloseDrawableRes(R.drawable.ic_close_white_24dp) - .setBackgroundColor(ColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this))) + .setBackgroundColor(PhonographColorUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this))) .start(callback); return cab; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java index ac96ae91..cf536dd2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AbsTagEditorActivity.java @@ -3,10 +3,8 @@ package com.kabouzeid.gramophone.ui.activities.tageditor; import android.app.SearchManager; import android.content.Intent; import android.content.pm.ActivityInfo; -import android.content.res.ColorStateList; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.graphics.PorterDuff; import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; @@ -25,10 +23,11 @@ import android.widget.LinearLayout; import com.afollestad.materialdialogs.MaterialDialog; import com.github.ksoichiro.android.observablescrollview.ObservableScrollView; 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.misc.SimpleObservableScrollViewCallbacks; 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.Util; @@ -85,7 +84,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { header.setTranslationY(scrollY); alpha = 1; } - toolbar.setBackgroundColor(ColorUtil.getColorWithAlpha(alpha, paletteColorPrimary)); + toolbar.setBackgroundColor(ColorUtil.withAlpha(paletteColorPrimary, alpha)); image.setTranslationY(scrollY / 2); } }; @@ -188,10 +187,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity { } }); - int accentColor = ThemeStore.accentColor(this); - int fabDrawableColor = ColorUtil.getPrimaryTextColorForBackground(this, accentColor); - fab.setBackgroundTintList(ColorStateList.valueOf(accentColor)); - fab.getDrawable().setColorFilter(fabDrawableColor, PorterDuff.Mode.SRC_IN); + TintHelper.setTintAuto(fab, ThemeStore.accentColor(this), true); } protected abstract void save(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java index 83a04e0c..f402e1fb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/tageditor/AlbumTagEditorActivity.java @@ -18,6 +18,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; +import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.glide.palette.BitmapPaletteTranscoder; 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.loader.AlbumLoader; import com.kabouzeid.gramophone.model.Song; -import com.kabouzeid.gramophone.util.ColorUtil; import com.kabouzeid.gramophone.util.LastFMUtil; import com.kabouzeid.gramophone.util.MusicUtil; +import com.kabouzeid.gramophone.util.PhonographColorUtil; import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.images.Artwork; @@ -92,7 +93,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text @Override protected void loadCurrentImage() { 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; } @@ -128,7 +129,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text @Override public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation glideAnimation) { 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; dataChanged(); setResult(RESULT_OK); @@ -159,7 +160,7 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text @Override 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; dataChanged(); } @@ -223,9 +224,9 @@ public class AlbumTagEditorActivity extends AbsTagEditorActivity implements Text @Override public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation glideAnimation) { - ColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT); + PhonographColorUtil.getColor(resource.getPalette(), Color.TRANSPARENT); 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; dataChanged(); setResult(RESULT_OK); diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java index f967fd1e..2e80b6ec 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java @@ -14,9 +14,11 @@ import android.view.ViewGroup; import android.widget.TextView; 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.interfaces.MusicServiceEventListener; -import com.kabouzeid.gramophone.util.ColorUtil; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import butterknife.Bind; @@ -63,9 +65,9 @@ public abstract class AbsMainActivityRecyclerViewFragment { - 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)); - } -} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PhonographColorUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PhonographColorUtil.java new file mode 100644 index 00000000..ad54c20e --- /dev/null +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PhonographColorUtil.java @@ -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 { + 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; + } +} diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java index b08c61b0..91f94957 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java @@ -48,11 +48,6 @@ public class Util { return size; } - public static int getSmallerScreenSize(@NonNull Context c) { - Point size = Util.getScreenSize(c); - return Math.min(size.x, size.y); - } - @TargetApi(19) public static void setStatusBarTranslucent(@NonNull Window window) { window.setFlags(