diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java index 7df784ba..99d26cf4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java @@ -722,7 +722,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi private void updateShuffleState() { switch (MusicPlayerRemote.getShuffleMode()) { case MusicService.SHUFFLE_MODE_SHUFFLE: - int activatedColor = colorPlaybackControls ? lastPlaybackControlsColor : ThemeSingleton.get().positiveColor.getDefaultColor(); + int activatedColor = colorPlaybackControls + ? getFixedShuffleRepeatButtonColor(lastPlaybackControlsColor) + : ThemeSingleton.get().positiveColor.getDefaultColor(); shuffleButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_shuffle_white_36dp, activatedColor)); break; @@ -745,7 +747,9 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi } private void updateRepeatState() { - int activatedColor = colorPlaybackControls ? lastPlaybackControlsColor : ThemeSingleton.get().positiveColor.getDefaultColor(); + int activatedColor = colorPlaybackControls + ? getFixedShuffleRepeatButtonColor(lastPlaybackControlsColor) + : ThemeSingleton.get().positiveColor.getDefaultColor(); switch (MusicPlayerRemote.getRepeatMode()) { case MusicService.REPEAT_MODE_ALL: repeatButton.setImageDrawable(Util.getTintedDrawable(this, R.drawable.ic_repeat_white_36dp, @@ -763,6 +767,18 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi } } + /** + * Checks whether the default color and the activated color are similar. If true, returns a darker + * activated color. Else, returns the given color as-is. + */ + private int getFixedShuffleRepeatButtonColor(int activatedColor) { + if (ColorUtil.calculateColorDistance(activatedColor, + ColorUtil.resolveColor(this, android.R.attr.textColorSecondary))) { + return ColorUtil.shiftColor(activatedColor, 0.6f); + } + return activatedColor; + } + private void setUpAlbumArtViews() { albumArtBackground.setAlpha(0.7f); albumArt.forceSquare(forceSquareAlbumArt); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java index 08c4b9a5..0945c2fe 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/ColorUtil.java @@ -137,4 +137,17 @@ public class ColorUtil { } return backgroundColor; } + + /** + * Calculates the distance of two colors in 3D Space. + * + * Taken from http://stackoverflow.com/a/1725535/984061 + */ + public static boolean calculateColorDistance(int color1, int color2) { + double red = Math.pow(Math.abs(Color.red(color2) - Color.red(color1)), 2); + double green = Math.pow(Math.abs(Color.green(color2) - Color.green(color1)), 2); + double blue = Math.pow(Math.abs(Color.blue(color2) - Color.blue(color1)), 2); + double distance = red + green + blue; + return distance < 55000; + } }