diff --git a/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java index 14c282bc..0bb4edbc 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/MainActivity.java @@ -17,9 +17,8 @@ import androidx.drawerlayout.widget.DrawerLayout; import com.dkanada.gramophone.activities.base.AbsMusicContentActivity; import com.dkanada.gramophone.util.NavigationUtil; import com.dkanada.gramophone.util.PreferenceUtil; +import com.dkanada.gramophone.util.ThemeUtil; import com.kabouzeid.appthemehelper.ThemeStore; -import com.kabouzeid.appthemehelper.util.ATHUtil; -import com.kabouzeid.appthemehelper.util.NavigationViewUtil; import com.dkanada.gramophone.databinding.ActivityMainContentBinding; import com.dkanada.gramophone.databinding.ActivityMainDrawerLayoutBinding; import com.dkanada.gramophone.databinding.NavigationDrawerHeaderBinding; @@ -133,9 +132,11 @@ public class MainActivity extends AbsMusicContentActivity { } private void setUpNavigationView() { - int accentColor = PreferenceUtil.getInstance(this).getAccentColor(); - NavigationViewUtil.setItemIconColors(binding.navigationView, ATHUtil.resolveColor(this, R.attr.iconColor, ThemeStore.textColorSecondary(this)), accentColor); - NavigationViewUtil.setItemTextColors(binding.navigationView, ThemeStore.textColorPrimary(this), accentColor); + int normalColor = ThemeStore.textColorPrimary(this); + int activeColor = PreferenceUtil.getInstance(this).getAccentColor(); + + binding.navigationView.setItemIconTintList(ThemeUtil.getColorStateList(normalColor, activeColor)); + binding.navigationView.setItemTextColor(ThemeUtil.getColorStateList(normalColor, activeColor)); binding.navigationView.setNavigationItemSelectedListener(menuItem -> { binding.drawerLayout.closeDrawers(); @@ -157,6 +158,7 @@ public class MainActivity extends AbsMusicContentActivity { // only run the following code when a new library has been selected if (menuItem.getItemId() == QueryUtil.currentLibrary.getId().hashCode()) return true; + for (BaseItemDto itemDto : libraries) { if (menuItem.getItemId() == itemDto.getId().hashCode()) { QueryUtil.currentLibrary = itemDto; @@ -168,12 +170,13 @@ public class MainActivity extends AbsMusicContentActivity { // setCheckable must be applied to the items on creation // it also applies a tacky background color for the checked item // this is a hack to check the current item without that - if (menuItem.getItemId() == R.id.nav_settings - || menuItem.getItemId() == R.id.nav_about - || menuItem.getItemId() == R.id.nav_logout) return true; + if (menuItem.getGroupId() != R.id.navigation_drawer_menu_category_sections) return true; for (int i = 0; i < binding.navigationView.getMenu().size(); i++) { - binding.navigationView.getMenu().getItem(i).setChecked(binding.navigationView.getMenu().getItem(i) == menuItem); + MenuItem item = binding.navigationView.getMenu().getItem(i); + + // ignore items that open new activities since the navigation view is hidden + item.setChecked(item == menuItem); } return true; diff --git a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java index 96ebafc8..df683d4c 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsMusicPanelActivity.java @@ -8,7 +8,6 @@ import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.animation.PathInterpolator; -import androidx.annotation.ColorInt; import androidx.annotation.FloatRange; import androidx.annotation.RequiresApi; import androidx.core.graphics.ColorUtils; @@ -29,9 +28,9 @@ import com.sothree.slidinguppanel.SlidingUpPanelLayout; public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity implements SlidingUpPanelLayout.PanelSlideListener, CardPlayerFragment.Callbacks { private SlidingMusicPanelLayoutBinding binding; - private int navigationbarColor; - private int taskColor; - private boolean lightStatusbar; + private int navigationBarColor; + private int taskDescriptionColor; + private boolean lightStatusBar; private NowPlayingScreen currentNowPlayingScreen; private AbsPlayerFragment playerFragment; @@ -87,6 +86,11 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl }); binding.slidingLayout.addPanelSlideListener(this); + + // TODO remove this once createContentView works with inheritance + // any AbsMusicPanelActivity child without setColor has status bar issues + // setDrawUnderStatusBar only works after content view has been set + setColor(PreferenceUtil.getInstance(this).getPrimaryColor()); } @Override @@ -130,7 +134,7 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl public void onPanelSlide(View panel, @FloatRange(from = 0, to = 1) float slideOffset) { setMiniPlayerAlphaProgress(slideOffset); if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel(); - super.setNavigationBarColor(ColorUtils.blendARGB(navigationbarColor, playerFragment.getPaletteColor(), slideOffset)); + super.setNavigationBarColor(ColorUtils.blendARGB(navigationBarColor, playerFragment.getPaletteColor(), slideOffset)); } @Override @@ -150,9 +154,9 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl } public void onPanelCollapsed(View panel) { - super.setLightStatusBar(lightStatusbar); - super.setTaskDescriptionColor(taskColor); - super.setNavigationBarColor(navigationbarColor); + super.setLightStatusBar(lightStatusBar); + super.setTaskDescriptionColor(taskDescriptionColor); + super.setNavigationBarColor(navigationBarColor); playerFragment.setMenuVisibility(false); playerFragment.setUserVisibleHint(false); @@ -240,7 +244,7 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl @Override public void setLightStatusBar(boolean enabled) { - lightStatusbar = enabled; + lightStatusBar = enabled; if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { super.setLightStatusBar(enabled); @@ -249,7 +253,7 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl @Override public void setNavigationBarColor(int color) { - navigationbarColor = color; + navigationBarColor = color; if (navigationBarColorAnimator != null) { navigationBarColorAnimator.cancel(); @@ -285,8 +289,8 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl } @Override - public void setTaskDescriptionColor(@ColorInt int color) { - taskColor = color; + public void setTaskDescriptionColor(int color) { + taskDescriptionColor = color; if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) { super.setTaskDescriptionColor(color); diff --git a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java index e954150a..30062ec4 100644 --- a/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java +++ b/app/src/main/java/com/dkanada/gramophone/activities/base/AbsThemeActivity.java @@ -1,14 +1,14 @@ package com.dkanada.gramophone.activities.base; +import android.annotation.SuppressLint; +import android.app.ActivityManager; import android.os.Build; import android.os.Bundle; import android.view.View; import androidx.appcompat.app.AppCompatActivity; -import com.kabouzeid.appthemehelper.ATH; import com.kabouzeid.appthemehelper.util.ColorUtil; -import com.kabouzeid.appthemehelper.util.MaterialDialogsUtil; import com.dkanada.gramophone.R; import com.dkanada.gramophone.util.PreferenceUtil; import com.dkanada.gramophone.util.Util; @@ -22,7 +22,6 @@ public abstract class AbsThemeActivity extends AppCompatActivity { setTheme(PreferenceUtil.getInstance(this).getTheme().style); setColor(PreferenceUtil.getInstance(this).getPrimaryColor()); - MaterialDialogsUtil.updateMaterialDialogsThemeSingleton(this); } @Override @@ -53,7 +52,7 @@ public abstract class AbsThemeActivity extends AppCompatActivity { setNavigationBarColor(color); } - protected void setDrawUnderStatusBar() { + private void setDrawUnderStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Util.setAllowDrawUnderStatusBar(getWindow()); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { @@ -77,18 +76,38 @@ public abstract class AbsThemeActivity extends AppCompatActivity { } public void setTaskDescriptionColor(int color) { - ATH.setTaskDescriptionColor(this, color); + int solid = ColorUtil.stripAlpha(color); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setTaskDescription(new ActivityManager.TaskDescription(getTitle().toString(), null, solid)); + } } public void setNavigationBarColor(int color) { - ATH.setNavigationbarColor(this, color); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + getWindow().setNavigationBarColor(color); + } } + @SuppressLint("InlinedApi") public void setLightStatusBar(boolean enabled) { - ATH.setLightStatusbar(this, enabled); + View view = getWindow().getDecorView(); + + int flags = enabled + ? view.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + : view.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + + view.setSystemUiVisibility(flags); } + @SuppressLint("InlinedApi") public void setLightNavigationBar(boolean enabled) { - ATH.setLightNavigationbar(this, enabled); + View view = getWindow().getDecorView(); + + int flags = enabled + ? view.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR + : view.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; + + view.setSystemUiVisibility(flags); } } diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java index a937124d..2eef201e 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/main/LibraryFragment.java @@ -1,6 +1,5 @@ package com.dkanada.gramophone.fragments.main; -import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -22,11 +21,8 @@ import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.util.ShortcutUtil; import com.google.android.material.appbar.AppBarLayout; import com.afollestad.materialcab.MaterialCab; -import com.kabouzeid.appthemehelper.common.ATHToolbarActivity; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; -import com.kabouzeid.appthemehelper.util.TabLayoutUtil; -import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper; import com.dkanada.gramophone.R; import com.dkanada.gramophone.adapter.MusicLibraryPagerAdapter; import com.dkanada.gramophone.dialogs.CreatePlaylistDialog; @@ -110,7 +106,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde int primaryColor = PreferenceUtil.getInstance(requireActivity()).getPrimaryColor(); int normalColor = MaterialValueHelper.getSecondaryTextColor(requireActivity(), ColorUtil.isColorLight(primaryColor)); int selectedColor = MaterialValueHelper.getPrimaryTextColor(requireActivity(), ColorUtil.isColorLight(primaryColor)); - TabLayoutUtil.setTabIconColors(binding.tabs, normalColor, selectedColor); binding.tabs.setTabTextColors(normalColor, selectedColor); binding.tabs.setSelectedTabIndicatorColor(PreferenceUtil.getInstance(requireActivity()).getAccentColor()); @@ -187,18 +182,6 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde menu.removeItem(R.id.action_sort_method); menu.removeItem(R.id.action_sort_order); } - - Activity activity = getActivity(); - if (activity == null) return; - ToolbarContentTintHelper.handleOnCreateOptionsMenu(getActivity(), binding.toolbar, menu, ATHToolbarActivity.getToolbarBackgroundColor(binding.toolbar)); - } - - @Override - public void onPrepareOptionsMenu(@NonNull Menu menu) { - super.onPrepareOptionsMenu(menu); - Activity activity = getActivity(); - if (activity == null) return; - ToolbarContentTintHelper.handleOnPrepareOptionsMenu(activity, binding.toolbar); } @Override diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/player/card/CardPlayerFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/player/card/CardPlayerFragment.java index a26b7e65..421c0ded 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/player/card/CardPlayerFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/player/card/CardPlayerFragment.java @@ -2,7 +2,6 @@ package com.dkanada.gramophone.fragments.player.card; import android.animation.Animator; import android.animation.AnimatorSet; -import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Build; @@ -18,6 +17,7 @@ import android.widget.ImageView; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -29,7 +29,6 @@ import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.ColorUtil; -import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper; import com.dkanada.gramophone.R; import com.dkanada.gramophone.adapter.base.MediaEntryViewHolder; import com.dkanada.gramophone.adapter.song.PlayingQueueAdapter; @@ -225,7 +224,7 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum private void updateIsFavorite() { boolean favorite = MusicPlayerRemote.getCurrentSong().favorite; int res = favorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_border_white_24dp; - int color = ToolbarContentTintHelper.toolbarContentColor(getActivity(), Color.TRANSPARENT); + int color = ContextCompat.getColor(requireContext(), android.R.color.white); Drawable drawable = ImageUtil.getTintedVectorDrawable(getActivity(), res, color); binding.playerToolbar.getMenu().findItem(R.id.action_toggle_favorite) diff --git a/app/src/main/java/com/dkanada/gramophone/fragments/player/flat/FlatPlayerFragment.java b/app/src/main/java/com/dkanada/gramophone/fragments/player/flat/FlatPlayerFragment.java index 395b8421..8ef136b6 100644 --- a/app/src/main/java/com/dkanada/gramophone/fragments/player/flat/FlatPlayerFragment.java +++ b/app/src/main/java/com/dkanada/gramophone/fragments/player/flat/FlatPlayerFragment.java @@ -2,7 +2,6 @@ package com.dkanada.gramophone.fragments.player.flat; import android.animation.Animator; import android.animation.AnimatorSet; -import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -16,6 +15,7 @@ import android.widget.ImageView; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -27,7 +27,6 @@ import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils; import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.ColorUtil; -import com.kabouzeid.appthemehelper.util.ToolbarContentTintHelper; import com.dkanada.gramophone.R; import com.dkanada.gramophone.adapter.base.MediaEntryViewHolder; import com.dkanada.gramophone.adapter.song.PlayingQueueAdapter; @@ -225,7 +224,7 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum private void updateIsFavorite() { boolean favorite = MusicPlayerRemote.getCurrentSong().favorite; int res = favorite ? R.drawable.ic_favorite_white_24dp : R.drawable.ic_favorite_border_white_24dp; - int color = ToolbarContentTintHelper.toolbarContentColor(requireActivity(), Color.TRANSPARENT); + int color = ContextCompat.getColor(requireContext(), android.R.color.white); Drawable drawable = ImageUtil.getTintedVectorDrawable(requireActivity(), res, color); binding.playerToolbar.getMenu().findItem(R.id.action_toggle_favorite) diff --git a/app/src/main/java/com/dkanada/gramophone/util/ImageUtil.java b/app/src/main/java/com/dkanada/gramophone/util/ImageUtil.java index efb2834e..b3b33aba 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/ImageUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/ImageUtil.java @@ -111,6 +111,7 @@ public class ImageUtil { public static Bitmap resize(InputStream stream, int scaledWidth, int scaledHeight) { final Bitmap bitmap = BitmapFactory.decodeStream(stream); + return Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true); } } diff --git a/app/src/main/java/com/dkanada/gramophone/util/ThemeUtil.java b/app/src/main/java/com/dkanada/gramophone/util/ThemeUtil.java index 20f83763..1e7da591 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/ThemeUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/ThemeUtil.java @@ -1,5 +1,6 @@ package com.dkanada.gramophone.util; +import android.content.res.ColorStateList; import android.graphics.Bitmap; import androidx.annotation.ColorInt; @@ -19,6 +20,20 @@ public class ThemeUtil { return Palette.from(bitmap).generate(); } + public static ColorStateList getColorStateList(int normal, int active) { + int[][] states = new int[][]{ + new int[]{-android.R.attr.state_checked}, + new int[]{android.R.attr.state_checked} + }; + + int[] colors = new int[]{ + normal, + active + }; + + return new ColorStateList(states, colors); + } + @ColorInt public static int getColor(@Nullable Palette palette, int fallback) { if (palette != null) { diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java index 5fa7265e..adf2c48a 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java @@ -37,7 +37,7 @@ public abstract class BaseAppWidget extends AppWidgetProvider { @Override public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { - Log.d(NAME, String.format("onUpdate: %s", Arrays.toString(appWidgetIds))); + Log.i(NAME, String.format("onUpdate: %s", Arrays.toString(appWidgetIds))); reset(context, appWidgetIds); final Intent updateIntent = new Intent(MusicService.INTENT_EXTRA_WIDGET_UPDATE);