From 485c35d74c9cee373e0a2181030d1c0325d793d8 Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sun, 22 May 2022 17:12:49 -0600 Subject: [PATCH] all: hack around more lollipop issues Hack around more insane lollipop bugs, such as: - The angular auxio icon crashing the system UI - Optimized icons being corrupted - Setting image alpha not working properly I really wish I could drop support for this horrible version, but I either have to wait for a major library to drop support or for the usage numbers to reach 1%. --- CHANGELOG.md | 2 + .../java/org/oxycblt/auxio/MainActivity.kt | 1 + .../java/org/oxycblt/auxio/MainFragment.kt | 4 +- .../detail/recycler/AlbumDetailAdapter.kt | 10 ++- .../java/org/oxycblt/auxio/music/Indexer.kt | 9 +-- .../org/oxycblt/auxio/music/MusicStore.kt | 19 ++--- .../auxio/playback/PlaybackBarFragment.kt | 16 ++--- .../auxio/playback/PlaybackPanelFragment.kt | 9 --- .../auxio/playback/PlaybackViewModel.kt | 72 +++++++++---------- .../playback/system/NotificationComponent.kt | 9 ++- .../auxio/settings/SettingsListFragment.kt | 4 +- .../org/oxycblt/auxio/ui/EdgeAppBarLayout.kt | 7 +- .../org/oxycblt/auxio/ui/StyledImageView.kt | 23 ++++-- .../org/oxycblt/auxio/util/ContextUtil.kt | 13 ++++ app/src/main/res/color/sel_cover_bg.xml | 3 +- app/src/main/res/color/sel_on_cover_bg.xml | 3 +- app/src/main/res/color/sel_track.xml | 4 ++ app/src/main/res/drawable/ic_about.xml | 8 ++- app/src/main/res/drawable/ic_accent.xml | 5 +- app/src/main/res/drawable/ic_album.xml | 4 +- app/src/main/res/drawable/ic_artist.xml | 2 +- app/src/main/res/drawable/ic_auto.xml | 2 +- app/src/main/res/drawable/ic_back.xml | 2 +- app/src/main/res/drawable/ic_check.xml | 2 +- app/src/main/res/drawable/ic_close.xml | 2 +- app/src/main/res/drawable/ic_code.xml | 2 +- .../drawable/{ic_night.xml => ic_dark.xml} | 2 +- app/src/main/res/drawable/ic_day.xml | 11 --- .../drawable/{ic_clear.xml => ic_delete.xml} | 2 +- app/src/main/res/drawable/ic_down.xml | 2 +- app/src/main/res/drawable/ic_exit.xml | 10 --- app/src/main/res/drawable/ic_faq.xml | 2 +- app/src/main/res/drawable/ic_filter.xml | 2 +- app/src/main/res/drawable/ic_genre.xml | 2 +- app/src/main/res/drawable/ic_handle.xml | 2 +- app/src/main/res/drawable/ic_license.xml | 2 +- app/src/main/res/drawable/ic_light.xml | 11 +++ app/src/main/res/drawable/ic_queue.xml | 2 +- .../res/drawable/ic_remote_default_cover.xml | 4 +- .../res/drawable/ic_remote_repeat_off.xml | 4 +- .../res/drawable/ic_remote_shuffle_off.xml | 2 +- .../res/drawable/ic_remote_shuffle_on.xml | 2 +- app/src/main/res/drawable/ic_repeat.xml | 2 +- app/src/main/res/drawable/ic_repeat_on.xml | 2 +- app/src/main/res/drawable/ic_repeat_one.xml | 2 +- app/src/main/res/drawable/ic_search.xml | 2 +- app/src/main/res/drawable/ic_settings.xml | 2 +- .../{ic_shuffle.xml => ic_shuffle_state.xml} | 2 +- app/src/main/res/drawable/ic_skip_next.xml | 2 +- app/src/main/res/drawable/ic_skip_prev.xml | 3 +- app/src/main/res/drawable/ic_song.xml | 2 +- app/src/main/res/drawable/ic_sort.xml | 2 +- app/src/main/res/drawable/ic_time.xml | 13 ++-- .../layout-land/fragment_playback_panel.xml | 7 +- .../fragment_playback_panel.xml | 5 +- .../fragment_playback_panel.xml | 7 +- .../layout-sw640dp/fragment_playback_bar.xml | 2 +- .../fragment_playback_panel.xml | 7 +- .../layout-w600dp/fragment_playback_bar.xml | 3 +- app/src/main/res/layout/dialog_accent.xml | 2 +- app/src/main/res/layout/dialog_excluded.xml | 2 +- app/src/main/res/layout/dialog_pre_amp.xml | 2 + app/src/main/res/layout/fragment_about.xml | 4 +- app/src/main/res/layout/fragment_home.xml | 2 +- .../main/res/layout/fragment_home_list.xml | 2 +- .../main/res/layout/fragment_playback_bar.xml | 2 +- .../res/layout/fragment_playback_panel.xml | 7 +- app/src/main/res/layout/item_album_song.xml | 11 ++- app/src/main/res/layout/item_disc_header.xml | 4 +- app/src/main/res/layout/item_excluded_dir.xml | 14 ++-- app/src/main/res/layout/item_queue_song.xml | 2 +- app/src/main/res/layout/item_sort_header.xml | 6 +- app/src/main/res/layout/item_tab.xml | 4 +- app/src/main/res/layout/widget_large.xml | 2 +- app/src/main/res/layout/widget_wide.xml | 2 +- app/src/main/res/values/colors.xml | 1 + app/src/main/res/xml/prefs_main.xml | 10 +-- build.gradle | 2 +- 78 files changed, 231 insertions(+), 214 deletions(-) create mode 100644 app/src/main/res/color/sel_track.xml rename app/src/main/res/drawable/{ic_night.xml => ic_dark.xml} (58%) delete mode 100644 app/src/main/res/drawable/ic_day.xml rename app/src/main/res/drawable/{ic_clear.xml => ic_delete.xml} (74%) delete mode 100644 app/src/main/res/drawable/ic_exit.xml create mode 100644 app/src/main/res/drawable/ic_light.xml rename app/src/main/res/drawable/{ic_shuffle.xml => ic_shuffle_state.xml} (60%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 81b9fd18e..171079194 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - Fixed incorrect ellipsizing on song items - Fixed a variety of esoteric crashes with queue state - Fixed music indexing error when the OS would not provide a file name +- Fixed icon corruptions on lollipop devices #### What's Changed - Audio focus is no longer configurable @@ -29,6 +30,7 @@ - Use native ExoPlayer AudioFocus implementation - Make ReplayGain functionality use AudioProcessor instead of volume - Removed databinding [Greatly reduces compile times] +- Start using Material You dialogs - An uncountable amount of internal codebase improvements ## v2.2.2 diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt index a4dd62445..8ec8cef82 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt @@ -80,6 +80,7 @@ class MainActivity : AppCompatActivity() { override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) + // See if the new intent is a file intent. If so, open it. val uri = retrieveViewUri(intent) if (uri != null) { playbackModel.performAction(this, PlaybackViewModel.DelayedAction.Open(uri)) diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 69aeb59e5..29e76ce7f 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -183,7 +183,9 @@ class MainFragment : ViewBindingFragment() { /** * A back press callback that handles how to respond to backwards navigation in the detail - * fragments and the playback panel. TODO: Migrate to new predictive API + * fragments and the playback panel. + * + * TODO: Migrate to new predictive API */ inner class DynamicBackPressedCallback : OnBackPressedCallback(false) { override fun handleOnBackPressed() { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt index eb1860bd2..b83412f56 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/AlbumDetailAdapter.kt @@ -31,6 +31,7 @@ import org.oxycblt.auxio.ui.BindingViewHolder import org.oxycblt.auxio.ui.Item import org.oxycblt.auxio.ui.MenuItemListener import org.oxycblt.auxio.ui.SimpleItemCallback +import org.oxycblt.auxio.ui.StyledImageView import org.oxycblt.auxio.util.context import org.oxycblt.auxio.util.formatDuration import org.oxycblt.auxio.util.getPluralSafe @@ -202,7 +203,7 @@ private class AlbumSongViewHolder private constructor(private val binding: ItemA contentDescription = context.getString(R.string.desc_track_number, item.track) } - binding.songTrackBg.imageAlpha = 0 + binding.songTrackBg.setImageDrawable(null) } else { binding.songTrack.apply { textSafe = "" @@ -210,7 +211,12 @@ private class AlbumSongViewHolder private constructor(private val binding: ItemA contentDescription = context.getString(R.string.def_track) } - binding.songTrackBg.imageAlpha = 255 + // Normally we would not re-load the drawable each time and instead + // change the alpha value, but Lollipop gets in our way yet again + // and does some stupid insanity with the alpha value that results + // in such branching. + binding.songTrackBg.setImageDrawable( + StyledImageView.StyledDrawable(binding.context, R.drawable.ic_song)) } binding.songName.textSafe = item.resolveName(binding.context) diff --git a/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt index 954faf033..a09e5cae8 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Indexer.kt @@ -17,7 +17,6 @@ package org.oxycblt.auxio.music -import android.content.ContentResolver import android.content.ContentUris import android.content.Context import android.net.Uri @@ -26,6 +25,7 @@ import androidx.core.database.getIntOrNull import androidx.core.database.getStringOrNull import org.oxycblt.auxio.music.excluded.ExcludedDatabase import org.oxycblt.auxio.ui.Sort +import org.oxycblt.auxio.util.contentResolverSafe import org.oxycblt.auxio.util.logD /** @@ -99,13 +99,6 @@ object Indexer { @Suppress("InlinedApi") private const val AUDIO_COLUMN_ALBUM_ARTIST = MediaStore.Audio.AudioColumns.ALBUM_ARTIST - /** - * Gets a content resolver in a way that does not mangle metadata on certain OEM skins. See - * https://github.com/OxygenCobalt/Auxio/issues/50 for more info. - */ - private val Context.contentResolverSafe: ContentResolver - get() = applicationContext.contentResolver - fun index(context: Context): MusicStore.Library? { val songs = loadSongs(context) if (songs.isEmpty()) return null diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt index 2fc2e2dbb..e09a910ab 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt @@ -18,7 +18,6 @@ package org.oxycblt.auxio.music import android.Manifest -import android.content.ContentResolver import android.content.Context import android.content.pm.PackageManager import android.net.Uri @@ -27,6 +26,7 @@ import androidx.core.content.ContextCompat import java.lang.Exception import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import org.oxycblt.auxio.util.contentResolverSafe import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE @@ -115,15 +115,16 @@ class MusicStore private constructor() { * uri. * @return The corresponding [Song] for this [uri], null if there isn't one. */ - fun findSongForUri(uri: Uri, resolver: ContentResolver): Song? { - resolver.query(uri, arrayOf(OpenableColumns.DISPLAY_NAME), null, null, null)?.use { - cursor -> - cursor.moveToFirst() - val fileName = - cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)) + fun findSongForUri(context: Context, uri: Uri): Song? { + context.contentResolverSafe.query( + uri, arrayOf(OpenableColumns.DISPLAY_NAME), null, null, null) + ?.use { cursor -> + cursor.moveToFirst() + val fileName = + cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)) - return songs.find { it.fileName == fileName } - } + return songs.find { it.fileName == fileName } + } return null } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt index 3b91658c9..9fc40fac1 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackBarFragment.kt @@ -23,14 +23,13 @@ import android.view.LayoutInflater import android.view.WindowInsets import androidx.core.view.updatePadding import androidx.fragment.app.activityViewModels -import com.google.android.material.color.MaterialColors import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentPlaybackBarBinding import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.ui.MainNavigationAction import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.ui.ViewBindingFragment -import org.oxycblt.auxio.util.getAttrColorSafe +import org.oxycblt.auxio.util.getColorStateListSafe import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.textSafe @@ -82,20 +81,17 @@ class PlaybackBarFragment : ViewBindingFragment() { } } + // Load the track color in manually as it's unclear whether the track actually supports + // using a ColorStateList in the resources + binding.playbackProgressBar.trackColor = + requireContext().getColorStateListSafe(R.color.sel_track).defaultColor + binding.playbackSkipPrev?.setOnClickListener { playbackModel.prev() } binding.playbackPlayPause.setOnClickListener { playbackModel.invertPlaying() } binding.playbackSkipNext?.setOnClickListener { playbackModel.next() } - // Deliberately override the progress bar color [in a Lollipop-friendly way] so that - // we use colorSecondary instead of colorSurfaceVariant. This is because - // colorSurfaceVariant is used with the assumption that the view that is using it is - // not elevated and is therefore not colored. This view is elevated. - binding.playbackProgressBar.trackColor = - MaterialColors.compositeARGBWithAlpha( - requireContext().getAttrColorSafe(R.attr.colorSecondary), (255 * 0.2).toInt()) - // -- VIEWMODEL SETUP --- playbackModel.song.observe(viewLifecycleOwner, ::updateSong) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt index fe2442370..a1c518abb 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackPanelFragment.kt @@ -24,7 +24,6 @@ import androidx.appcompat.widget.Toolbar import androidx.core.view.updatePadding import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels -import com.google.android.material.color.MaterialColors import com.google.android.material.slider.Slider import kotlin.math.max import org.oxycblt.auxio.R @@ -36,9 +35,7 @@ import org.oxycblt.auxio.ui.MainNavigationAction import org.oxycblt.auxio.ui.NavigationViewModel import org.oxycblt.auxio.ui.ViewBindingFragment import org.oxycblt.auxio.util.formatDuration -import org.oxycblt.auxio.util.getAttrColorSafe import org.oxycblt.auxio.util.logD -import org.oxycblt.auxio.util.stateList import org.oxycblt.auxio.util.systemBarInsetsCompat import org.oxycblt.auxio.util.textSafe @@ -98,12 +95,6 @@ class PlaybackPanelFragment : binding.playbackSeekBar.apply { addOnChangeListener(this@PlaybackPanelFragment) addOnSliderTouchListener(this@PlaybackPanelFragment) - - // Composite a tint list based on the active/inactive colors - trackInactiveTintList = - MaterialColors.compositeARGBWithAlpha( - context.getAttrColorSafe(R.attr.colorSecondary), (255 * 0.2).toInt()) - .stateList } binding.playbackRepeat.setOnClickListener { playbackModel.incrementRepeatMode() } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index fa541e66b..9c49d44c4 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -99,43 +99,6 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback, MusicStore // --- PLAYING FUNCTIONS --- - /** - * Perform the given [DelayedAction]. - * - * A "delayed action" is a class of playback actions that must have music present to function, - * usually alongside a context too. Examples include: - * - Opening files - * - Restoring the playback state - * - Future app shortcuts - * - * We would normally want to put this kind of functionality into PlaybackService, but it's - * lifecycle makes that more or less impossible. - */ - fun performAction(context: Context, action: DelayedAction) { - val library = musicStore.library - val actionImpl = DelayedActionImpl(context.applicationContext, action) - if (library != null) { - performActionImpl(actionImpl, library) - } else { - pendingDelayedAction = actionImpl - } - } - - private fun performActionImpl(action: DelayedActionImpl, library: MusicStore.Library) { - when (action.inner) { - is DelayedAction.RestoreState -> { - if (!playbackManager.isInitialized) { - viewModelScope.launch { playbackManager.restoreState(action.context) } - } - } - is DelayedAction.Open -> { - library - .findSongForUri(action.inner.uri, action.context.contentResolver) - ?.let(::play) - } - } - } - /** * Play a [song] with the [mode] specified. [mode] will default to the preferred song playback * mode of the user if not specified. @@ -188,6 +151,41 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback, MusicStore playbackManager.shuffleAll() } + /** + * Perform the given [DelayedAction]. + * + * A "delayed action" is a class of playback actions that must have music present to function, + * usually alongside a context too. Examples include: + * - Opening files + * - Restoring the playback state + * - Future app shortcuts + * + * We would normally want to put this kind of functionality into PlaybackService, but it's + * lifecycle makes that more or less impossible. + */ + fun performAction(context: Context, action: DelayedAction) { + val library = musicStore.library + val actionImpl = DelayedActionImpl(context.applicationContext, action) + if (library != null) { + performActionImpl(actionImpl, library) + } else { + pendingDelayedAction = actionImpl + } + } + + private fun performActionImpl(action: DelayedActionImpl, library: MusicStore.Library) { + when (action.inner) { + is DelayedAction.RestoreState -> { + if (!playbackManager.isInitialized) { + viewModelScope.launch { playbackManager.restoreState(action.context) } + } + } + is DelayedAction.Open -> { + library.findSongForUri(action.context, action.inner.uri)?.let(::play) + } + } + } + // --- POSITION FUNCTIONS --- /** Update the position and push it to [PlaybackStateManager] */ diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt index 4a5e19f46..0ba79b368 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/NotificationComponent.kt @@ -64,7 +64,7 @@ class NotificationComponent( notificationManager.createNotificationChannel(channel) } - setSmallIcon(R.drawable.ic_auxio) + setSmallIcon(R.drawable.ic_song) setCategory(NotificationCompat.CATEGORY_SERVICE) setShowWhen(false) setSilent(true) @@ -75,7 +75,7 @@ class NotificationComponent( addAction(buildAction(context, PlaybackService.ACTION_SKIP_PREV, R.drawable.ic_skip_prev)) addAction(buildPlayPauseAction(context, true)) addAction(buildAction(context, PlaybackService.ACTION_SKIP_NEXT, R.drawable.ic_skip_next)) - addAction(buildAction(context, PlaybackService.ACTION_EXIT, R.drawable.ic_exit)) + addAction(buildAction(context, PlaybackService.ACTION_EXIT, R.drawable.ic_close)) setStyle(MediaStyle().setMediaSession(sessionToken).setShowActionsInCompactView(1, 2, 3)) } @@ -100,7 +100,7 @@ class NotificationComponent( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { setSubText(parent?.resolveName(context) ?: context.getString(R.string.lbl_all_songs)) } else { - setSubText(song.resolveName(context)) + setSubText(song.album.resolveName(context)) } provider.load( @@ -108,7 +108,6 @@ class NotificationComponent( object : BitmapProvider.Target { override fun onCompleted(bitmap: Bitmap?) { setLargeIcon(bitmap) - setLargeIcon(null) callback.onNotificationChanged(this@NotificationComponent) } }) @@ -171,7 +170,7 @@ class NotificationComponent( isShuffled: Boolean ): NotificationCompat.Action { val drawableRes = - if (isShuffled) R.drawable.ic_shuffle else R.drawable.ic_remote_shuffle_off + if (isShuffled) R.drawable.ic_shuffle_state else R.drawable.ic_remote_shuffle_off return buildAction(context, PlaybackService.ACTION_INVERT_SHUFFLE, drawableRes) } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt index d65552836..8a21b984b 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt @@ -209,8 +209,8 @@ class SettingsListFragment : PreferenceFragmentCompat() { private fun Int.toThemeIcon(): Int { return when (this) { AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM -> R.drawable.ic_auto - AppCompatDelegate.MODE_NIGHT_NO -> R.drawable.ic_day - AppCompatDelegate.MODE_NIGHT_YES -> R.drawable.ic_night + AppCompatDelegate.MODE_NIGHT_NO -> R.drawable.ic_light + AppCompatDelegate.MODE_NIGHT_YES -> R.drawable.ic_dark else -> R.drawable.ic_auto } } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/EdgeAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/ui/EdgeAppBarLayout.kt index b8640a1fa..9125716f0 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/EdgeAppBarLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/EdgeAppBarLayout.kt @@ -33,9 +33,10 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat /** * An [AppBarLayout] that fixes a bug with the default implementation where the lifted state will - * not properly respond to RecyclerView events. **Note:** This layout relies on - * [AppBarLayout.liftOnScrollTargetViewId] to figure out what scrolling view to use. Failure to - * specify this will result in the layout not working. + * not properly respond to RecyclerView events. + * + * **Note:** This layout relies on [AppBarLayout.liftOnScrollTargetViewId] to figure out what + * scrolling view to use. Failure to specify this will result in the layout not working. */ open class EdgeAppBarLayout @JvmOverloads diff --git a/app/src/main/java/org/oxycblt/auxio/ui/StyledImageView.kt b/app/src/main/java/org/oxycblt/auxio/ui/StyledImageView.kt index 9ce82987a..d9f7234f0 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/StyledImageView.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/StyledImageView.kt @@ -27,6 +27,7 @@ import androidx.annotation.AttrRes import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.appcompat.widget.AppCompatImageView +import androidx.core.graphics.drawable.DrawableCompat import coil.dispose import coil.load import com.google.android.material.shape.MaterialShapeDrawable @@ -40,6 +41,7 @@ import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.settings.SettingsManager import org.oxycblt.auxio.util.getColorStateListSafe import org.oxycblt.auxio.util.getDrawableSafe +import org.oxycblt.auxio.util.logD /** * An [AppCompatImageView] that applies many of the stylistic choices that Auxio uses regarding @@ -71,7 +73,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr // If we have a pre-set drawable, ensure that it's half-size. val drawable = drawable if (drawable != null) { - setImageDrawable(HalfSizeDrawable(drawable)) + setImageDrawable(StyledDrawable(context, drawable)) } } @@ -106,16 +108,29 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr private fun load(music: T, @DrawableRes error: Int, @StringRes desc: Int) { dispose() load(music) { - error(HalfSizeDrawable(context, error)) + error(StyledDrawable(context, error)) transformations(SquareFrameTransform.INSTANCE) } contentDescription = context.getString(desc, music.resolveName(context)) } - private class HalfSizeDrawable(private val src: Drawable) : Drawable() { - constructor(context: Context, @DrawableRes res: Int) : this(context.getDrawableSafe(res)) + /** + * A companion drawable that can be used with the style that [StyledImageView] provides. + * @author OxygenCobalt + */ + class StyledDrawable(context: Context, private val src: Drawable) : Drawable() { + constructor( + context: Context, + @DrawableRes res: Int + ) : this(context, context.getDrawableSafe(res)) + + init { + // Re-tint the drawable to something that will play along with the background + DrawableCompat.setTintList(src, context.getColorStateListSafe(R.color.sel_on_cover_bg)) + } override fun draw(canvas: Canvas) { + logD(src.alpha) src.bounds.set(canvas.clipBounds) val adjustWidth = src.bounds.width() / 4 val adjustHeight = src.bounds.height() / 4 diff --git a/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt index ae1264c59..fccea789b 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt @@ -18,6 +18,7 @@ package org.oxycblt.auxio.util import android.app.PendingIntent +import android.content.ContentResolver import android.content.Context import android.content.Intent import android.content.res.ColorStateList @@ -60,6 +61,13 @@ val Context.isNight: Boolean val Context.isLandscape get() = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE +/** + * Gets a content resolver in a way that does not mangle metadata on certain OEM skins. See + * https://github.com/OxygenCobalt/Auxio/issues/50 for more info. + */ +val Context.contentResolverSafe: ContentResolver + get() = applicationContext.contentResolver + /** * Convenience method for getting a plural. * @param pluralsRes Resource for the plural @@ -178,6 +186,11 @@ fun Context.getDimenOffsetSafe(@DimenRes dimen: Int): Int { } } +/** + * Calculates the pixels of the given dimension [dp]. + * @param dp the dimension value + * @return The equivalent amount of pixels for [dp]. + */ @Px fun Context.pxOfDp(@Dimension dp: Float): Int { return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, resources.displayMetrics) diff --git a/app/src/main/res/color/sel_cover_bg.xml b/app/src/main/res/color/sel_cover_bg.xml index 263db8a89..22d9606fd 100644 --- a/app/src/main/res/color/sel_cover_bg.xml +++ b/app/src/main/res/color/sel_cover_bg.xml @@ -1,6 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/color/sel_on_cover_bg.xml b/app/src/main/res/color/sel_on_cover_bg.xml index 1adeb1060..6de6dcf7b 100644 --- a/app/src/main/res/color/sel_on_cover_bg.xml +++ b/app/src/main/res/color/sel_on_cover_bg.xml @@ -1,6 +1,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/color/sel_track.xml b/app/src/main/res/color/sel_track.xml new file mode 100644 index 000000000..e3a847564 --- /dev/null +++ b/app/src/main/res/color/sel_track.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_about.xml b/app/src/main/res/drawable/ic_about.xml index 77f844786..2cdb140c1 100644 --- a/app/src/main/res/drawable/ic_about.xml +++ b/app/src/main/res/drawable/ic_about.xml @@ -7,5 +7,11 @@ android:viewportHeight="24"> + android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z" /> + + diff --git a/app/src/main/res/drawable/ic_accent.xml b/app/src/main/res/drawable/ic_accent.xml index 485d365af..60e108dc2 100644 --- a/app/src/main/res/drawable/ic_accent.xml +++ b/app/src/main/res/drawable/ic_accent.xml @@ -2,9 +2,10 @@ + android:fillColor="@android:color/white" + android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z" /> diff --git a/app/src/main/res/drawable/ic_album.xml b/app/src/main/res/drawable/ic_album.xml index 1c00b9e96..4849575e0 100644 --- a/app/src/main/res/drawable/ic_album.xml +++ b/app/src/main/res/drawable/ic_album.xml @@ -2,10 +2,10 @@ + android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,16.5c-2.49,0 -4.5,-2.01 -4.5,-4.5S9.51,7.5 12,7.5s4.5,2.01 4.5,4.5 -2.01,4.5 -4.5,4.5zM12,11c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1z" /> diff --git a/app/src/main/res/drawable/ic_artist.xml b/app/src/main/res/drawable/ic_artist.xml index b3f197044..f6947d86f 100644 --- a/app/src/main/res/drawable/ic_artist.xml +++ b/app/src/main/res/drawable/ic_artist.xml @@ -2,7 +2,7 @@ + android:pathData="M10.85,12.65h2.3L12,9l-1.15,3.65zM20,8.69V4h-4.69L12,0.69 8.69,4H4v4.69L0.69,12 4,15.31V20h4.69L12,23.31 15.31,20H20v-4.69L23.31,12 20,8.69zM14.3,16l-0.7,-2h-3.2l-0.7,2H7.8L11,7h2l3.2,9h-1.9z" /> diff --git a/app/src/main/res/drawable/ic_back.xml b/app/src/main/res/drawable/ic_back.xml index 5b91babea..c9d2255e2 100644 --- a/app/src/main/res/drawable/ic_back.xml +++ b/app/src/main/res/drawable/ic_back.xml @@ -6,5 +6,5 @@ android:viewportHeight="24"> + android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" /> diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml index fe2e57ae2..346675f6c 100644 --- a/app/src/main/res/drawable/ic_check.xml +++ b/app/src/main/res/drawable/ic_check.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z" /> diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml index 5a1deecba..08e9d9348 100644 --- a/app/src/main/res/drawable/ic_close.xml +++ b/app/src/main/res/drawable/ic_close.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12 19,6.41z" /> diff --git a/app/src/main/res/drawable/ic_code.xml b/app/src/main/res/drawable/ic_code.xml index d3f127e82..6aa7f6418 100644 --- a/app/src/main/res/drawable/ic_code.xml +++ b/app/src/main/res/drawable/ic_code.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M9.4,16.6L4.8,12l4.6,-4.6L8,6l-6,6 6,6 1.4,-1.4zM14.6,16.6l4.6,-4.6 -4.6,-4.6L16,6l6,6 -6,6 -1.4,-1.4z" /> diff --git a/app/src/main/res/drawable/ic_night.xml b/app/src/main/res/drawable/ic_dark.xml similarity index 58% rename from app/src/main/res/drawable/ic_night.xml rename to app/src/main/res/drawable/ic_dark.xml index 834b1454b..e489c3028 100644 --- a/app/src/main/res/drawable/ic_night.xml +++ b/app/src/main/res/drawable/ic_dark.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9s9,-4.03 9,-9c0,-0.46 -0.04,-0.92 -0.1,-1.36c-0.98,1.37 -2.58,2.26 -4.4,2.26c-2.98,0 -5.4,-2.42 -5.4,-5.4c0,-1.81 0.89,-3.42 2.26,-4.4C12.92,3.04 12.46,3 12,3L12,3z" /> diff --git a/app/src/main/res/drawable/ic_day.xml b/app/src/main/res/drawable/ic_day.xml deleted file mode 100644 index cc246c4f8..000000000 --- a/app/src/main/res/drawable/ic_day.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_clear.xml b/app/src/main/res/drawable/ic_delete.xml similarity index 74% rename from app/src/main/res/drawable/ic_clear.xml rename to app/src/main/res/drawable/ic_delete.xml index cac8f9fe7..65fbc34ac 100644 --- a/app/src/main/res/drawable/ic_clear.xml +++ b/app/src/main/res/drawable/ic_delete.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M6,21h12L18,7L6,7v14zM8,9h8v10L8,19L8,9zM15.5,4l-1,-1h-5l-1,1L5,4v2h14L19,4h-3.5z" /> diff --git a/app/src/main/res/drawable/ic_down.xml b/app/src/main/res/drawable/ic_down.xml index b3335eec8..fed95d407 100644 --- a/app/src/main/res/drawable/ic_down.xml +++ b/app/src/main/res/drawable/ic_down.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6 -1.41,-1.41z" /> diff --git a/app/src/main/res/drawable/ic_exit.xml b/app/src/main/res/drawable/ic_exit.xml deleted file mode 100644 index f1609a84d..000000000 --- a/app/src/main/res/drawable/ic_exit.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_faq.xml b/app/src/main/res/drawable/ic_faq.xml index d82c40f82..3c1e859de 100644 --- a/app/src/main/res/drawable/ic_faq.xml +++ b/app/src/main/res/drawable/ic_faq.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z" /> diff --git a/app/src/main/res/drawable/ic_filter.xml b/app/src/main/res/drawable/ic_filter.xml index edb7b20f8..0a5524a78 100644 --- a/app/src/main/res/drawable/ic_filter.xml +++ b/app/src/main/res/drawable/ic_filter.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z" /> diff --git a/app/src/main/res/drawable/ic_genre.xml b/app/src/main/res/drawable/ic_genre.xml index a4b4e1be4..549022763 100644 --- a/app/src/main/res/drawable/ic_genre.xml +++ b/app/src/main/res/drawable/ic_genre.xml @@ -2,7 +2,7 @@ + android:pathData="M20,9H4v2h16V9zM4,15h16v-2H4v2z" /> diff --git a/app/src/main/res/drawable/ic_license.xml b/app/src/main/res/drawable/ic_license.xml index b704fc845..04a6ec0f4 100644 --- a/app/src/main/res/drawable/ic_license.xml +++ b/app/src/main/res/drawable/ic_license.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M4.01,2L4,22h16V8l-6,-6H4.01zM13,9V3.5L18.5,9H13z" /> diff --git a/app/src/main/res/drawable/ic_light.xml b/app/src/main/res/drawable/ic_light.xml new file mode 100644 index 000000000..18a3d9ca3 --- /dev/null +++ b/app/src/main/res/drawable/ic_light.xml @@ -0,0 +1,11 @@ + + + + diff --git a/app/src/main/res/drawable/ic_queue.xml b/app/src/main/res/drawable/ic_queue.xml index fe3d42c2b..dc3815e81 100644 --- a/app/src/main/res/drawable/ic_queue.xml +++ b/app/src/main/res/drawable/ic_queue.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M15,6H3v2h12V6zM15,10H3v2h12V10zM3,16h8v-2H3V16zM17,6v8.18C16.69,14.07 16.35,14 16,14c-1.66,0 -3,1.34 -3,3s1.34,3 3,3s3,-1.34 3,-3V8h3V6H17z" /> diff --git a/app/src/main/res/drawable/ic_remote_default_cover.xml b/app/src/main/res/drawable/ic_remote_default_cover.xml index e29fbfca0..a97938c73 100644 --- a/app/src/main/res/drawable/ic_remote_default_cover.xml +++ b/app/src/main/res/drawable/ic_remote_default_cover.xml @@ -13,8 +13,8 @@ a terrible API. --> + android:fillColor="@android:color/white" + android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,16.5c-2.49,0 -4.5,-2.01 -4.5,-4.5S9.51,7.5 12,7.5s4.5,2.01 4.5,4.5 -2.01,4.5 -4.5,4.5zM12,11c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1z" /> diff --git a/app/src/main/res/drawable/ic_remote_repeat_off.xml b/app/src/main/res/drawable/ic_remote_repeat_off.xml index 433c53d66..dbba9793c 100644 --- a/app/src/main/res/drawable/ic_remote_repeat_off.xml +++ b/app/src/main/res/drawable/ic_remote_repeat_off.xml @@ -6,6 +6,6 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:fillColor="@color/remote_translucent" + android:pathData="M7,7h10v3l4,-4 -4,-4v3L5,5v6h2L7,7zM17,17L7,17v-3l-4,4 4,4v-3h12v-6h-2v4z" /> diff --git a/app/src/main/res/drawable/ic_remote_shuffle_off.xml b/app/src/main/res/drawable/ic_remote_shuffle_off.xml index c51c1c77c..a73f2d564 100644 --- a/app/src/main/res/drawable/ic_remote_shuffle_off.xml +++ b/app/src/main/res/drawable/ic_remote_shuffle_off.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M10.59,9.17L5.41,4 4,5.41l5.17,5.17 1.42,-1.41zM14.5,4l2.04,2.04L4,18.59 5.41,20 17.96,7.46 20,9.5L20,4h-5.5zM14.83,13.41l-1.41,1.41 3.13,3.13L14.5,20L20,20v-5.5l-2.04,2.04 -3.13,-3.13z" /> diff --git a/app/src/main/res/drawable/ic_remote_shuffle_on.xml b/app/src/main/res/drawable/ic_remote_shuffle_on.xml index 89e1dbb46..4ec762e82 100644 --- a/app/src/main/res/drawable/ic_remote_shuffle_on.xml +++ b/app/src/main/res/drawable/ic_remote_shuffle_on.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M10.59,9.17L5.41,4 4,5.41l5.17,5.17 1.42,-1.41zM14.5,4l2.04,2.04L4,18.59 5.41,20 17.96,7.46 20,9.5L20,4h-5.5zM14.83,13.41l-1.41,1.41 3.13,3.13L14.5,20L20,20v-5.5l-2.04,2.04 -3.13,-3.13z" /> diff --git a/app/src/main/res/drawable/ic_repeat.xml b/app/src/main/res/drawable/ic_repeat.xml index 8b5153dae..2c74db552 100644 --- a/app/src/main/res/drawable/ic_repeat.xml +++ b/app/src/main/res/drawable/ic_repeat.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M7,7h10v3l4,-4 -4,-4v3L5,5v6h2L7,7zM17,17L7,17v-3l-4,4 4,4v-3h12v-6h-2v4z" /> diff --git a/app/src/main/res/drawable/ic_repeat_on.xml b/app/src/main/res/drawable/ic_repeat_on.xml index 81210d67a..6939531ad 100644 --- a/app/src/main/res/drawable/ic_repeat_on.xml +++ b/app/src/main/res/drawable/ic_repeat_on.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M7,7h10v3l4,-4 -4,-4v3L5,5v6h2L7,7zM17,17L7,17v-3l-4,4 4,4v-3h12v-6h-2v4z" /> diff --git a/app/src/main/res/drawable/ic_repeat_one.xml b/app/src/main/res/drawable/ic_repeat_one.xml index 65f97cc40..99adebd73 100644 --- a/app/src/main/res/drawable/ic_repeat_one.xml +++ b/app/src/main/res/drawable/ic_repeat_one.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M7,7h10v3l4,-4 -4,-4v3L5,5v6h2L7,7zM17,17L7,17v-3l-4,4 4,4v-3h12v-6h-2v4zM13,15L13,9h-1l-2,1v1h1.5v4L13,15z" /> diff --git a/app/src/main/res/drawable/ic_search.xml b/app/src/main/res/drawable/ic_search.xml index 6a61bbd5f..4f9300352 100644 --- a/app/src/main/res/drawable/ic_search.xml +++ b/app/src/main/res/drawable/ic_search.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z" /> diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml index c11703537..59a9f21e0 100644 --- a/app/src/main/res/drawable/ic_settings.xml +++ b/app/src/main/res/drawable/ic_settings.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M19.44,12.99l-0.01,0.02c0.04,-0.33 0.08,-0.67 0.08,-1.01 0,-0.34 -0.03,-0.66 -0.07,-0.99l0.01,0.02 2.44,-1.92 -2.43,-4.22 -2.87,1.16 0.01,0.01c-0.52,-0.4 -1.09,-0.74 -1.71,-1h0.01L14.44,2H9.57l-0.44,3.07h0.01c-0.62,0.26 -1.19,0.6 -1.71,1l0.01,-0.01 -2.88,-1.17 -2.44,4.22 2.44,1.92 0.01,-0.02c-0.04,0.33 -0.07,0.65 -0.07,0.99 0,0.34 0.03,0.68 0.08,1.01l-0.01,-0.02 -2.1,1.65 -0.33,0.26 2.43,4.2 2.88,-1.15 -0.02,-0.04c0.53,0.41 1.1,0.75 1.73,1.01h-0.03L9.58,22h4.85s0.03,-0.18 0.06,-0.42l0.38,-2.65h-0.01c0.62,-0.26 1.2,-0.6 1.73,-1.01l-0.02,0.04 2.88,1.15 2.43,-4.2s-0.14,-0.12 -0.33,-0.26l-2.11,-1.66zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z" /> diff --git a/app/src/main/res/drawable/ic_shuffle.xml b/app/src/main/res/drawable/ic_shuffle_state.xml similarity index 60% rename from app/src/main/res/drawable/ic_shuffle.xml rename to app/src/main/res/drawable/ic_shuffle_state.xml index a22ea2e59..95393c79f 100644 --- a/app/src/main/res/drawable/ic_shuffle.xml +++ b/app/src/main/res/drawable/ic_shuffle_state.xml @@ -7,5 +7,5 @@ android:viewportHeight="24"> + android:pathData="M10.59,9.17L5.41,4 4,5.41l5.17,5.17 1.42,-1.41zM14.5,4l2.04,2.04L4,18.59 5.41,20 17.96,7.46 20,9.5L20,4h-5.5zM14.83,13.41l-1.41,1.41 3.13,3.13L14.5,20L20,20v-5.5l-2.04,2.04 -3.13,-3.13z" /> diff --git a/app/src/main/res/drawable/ic_skip_next.xml b/app/src/main/res/drawable/ic_skip_next.xml index 09302166e..7435e7373 100644 --- a/app/src/main/res/drawable/ic_skip_next.xml +++ b/app/src/main/res/drawable/ic_skip_next.xml @@ -8,5 +8,5 @@ android:viewportHeight="24"> + android:pathData="M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z" /> diff --git a/app/src/main/res/drawable/ic_skip_prev.xml b/app/src/main/res/drawable/ic_skip_prev.xml index a8c6ee9cb..e6de14955 100644 --- a/app/src/main/res/drawable/ic_skip_prev.xml +++ b/app/src/main/res/drawable/ic_skip_prev.xml @@ -2,11 +2,10 @@ + android:pathData="M6,6h2v12L6,18L6,6zM9.5,12l8.5,6L18,6l-8.5,6z" /> diff --git a/app/src/main/res/drawable/ic_song.xml b/app/src/main/res/drawable/ic_song.xml index 25b9447f9..a2b91bf6c 100644 --- a/app/src/main/res/drawable/ic_song.xml +++ b/app/src/main/res/drawable/ic_song.xml @@ -2,7 +2,7 @@ + android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z" /> diff --git a/app/src/main/res/drawable/ic_time.xml b/app/src/main/res/drawable/ic_time.xml index 92309f099..f86012a96 100644 --- a/app/src/main/res/drawable/ic_time.xml +++ b/app/src/main/res/drawable/ic_time.xml @@ -2,13 +2,10 @@ - - + android:viewportHeight="24"> + diff --git a/app/src/main/res/layout-land/fragment_playback_panel.xml b/app/src/main/res/layout-land/fragment_playback_panel.xml index 62ab188f3..6fbfc8df2 100644 --- a/app/src/main/res/layout-land/fragment_playback_panel.xml +++ b/app/src/main/res/layout-land/fragment_playback_panel.xml @@ -91,7 +91,8 @@ app:layout_constraintEnd_toEndOf="@+id/playback_song_container" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" - app:thumbRadius="@dimen/slider_thumb_radius" /> + app:thumbRadius="@dimen/slider_thumb_radius" + app:trackColorInactive="@color/sel_track" /> + app:thumbRadius="@dimen/slider_thumb_radius" + app:trackColorInactive="@color/sel_track" /> + app:thumbRadius="@dimen/slider_thumb_radius" + app:trackColorInactive="@color/sel_track" /> \ No newline at end of file diff --git a/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml b/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml index bb930e126..890de52e3 100644 --- a/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml +++ b/app/src/main/res/layout-w600dp-land/fragment_playback_panel.xml @@ -37,7 +37,8 @@ app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/playback_cover" app:layout_constraintTop_toBottomOf="@+id/playback_toolbar" - app:layout_constraintVertical_chainStyle="packed"> + app:layout_constraintVertical_chainStyle="packed" + app:trackColorInactive="@color/sel_track"> diff --git a/app/src/main/res/layout/dialog_accent.xml b/app/src/main/res/layout/dialog_accent.xml index 832cbef6c..4734531ea 100644 --- a/app/src/main/res/layout/dialog_accent.xml +++ b/app/src/main/res/layout/dialog_accent.xml @@ -10,7 +10,7 @@ android:paddingTop="@dimen/spacing_medium" android:paddingEnd="@dimen/spacing_medium" android:paddingBottom="@dimen/spacing_small" - app:layoutManager=".ui.accent.AccentGridLayoutManager" + app:layoutManager="org.oxycblt.auxio.ui.accent.AccentGridLayoutManager" app:layout_constraintBottom_toTopOf="@+id/accent_cancel" app:layout_constraintTop_toBottomOf="@+id/accent_header" tools:itemCount="18" diff --git a/app/src/main/res/layout/dialog_excluded.xml b/app/src/main/res/layout/dialog_excluded.xml index 1062cd669..bc03c8687 100644 --- a/app/src/main/res/layout/dialog_excluded.xml +++ b/app/src/main/res/layout/dialog_excluded.xml @@ -22,8 +22,8 @@ android:id="@+id/excluded_empty" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="@dimen/spacing_medium" android:paddingStart="@dimen/spacing_medium" + android:paddingTop="@dimen/spacing_medium" android:paddingEnd="@dimen/spacing_medium" android:paddingBottom="@dimen/spacing_medium" android:text="@string/err_no_dirs" diff --git a/app/src/main/res/layout/dialog_pre_amp.xml b/app/src/main/res/layout/dialog_pre_amp.xml index 5b21fbb0d..d8bcb6486 100644 --- a/app/src/main/res/layout/dialog_pre_amp.xml +++ b/app/src/main/res/layout/dialog_pre_amp.xml @@ -35,6 +35,7 @@ app:layout_constraintTop_toBottomOf="@+id/with_tags_header" app:thumbRadius="@dimen/slider_thumb_radius" app:tickVisible="false" + app:trackColorInactive="@color/sel_track" tools:value="0.0" /> + android:layout_margin="@dimen/spacing_medium" + android:orientation="vertical"> + android:src="@drawable/ic_shuffle_state" /> diff --git a/app/src/main/res/layout/fragment_home_list.xml b/app/src/main/res/layout/fragment_home_list.xml index 07783545d..86de46553 100644 --- a/app/src/main/res/layout/fragment_home_list.xml +++ b/app/src/main/res/layout/fragment_home_list.xml @@ -2,8 +2,8 @@ diff --git a/app/src/main/res/layout/fragment_playback_panel.xml b/app/src/main/res/layout/fragment_playback_panel.xml index 1d5f3ccf6..c21326468 100644 --- a/app/src/main/res/layout/fragment_playback_panel.xml +++ b/app/src/main/res/layout/fragment_playback_panel.xml @@ -75,7 +75,8 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" - app:thumbRadius="@dimen/slider_thumb_radius" /> + app:thumbRadius="@dimen/slider_thumb_radius" + app:trackColorInactive="@color/sel_track" /> + android:layout_height="wrap_content" + android:padding="@dimen/spacing_medium"> + app:layout_constraintTop_toTopOf="parent" /> + android:src="@drawable/ic_shuffle_state" /> diff --git a/app/src/main/res/layout/widget_wide.xml b/app/src/main/res/layout/widget_wide.xml index 56bfca002..4a2242ca3 100644 --- a/app/src/main/res/layout/widget_wide.xml +++ b/app/src/main/res/layout/widget_wide.xml @@ -104,7 +104,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:contentDescription="@string/desc_shuffle" - android:src="@drawable/ic_shuffle" /> + android:src="@drawable/ic_shuffle_state" /> diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a65c80ea7..63835acba 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,6 +3,7 @@ #01fafafa #80000000 + #80ffffff #BC1714 #FFFFFF diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml index dcd8a0aae..e7318e88f 100644 --- a/app/src/main/res/xml/prefs_main.xml +++ b/app/src/main/res/xml/prefs_main.xml @@ -8,7 +8,7 @@ app:defaultValue="@integer/theme_auto" app:entries="@array/entries_theme" app:entryValues="@array/values_theme" - app:icon="@drawable/ic_day" + app:icon="@drawable/ic_light" app:iconSpaceReserved="false" app:isPreferenceVisible="@bool/enable_theme_settings" app:key="KEY_THEME2" @@ -95,12 +95,12 @@ app:title="@string/set_replay_gain" /> + app:summary="@string/set_pre_amp_desc" + app:title="@string/set_pre_amp" /> diff --git a/build.gradle b/build.gradle index 267729ba9..526b48e17 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' + classpath "com.android.tools.build:gradle:7.2.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigation_version" classpath "com.diffplug.spotless:spotless-plugin-gradle:6.3.0"