diff --git a/app/src/main/java/code/name/monkey/retromusic/App.kt b/app/src/main/java/code/name/monkey/retromusic/App.kt index a141fa06..35479e7e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/App.kt +++ b/app/src/main/java/code/name/monkey/retromusic/App.kt @@ -43,7 +43,7 @@ class App : MultiDexApplication() { // default theme if (!ThemeStore.isConfigured(this, 3)) { ThemeStore.editTheme(this) - .accentColorRes(R.color.md_green_A200) + .accentColorRes(R.color.md_deep_purple_A200) .coloredNavigationBar(true) .commit() } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt index f600f77d..ffa49ee3 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsLibraryPagerRecyclerViewFragment.kt @@ -1,120 +1,129 @@ package code.name.monkey.retromusic.fragments.base import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.annotation.NonNull -import androidx.annotation.StringRes +import android.view.* +import androidx.annotation.* import androidx.recyclerview.widget.RecyclerView import code.name.monkey.retromusic.R import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.util.DensityUtil -import code.name.monkey.retromusic.util.ViewUtil +import code.name.monkey.retromusic.util.* import com.google.android.material.appbar.AppBarLayout import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView import kotlinx.android.synthetic.main.fragment_main_activity_recycler_view.* abstract class AbsLibraryPagerRecyclerViewFragment, LM : RecyclerView.LayoutManager> : AbsLibraryPagerFragment(), AppBarLayout.OnOffsetChangedListener { - protected var adapter: A? = null - protected var layoutManager: LM? = null + protected var adapter: A? = null + protected var layoutManager: LM? = null + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? + ): View? { + val view = inflater.inflate( + R.layout.fragment_main_activity_recycler_view, container, false + ); + return view + } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - val view = inflater.inflate(R.layout.fragment_main_activity_recycler_view, container, false); - return view - } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + libraryFragment.addOnAppBarOffsetChangedListener(this) + initLayoutManager() + initAdapter() + setUpRecyclerView() + } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - libraryFragment.addOnAppBarOffsetChangedListener(this) - initLayoutManager() - initAdapter() - setUpRecyclerView() - } + private fun setUpRecyclerView() { + if (recyclerView is FastScrollRecyclerView) { + ViewUtil.setUpFastScrollRecyclerViewColor( + requireActivity(), recyclerView as FastScrollRecyclerView + ) + } + recyclerView.layoutManager = layoutManager + recyclerView.adapter = adapter + } - private fun setUpRecyclerView() { - if (recyclerView is FastScrollRecyclerView) { - ViewUtil.setUpFastScrollRecyclerViewColor(requireActivity(), recyclerView as FastScrollRecyclerView) - } - recyclerView.layoutManager = layoutManager - recyclerView.adapter = adapter - } + private fun initAdapter() { + adapter = createAdapter() + adapter?.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { + override fun onChanged() { + super.onChanged() + checkIsEmpty() + checkForPadding() + } + }) + } - private fun initAdapter() { - adapter = createAdapter() - adapter?.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { - override fun onChanged() { - super.onChanged() - checkIsEmpty() - checkForPadding() - } - }) - } + protected open val emptyMessage: Int + @StringRes get() = R.string.empty - protected open val emptyMessage: Int - @StringRes - get() = R.string.empty + private fun getEmojiByUnicode(unicode: Int): String { + return String(Character.toChars(unicode)) + } - private fun checkIsEmpty() { - emptyText.setText(emptyMessage) - empty.visibility = if (adapter!!.itemCount == 0) View.VISIBLE else View.GONE - } + private fun checkIsEmpty() { + emptyEmoji.text = getEmojiByUnicode(0x1F631) + emptyText.setText(emptyMessage) + empty.visibility = if (adapter!!.itemCount == 0) View.VISIBLE else View.GONE + } - private fun checkForPadding() { - val itemCount: Int = adapter?.itemCount ?: 0 - val params = container.layoutParams as ViewGroup.MarginLayoutParams - if (itemCount > 0 && MusicPlayerRemote.playingQueue.isNotEmpty()) { - val height = DensityUtil.dip2px(requireContext(), 104f) - params.bottomMargin = height - } else { - val height = DensityUtil.dip2px(requireContext(), 52f) - params.bottomMargin = height - } - } + private fun checkForPadding() { + val itemCount: Int = adapter?.itemCount ?: 0 + val params = container.layoutParams as ViewGroup.MarginLayoutParams + if (itemCount > 0 && MusicPlayerRemote.playingQueue.isNotEmpty()) { + val height = DensityUtil.dip2px(requireContext(), 104f) + params.bottomMargin = height + } else { + val height = DensityUtil.dip2px(requireContext(), 52f) + params.bottomMargin = height + } + } - private fun initLayoutManager() { - layoutManager = createLayoutManager() - } + private fun initLayoutManager() { + layoutManager = createLayoutManager() + } - protected abstract fun createLayoutManager(): LM + protected abstract fun createLayoutManager(): LM - @NonNull - protected abstract fun createAdapter(): A + @NonNull + protected abstract fun createAdapter(): A - override fun onOffsetChanged(p0: AppBarLayout?, i: Int) { - container.setPadding(container.paddingLeft, container.paddingTop, - container.paddingRight, libraryFragment.totalAppBarScrollingRange + i) - } + override fun onOffsetChanged(p0: AppBarLayout?, i: Int) { + container.setPadding( + container.paddingLeft, + container.paddingTop, + container.paddingRight, + libraryFragment.totalAppBarScrollingRange + i + ) + } - override fun onQueueChanged() { - super.onQueueChanged() - checkForPadding() - } + override fun onQueueChanged() { + super.onQueueChanged() + checkForPadding() + } - override fun onServiceConnected() { - super.onServiceConnected() - checkForPadding() - } + override fun onServiceConnected() { + super.onServiceConnected() + checkForPadding() + } - protected fun invalidateLayoutManager() { - initLayoutManager() - recyclerView.layoutManager = layoutManager - } + protected fun invalidateLayoutManager() { + initLayoutManager() + recyclerView.layoutManager = layoutManager + } - protected fun invalidateAdapter() { - initAdapter() - checkIsEmpty() - recyclerView.adapter = adapter - } + protected fun invalidateAdapter() { + initAdapter() + checkIsEmpty() + recyclerView.adapter = adapter + } - override fun onDestroyView() { - super.onDestroyView() - libraryFragment.removeOnAppBarOffsetChangedListener(this) - } + override fun onDestroyView() { + super.onDestroyView() + libraryFragment.removeOnAppBarOffsetChangedListener(this) + } - fun recyclerView(): RecyclerView { - return recyclerView - } + fun recyclerView(): RecyclerView { + return recyclerView + } } \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt index 1f58de6f..3a968c2d 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/fit/FitPlaybackControlsFragment.kt @@ -3,28 +3,18 @@ package code.name.monkey.retromusic.fragments.player.fit import android.animation.ObjectAnimator import android.graphics.PorterDuff import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.animation.AccelerateInterpolator -import android.view.animation.DecelerateInterpolator -import android.view.animation.LinearInterpolator +import android.view.* +import android.view.animation.* import android.widget.SeekBar import code.name.monkey.appthemehelper.ThemeStore -import code.name.monkey.appthemehelper.util.ATHUtil -import code.name.monkey.appthemehelper.util.ColorUtil -import code.name.monkey.appthemehelper.util.MaterialValueHelper -import code.name.monkey.appthemehelper.util.TintHelper +import code.name.monkey.appthemehelper.util.* import code.name.monkey.retromusic.R import code.name.monkey.retromusic.extensions.ripAlpha import code.name.monkey.retromusic.fragments.base.AbsPlayerControlsFragment -import code.name.monkey.retromusic.helper.MusicPlayerRemote -import code.name.monkey.retromusic.helper.MusicProgressViewUpdateHelper -import code.name.monkey.retromusic.helper.PlayPauseButtonOnClickHandler +import code.name.monkey.retromusic.helper.* import code.name.monkey.retromusic.misc.SimpleOnSeekbarChangeListener import code.name.monkey.retromusic.service.MusicService -import code.name.monkey.retromusic.util.MusicUtil -import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.* import kotlinx.android.synthetic.main.fragment_player_playback_controls.* class FitPlaybackControlsFragment : AbsPlayerControlsFragment() { @@ -116,7 +106,7 @@ class FitPlaybackControlsFragment : AbsPlayerControlsFragment() { val colorFinal = if (PreferenceUtil.getInstance(requireContext()).adaptiveColor) { color } else { - ThemeStore.accentColor(context!!).ripAlpha() + ThemeStore.accentColor(requireContext()).ripAlpha() } volumeFragment?.setTintable(colorFinal) diff --git a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/AlbumPresenter.kt b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/AlbumPresenter.kt index 15aed2b4..69ee5894 100644 --- a/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/AlbumPresenter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/mvp/presenter/AlbumPresenter.kt @@ -50,10 +50,8 @@ interface AlbumsPresenter : Presenter { override fun loadAlbums() { launch { when (val result = repository.allAlbums()) { - is Result.Success -> { - withContext(Dispatchers.Main) { - view?.albums(result.data) - } + is Result.Success -> withContext(Dispatchers.Main) { + view?.albums(result.data) } is Result.Error -> withContext(Dispatchers.Main) { view?.showEmptyView() } } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java b/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java new file mode 100644 index 00000000..6a61c5db --- /dev/null +++ b/app/src/main/java/code/name/monkey/retromusic/util/RippleUtils.java @@ -0,0 +1,146 @@ +package code.name.monkey.retromusic.util; + +import android.annotation.TargetApi; +import android.content.res.ColorStateList; +import android.graphics.Color; +import android.os.Build; +import android.util.StateSet; + +import androidx.annotation.ColorInt; +import androidx.annotation.Nullable; +import androidx.core.graphics.ColorUtils; + +public class RippleUtils { + public static final boolean USE_FRAMEWORK_RIPPLE = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; + private static final int[] PRESSED_STATE_SET = { + android.R.attr.state_pressed, + }; + private static final int[] HOVERED_FOCUSED_STATE_SET = { + android.R.attr.state_hovered, android.R.attr.state_focused, + }; + private static final int[] FOCUSED_STATE_SET = { + android.R.attr.state_focused, + }; + private static final int[] HOVERED_STATE_SET = { + android.R.attr.state_hovered, + }; + + private static final int[] SELECTED_PRESSED_STATE_SET = { + android.R.attr.state_selected, android.R.attr.state_pressed, + }; + private static final int[] SELECTED_HOVERED_FOCUSED_STATE_SET = { + android.R.attr.state_selected, android.R.attr.state_hovered, android.R.attr.state_focused, + }; + private static final int[] SELECTED_FOCUSED_STATE_SET = { + android.R.attr.state_selected, android.R.attr.state_focused, + }; + private static final int[] SELECTED_HOVERED_STATE_SET = { + android.R.attr.state_selected, android.R.attr.state_hovered, + }; + private static final int[] SELECTED_STATE_SET = { + android.R.attr.state_selected, + }; + + private static final int[] ENABLED_PRESSED_STATE_SET = { + android.R.attr.state_enabled, android.R.attr.state_pressed + }; + + public static ColorStateList convertToRippleDrawableColor(@Nullable ColorStateList rippleColor) { + if (USE_FRAMEWORK_RIPPLE) { + int size = 2; + + final int[][] states = new int[size][]; + final int[] colors = new int[size]; + int i = 0; + + // Ideally we would define a different composite color for each state, but that causes the + // ripple animation to abort prematurely. + // So we only allow two base states: selected, and non-selected. For each base state, we only + // base the ripple composite on its pressed state. + + // Selected base state. + states[i] = SELECTED_STATE_SET; + colors[i] = getColorForState(rippleColor, SELECTED_PRESSED_STATE_SET); + i++; + + // Non-selected base state. + states[i] = StateSet.NOTHING; + colors[i] = getColorForState(rippleColor, PRESSED_STATE_SET); + i++; + + return new ColorStateList(states, colors); + } else { + int size = 10; + + final int[][] states = new int[size][]; + final int[] colors = new int[size]; + int i = 0; + + states[i] = SELECTED_PRESSED_STATE_SET; + colors[i] = getColorForState(rippleColor, SELECTED_PRESSED_STATE_SET); + i++; + + states[i] = SELECTED_HOVERED_FOCUSED_STATE_SET; + colors[i] = getColorForState(rippleColor, SELECTED_HOVERED_FOCUSED_STATE_SET); + i++; + + states[i] = SELECTED_FOCUSED_STATE_SET; + colors[i] = getColorForState(rippleColor, SELECTED_FOCUSED_STATE_SET); + i++; + + states[i] = SELECTED_HOVERED_STATE_SET; + colors[i] = getColorForState(rippleColor, SELECTED_HOVERED_STATE_SET); + i++; + + // Checked state. + states[i] = SELECTED_STATE_SET; + colors[i] = Color.TRANSPARENT; + i++; + + states[i] = PRESSED_STATE_SET; + colors[i] = getColorForState(rippleColor, PRESSED_STATE_SET); + i++; + + states[i] = HOVERED_FOCUSED_STATE_SET; + colors[i] = getColorForState(rippleColor, HOVERED_FOCUSED_STATE_SET); + i++; + + states[i] = FOCUSED_STATE_SET; + colors[i] = getColorForState(rippleColor, FOCUSED_STATE_SET); + i++; + + states[i] = HOVERED_STATE_SET; + colors[i] = getColorForState(rippleColor, HOVERED_STATE_SET); + i++; + + // Default state. + states[i] = StateSet.NOTHING; + colors[i] = Color.TRANSPARENT; + i++; + + return new ColorStateList(states, colors); + } + } + + @ColorInt + private static int getColorForState(@Nullable ColorStateList rippleColor, int[] state) { + int color; + if (rippleColor != null) { + color = rippleColor.getColorForState(state, rippleColor.getDefaultColor()); + } else { + color = Color.TRANSPARENT; + } + return USE_FRAMEWORK_RIPPLE ? doubleAlpha(color) : color; + } + + /** + * On API 21+, the framework composites a ripple color onto the display at about 50% opacity. + * Since we are providing precise ripple colors, cancel that out by doubling the opacity here. + */ + @ColorInt + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + private static int doubleAlpha(@ColorInt int color) { + int alpha = Math.min(2 * Color.alpha(color), 255); + return ColorUtils.setAlphaComponent(color, alpha); + } +} diff --git a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt index 1d4701c9..6df82863 100644 --- a/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt +++ b/app/src/main/java/code/name/monkey/retromusic/views/BottomNavigationBarTinted.kt @@ -15,13 +15,17 @@ package code.name.monkey.retromusic.views import android.content.Context +import android.content.res.ColorStateList +import android.graphics.drawable.RippleDrawable import android.util.AttributeSet +import androidx.core.content.ContextCompat import code.name.monkey.appthemehelper.ThemeStore import code.name.monkey.appthemehelper.util.ATHUtil import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.NavigationViewUtil import code.name.monkey.retromusic.R import code.name.monkey.retromusic.util.PreferenceUtil +import code.name.monkey.retromusic.util.RippleUtils import com.google.android.material.bottomnavigation.BottomNavigationView class BottomNavigationBarTinted @JvmOverloads constructor( @@ -38,7 +42,11 @@ class BottomNavigationBarTinted @JvmOverloads constructor( val accentColor = ThemeStore.accentColor(context) NavigationViewUtil.setItemIconColors(this, ColorUtil.withAlpha(iconColor, 0.5f), accentColor) NavigationViewUtil.setItemTextColors(this, ColorUtil.withAlpha(iconColor, 0.5f), accentColor) - + itemBackground = RippleDrawable(RippleUtils.convertToRippleDrawableColor(ColorStateList.valueOf(ThemeStore.accentColor(context).addAlpha())), ContextCompat.getDrawable(context, R.drawable.bottom_navigation_item_background), null) setOnApplyWindowInsetsListener(null) } -} \ No newline at end of file +} + +private fun Int.addAlpha(): Int { + return ColorUtil.withAlpha(this, 0.12f) +} diff --git a/app/src/main/res/drawable-xxhdpi/bottom_navigation_item_background_ripple.xml b/app/src/main/res/drawable-xxhdpi/bottom_navigation_item_background_ripple.xml new file mode 100644 index 00000000..8aff4a1e --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/bottom_navigation_item_background_ripple.xml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_navigation_item_background.xml b/app/src/main/res/drawable/bottom_navigation_item_background.xml new file mode 100644 index 00000000..3ee82f45 --- /dev/null +++ b/app/src/main/res/drawable/bottom_navigation_item_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_artist_selected_white_24dp.xml b/app/src/main/res/drawable/ic_artist_selected_white_24dp.xml index ca9417a7..4e865f47 100644 --- a/app/src/main/res/drawable/ic_artist_selected_white_24dp.xml +++ b/app/src/main/res/drawable/ic_artist_selected_white_24dp.xml @@ -7,8 +7,5 @@ - + android:pathData="M11,14C12,14 13.05,14.16 14.2,14.44C13.39,15.31 13,16.33 13,17.5C13,18.39 13.25,19.23 13.78,20H3V18C3,16.81 3.91,15.85 5.74,15.12C7.57,14.38 9.33,14 11,14M11,12C9.92,12 9,11.61 8.18,10.83C7.38,10.05 7,9.11 7,8C7,6.92 7.38,6 8.18,5.18C9,4.38 9.92,4 11,4C12.11,4 13.05,4.38 13.83,5.18C14.61,6 15,6.92 15,8C15,9.11 14.61,10.05 13.83,10.83C13.05,11.61 12.11,12 11,12M18.5,10H20L22,10V12H20V17.5A2.5,2.5 0 0,1 17.5,20A2.5,2.5 0 0,1 15,17.5A2.5,2.5 0 0,1 17.5,15C17.86,15 18.19,15.07 18.5,15.21V10Z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_artist_white_24dp.xml b/app/src/main/res/drawable/ic_artist_white_24dp.xml index ba961834..ce926c92 100644 --- a/app/src/main/res/drawable/ic_artist_white_24dp.xml +++ b/app/src/main/res/drawable/ic_artist_white_24dp.xml @@ -6,8 +6,5 @@ android:viewportHeight="24"> - + android:pathData="M11,4A4,4 0 0,1 15,8A4,4 0 0,1 11,12A4,4 0 0,1 7,8A4,4 0 0,1 11,4M11,6A2,2 0 0,0 9,8A2,2 0 0,0 11,10A2,2 0 0,0 13,8A2,2 0 0,0 11,6M11,13C12.1,13 13.66,13.23 15.11,13.69C14.5,14.07 14,14.6 13.61,15.23C12.79,15.03 11.89,14.9 11,14.9C8.03,14.9 4.9,16.36 4.9,17V18.1H13.04C13.13,18.8 13.38,19.44 13.76,20H3V17C3,14.34 8.33,13 11,13M18.5,10H20L22,10V12H20V17.5A2.5,2.5 0 0,1 17.5,20A2.5,2.5 0 0,1 15,17.5A2.5,2.5 0 0,1 17.5,15C17.86,15 18.19,15.07 18.5,15.21V10Z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml b/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml index 7575cd18..0cbc058d 100644 --- a/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml +++ b/app/src/main/res/drawable/ic_audiotrack_black_24dp.xml @@ -6,5 +6,5 @@ android:viewportHeight="24"> + android:pathData="M12 3l0.01 10.55c-0.59-0.34-1.27-0.55-2-0.55C7.79 13 6 14.79 6 17s1.79 4 4.01 4S14 19.21 14 17V7h4V3h-6zm-1.99 16c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_audiotrack_selected_black_24dp.xml b/app/src/main/res/drawable/ic_audiotrack_selected_black_24dp.xml index 9ae3e2b3..57206a2d 100644 --- a/app/src/main/res/drawable/ic_audiotrack_selected_black_24dp.xml +++ b/app/src/main/res/drawable/ic_audiotrack_selected_black_24dp.xml @@ -7,5 +7,5 @@ + android:pathData="M12 3v10.55c-0.59-0.34-1.27-0.55-2-0.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_music_note_off_white_24dp.xml b/app/src/main/res/drawable/ic_music_note_off_white_24dp.xml index 7c7bf9bc..5643cb81 100644 --- a/app/src/main/res/drawable/ic_music_note_off_white_24dp.xml +++ b/app/src/main/res/drawable/ic_music_note_off_white_24dp.xml @@ -20,5 +20,5 @@ android:viewportHeight="24"> + android:pathData="M14 7H18V3H12V7.61L14 9.61M12 10.44L4.41 2.86L3 4.27L12 13.27V13.55A3.94 3.94 0 0 0 8.67 13.23A4 4 0 0 0 10.65 20.95A4.1 4.1 0 0 0 14 16.85V15.27L19.73 21L21.14 19.59M10 19A2 2 0 1 1 12 17A2 2 0 0 1 10 19Z" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_activity_recycler_view.xml b/app/src/main/res/layout/fragment_main_activity_recycler_view.xml index aa957d06..42e18c2a 100644 --- a/app/src/main/res/layout/fragment_main_activity_recycler_view.xml +++ b/app/src/main/res/layout/fragment_main_activity_recycler_view.xml @@ -25,11 +25,13 @@ android:visibility="gone" tools:visibility="visible"> - + diff --git a/app/src/main/res/layout/sliding_music_panel_layout.xml b/app/src/main/res/layout/sliding_music_panel_layout.xml index 9eae11dc..90ac01af 100644 --- a/app/src/main/res/layout/sliding_music_panel_layout.xml +++ b/app/src/main/res/layout/sliding_music_panel_layout.xml @@ -53,11 +53,13 @@ android:background="?colorSecondary" android:elevation="0dp" android:visibility="gone" + app:itemBackground="@drawable/bottom_navigation_item_background" app:itemIconTint="@drawable/bottom_navigation_item_colors" app:itemTextAppearanceActive="@style/BottomSheetItemTextAppearanceActive" app:itemTextAppearanceInactive="@style/BottomSheetItemTextAppearanceInactive" app:itemTextColor="@drawable/bottom_navigation_item_colors" app:labelVisibilityMode="labeled" + app:itemHorizontalTranslationEnabled="false" app:menu="@menu/bottom_navigation_main" tools:layout_height="56dp" /> diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index d83ae81b..7bcd5141 100755 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -18,4 +18,6 @@ @string/last_added @string/action_shuffle_all @string/my_top_tracks + + 🤔 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 63db75f7..8bbea18d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,7 +3,7 @@ Team, social links Accent color - The theme accent color, defaults to teal + The theme accent color, defaults to purple About Add to favorites @@ -329,16 +329,16 @@ Next Song - No albums - No artists + You have no albums + You have no artists "Play a song first, then try again." No equalizer found - No genres + You have no genres No lyrics found - No playlists + You have no playlists No purchase found. No results - No songs + You have no songs Normal Normal lyrics diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2d07bcb0..d2e756d4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -68,10 +68,12 @@