From 1f32f46bf005f4a3138dbbc156a959ad1602f880 Mon Sep 17 00:00:00 2001 From: Cromefire_ Date: Wed, 19 Aug 2020 14:46:21 +0200 Subject: [PATCH] improved navbar coloring and fixed some warnings --- .../base/AbsSlidingMusicPanelActivity.java | 43 +++++++++++++++++-- .../ui/activities/base/AbsThemeActivity.java | 12 +++--- .../player/card/CardPlayerFragment.java | 7 ++- .../res/layout-land/fragment_card_player.xml | 10 ++--- app/src/main/res/values-v21/styles.xml | 5 ++- 5 files changed, 59 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java index ec9cd36e..3cd1aef1 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java @@ -3,10 +3,12 @@ package com.dkanada.gramophone.ui.activities.base; import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.content.Intent; +import android.graphics.Color; import android.os.Build; import android.os.Bundle; import androidx.annotation.ColorInt; import androidx.annotation.FloatRange; +import androidx.core.graphics.ColorUtils; import androidx.fragment.app.Fragment; import android.view.View; import android.view.ViewGroup; @@ -25,6 +27,7 @@ import com.dkanada.gramophone.ui.fragments.player.card.CardPlayerFragment; import com.dkanada.gramophone.ui.fragments.player.flat.FlatPlayerFragment; import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.ViewUtil; +import com.kabouzeid.appthemehelper.ThemeStore; import com.sothree.slidinguppanel.SlidingUpPanelLayout; public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivity implements SlidingUpPanelLayout.PanelSlideListener, CardPlayerFragment.Callbacks { @@ -141,7 +144,15 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) { setMiniPlayerAlphaProgress(slideOffset); if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel(); - super.setNavigationbarColor((int) argbEvaluator.evaluate(slideOffset, navigationbarColor, playerFragment.getPaletteColor())); + int color = shiftNavbarColor(playerFragment.getPaletteColor()); + + if (ThemeStore.coloredNavigationBar(this)) { + int navbarColor = ColorUtils.blendARGB(navigationbarColor, color, slideOffset); + super.setNavigationbarColor(navbarColor); + } else { + int navbarColor = ColorUtils.blendARGB(Color.TRANSPARENT, color, slideOffset); + super.setNavigationbarColor(navbarColor); + } } @Override @@ -176,7 +187,8 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi int playerFragmentColor = playerFragment.getPaletteColor(); super.setLightStatusbar(false); super.setTaskDescriptionColor(playerFragmentColor); - super.setNavigationbarColor(playerFragmentColor); + int color = shiftNavbarColor(playerFragmentColor); + super.setNavigationbarColor(color); playerFragment.setMenuVisibility(true); playerFragment.setUserVisibleHint(true); @@ -243,7 +255,8 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi if (getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) { int playerFragmentColor = playerFragment.getPaletteColor(); super.setTaskDescriptionColor(playerFragmentColor); - animateNavigationBarColor(playerFragmentColor); + int color = shiftNavbarColor(playerFragmentColor); + animateNavigationBarColor(color); } } @@ -295,4 +308,28 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi protected View getSnackBarContainer() { return findViewById(R.id.content_container); } + + /** + * To improve contrast with the navbar controls + */ + private int shiftNavbarColor(int color) { + double luminance = ColorUtils.calculateLuminance(color); + + if (luminance > 0.7 || luminance < 0.3) { + // The color is really dark or really light, the navbar is just fine + return color; + } else if (luminance > 0.5) { + // The color is a bit lighter than the center, let's make it a bit lighter, so it's easier to see + float[] hsv = new float[3]; + Color.colorToHSV(color, hsv); + hsv[2] *= 1.3f; + return Color.HSVToColor(hsv); + } else { + // The color is a bit darker than the center, let's make it a bit darker, so it's easier to see + float[] hsv = new float[3]; + Color.colorToHSV(color, hsv); + hsv[2] *= 0.7f; + return Color.HSVToColor(hsv); + } + } } diff --git a/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsThemeActivity.java b/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsThemeActivity.java index a3fb0917..e0850144 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsThemeActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/activities/base/AbsThemeActivity.java @@ -69,15 +69,15 @@ public abstract class AbsThemeActivity extends ATHToolbarActivity { } public void setNavigationbarColor(int color) { - if (ThemeStore.coloredNavigationBar(this)) { - ATH.setNavigationbarColor(this, color); - } else { - ATH.setNavigationbarColor(this, Color.BLACK); - } + ATH.setNavigationbarColor(this, color); } public void setNavigationbarColorAuto() { - setNavigationbarColor(ThemeStore.navigationBarColor(this)); + if (ThemeStore.coloredNavigationBar(this)) { + setNavigationbarColor(ThemeStore.navigationBarColor(this)); + } else { + setNavigationbarColor(Color.TRANSPARENT); + } } public void setLightStatusbar(boolean enabled) { diff --git a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java index 5e643e93..b1c83b11 100644 --- a/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/ui/fragments/player/card/CardPlayerFragment.java @@ -26,6 +26,7 @@ import com.h6ah4i.android.widget.advrecyclerview.animator.GeneralItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.animator.RefactoredDefaultItemAnimator; import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager; import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils; +import com.kabouzeid.appthemehelper.ATH; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.ColorUtil; @@ -176,7 +177,6 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum } } - @SuppressWarnings("ConstantConditions") private void updateCurrentSong() { impl.updateCurrentSong(MusicPlayerRemote.getCurrentSong()); } @@ -243,7 +243,7 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum @Override protected void toggleFavorite(Song song) { super.toggleFavorite(song); - if (song.id == MusicPlayerRemote.getCurrentSong().id) { + if (song.id.equals(MusicPlayerRemote.getCurrentSong().id)) { if (song.favorite) { playerAlbumCoverFragment.showHeartAnimation(); } @@ -261,6 +261,9 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum public void onHide() { playbackControlsFragment.hide(); onBackPressed(); + if (!ThemeStore.coloredNavigationBar(requireContext())) { + ATH.setNavigationbarColor(requireActivity(), Color.TRANSPARENT); + } } @Override diff --git a/app/src/main/res/layout-land/fragment_card_player.xml b/app/src/main/res/layout-land/fragment_card_player.xml index d65e80b1..6bf87bb4 100644 --- a/app/src/main/res/layout-land/fragment_card_player.xml +++ b/app/src/main/res/layout-land/fragment_card_player.xml @@ -69,19 +69,19 @@ + android:layout_height="wrap_content" + android:layout_marginTop="24dp"> @@ -95,8 +95,8 @@ android:id="@+id/draggable_area" android:layout_width="72dp" android:layout_height="wrap_content" - android:layout_alignBottom="@+id/card_content" android:layout_alignTop="@+id/card_content" + android:layout_alignBottom="@+id/card_content" android:layout_marginTop="48dp" /> - - \ No newline at end of file