diff --git a/CHANGELOG.md b/CHANGELOG.md index ee6730fd4..df41bdb4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Fixed issue where items would not highlight properly in the detail UI #### Dev/Meta +- New translations [yurical -> Korean, qwerty287 -> German] - Switched from `LiveData` to `StateFlow` - Use `notifyItemChanged` instead of directly mutating `ViewHolder` instances. diff --git a/app/build.gradle b/app/build.gradle index 5919bf7ee..b89b5c93c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,7 +68,6 @@ dependencies { // UI implementation "androidx.recyclerview:recyclerview:1.2.1" implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation "androidx.dynamicanimation:dynamicanimation:1.0.0" implementation "androidx.viewpager2:viewpager2:1.1.0-beta01" // Lifecycle diff --git a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt index 44ed44e4c..e218d54e3 100644 --- a/app/src/main/java/org/oxycblt/auxio/MainFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/MainFragment.kt @@ -25,7 +25,6 @@ import androidx.activity.OnBackPressedCallback import androidx.fragment.app.activityViewModels import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController -import kotlinx.coroutines.flow.collect import org.oxycblt.auxio.databinding.FragmentMainBinding import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.MusicViewModel diff --git a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt index 20c70acce..e6f8c8179 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/ArtistDetailFragment.kt @@ -22,7 +22,6 @@ import android.view.MenuItem import android.view.View import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs -import kotlinx.coroutines.launch import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentDetailBinding import org.oxycblt.auxio.detail.recycler.ArtistDetailAdapter @@ -136,8 +135,6 @@ class ArtistDetailFragment : DetailFragment(), DetailAdapter.Listener { } private fun updatePlayback(song: Song?, parent: MusicParent?) { - val binding = requireBinding() - if (parent is Artist && parent.id == unlikelyToBeNull(detailModel.currentArtist.value).id) { detailAdapter.highlightSong(song) } else { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt index 851d71b58..6c8c911a4 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/GenreDetailFragment.kt @@ -126,11 +126,10 @@ class GenreDetailFragment : DetailFragment(), DetailAdapter.Listener { } private fun updatePlayback(song: Song?, parent: MusicParent?) { - val binding = requireBinding() if (parent is Genre && parent.id == unlikelyToBeNull(detailModel.currentGenre.value).id) { detailAdapter.highlightSong(song) } else { - // Clear the ViewHolders if the mode isn't ALL_SONGS + // Clear any highlighting if playback is not occuring from this item. detailAdapter.highlightSong(null) } } 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 83c9750bb..c11dea1d5 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 @@ -228,9 +228,7 @@ private class AlbumSongViewHolder private constructor(private val binding: ItemA } override fun setHighlighted(isHighlighted: Boolean) { - binding.songName.isActivated = isHighlighted - binding.songTrack.isActivated = isHighlighted - binding.songTrackBg.isActivated = isHighlighted + binding.root.isActivated = isHighlighted } companion object { diff --git a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt index 9709a6894..a2d0033b2 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/recycler/ArtistDetailAdapter.kt @@ -230,7 +230,7 @@ private constructor( } override fun setHighlighted(isHighlighted: Boolean) { - binding.songName.isActivated = isHighlighted + binding.root.isActivated = isHighlighted } companion object { diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt index b4002c946..f801fd30b 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -35,7 +35,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2 import com.google.android.material.tabs.TabLayoutMediator -import kotlinx.coroutines.launch import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeBinding import org.oxycblt.auxio.home.list.AlbumListFragment diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt index 09e31f2ae..2249c1bee 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/AlbumListFragment.kt @@ -19,7 +19,6 @@ package org.oxycblt.auxio.home.list import android.os.Bundle import android.view.View -import kotlinx.coroutines.launch import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding import org.oxycblt.auxio.music.Album diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt index ebb0df770..d306b64a3 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/ArtistListFragment.kt @@ -19,7 +19,6 @@ package org.oxycblt.auxio.home.list import android.os.Bundle import android.view.View -import kotlinx.coroutines.launch import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding import org.oxycblt.auxio.music.Artist diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt index 4f47c53fd..12e439e3a 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/GenreListFragment.kt @@ -19,7 +19,6 @@ package org.oxycblt.auxio.home.list import android.os.Bundle import android.view.View -import kotlinx.coroutines.launch import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding import org.oxycblt.auxio.music.Genre diff --git a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt index 0d5df2b79..2d358446c 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/list/SongListFragment.kt @@ -19,7 +19,6 @@ package org.oxycblt.auxio.home.list import android.os.Bundle import android.view.View -import kotlinx.coroutines.launch import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentHomeListBinding import org.oxycblt.auxio.music.Song diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaButtonReceiver.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaButtonReceiver.kt index 04892ef9f..5fa05b885 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaButtonReceiver.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaButtonReceiver.kt @@ -37,7 +37,7 @@ class MediaButtonReceiver : BroadcastReceiver() { val playbackManager = PlaybackStateManager.getInstance() if (playbackManager.song != null) { // We have a song, so we can assume that the service will start a foreground state. - // At least, I hope + // At least, I hope. intent.component = ComponentName(context, PlaybackService::class.java) ContextCompat.startForegroundService(context, intent) } diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt index 2c1aec0a5..6abfbfe47 100644 --- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt @@ -30,7 +30,6 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController -import kotlinx.coroutines.launch import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentSearchBinding import org.oxycblt.auxio.music.Album 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 b24bb7948..fb8c1f2ab 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt @@ -37,7 +37,7 @@ import org.oxycblt.auxio.playback.replaygain.PreAmpCustomizeDialog import org.oxycblt.auxio.playback.replaygain.ReplayGainMode import org.oxycblt.auxio.settings.pref.IntListPreference import org.oxycblt.auxio.settings.pref.IntListPreferenceDialog -import org.oxycblt.auxio.ui.accent.AccentCustomizeDialog +import org.oxycblt.auxio.ui.accent.AccentDialog import org.oxycblt.auxio.util.hardRestart import org.oxycblt.auxio.util.isNight import org.oxycblt.auxio.util.logD @@ -135,8 +135,7 @@ class SettingsListFragment : PreferenceFragmentCompat() { SettingsManager.KEY_ACCENT -> { onPreferenceClickListener = Preference.OnPreferenceClickListener { - AccentCustomizeDialog() - .show(childFragmentManager, AccentCustomizeDialog.TAG) + AccentDialog().show(childFragmentManager, AccentDialog.TAG) true } diff --git a/app/src/main/java/org/oxycblt/auxio/ui/BottomSheetLayout.kt b/app/src/main/java/org/oxycblt/auxio/ui/BottomSheetLayout.kt index 4bb7ba45b..bbb2d9f2f 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/BottomSheetLayout.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/BottomSheetLayout.kt @@ -73,6 +73,8 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat * extendable. You have been warned. * * @author OxygenCobalt (With help from Umano and Hai Zhang) + * + * TODO: Implement rounded corners on the bar (when rounded covers is enabled) */ class BottomSheetLayout @JvmOverloads diff --git a/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt b/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt index dc49a3320..315802d87 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/RecyclerFramework.kt @@ -63,8 +63,6 @@ private typealias AnyCreator = BindingViewHolder.Creator(private val listener: L) : RecyclerView.Adapter() { 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 30bdc9af6..4641838b9 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/StyledImageView.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/StyledImageView.kt @@ -49,6 +49,8 @@ import org.oxycblt.auxio.util.getDrawableSafe * Default behavior includes the addition of a tonal background, automatic sizing of icons to half * of the view size, and corner radius application depending on user preference. * @author OxygenCobalt + * + * TODO: Add an activation indicator to this view too */ class StyledImageView @JvmOverloads diff --git a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentDialog.kt similarity index 96% rename from app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt rename to app/src/main/java/org/oxycblt/auxio/ui/accent/AccentDialog.kt index 89e31d73d..1e9826c6c 100644 --- a/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentCustomizeDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/ui/accent/AccentDialog.kt @@ -32,8 +32,7 @@ import org.oxycblt.auxio.util.unlikelyToBeNull * Dialog responsible for showing the list of accents to select. * @author OxygenCobalt */ -class AccentCustomizeDialog : - ViewBindingDialogFragment(), AccentAdapter.Listener { +class AccentDialog : ViewBindingDialogFragment(), AccentAdapter.Listener { private val settingsManager = SettingsManager.getInstance() private var accentAdapter = AccentAdapter(this) diff --git a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt index ec11f8a5b..24cdea4eb 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt @@ -39,7 +39,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch import org.oxycblt.auxio.R @@ -170,9 +169,9 @@ fun Fragment.launch( } /** - * Combines the called flow with the given flow and then collects them both into [block]. - * This is a bit of a dumb hack with [combine], as when we have to combine flows, we often - * just want to call the same block with both functions, and not do any transformations. + * Combines the called flow with the given flow and then collects them both into [block]. This is a + * bit of a dumb hack with [combine], as when we have to combine flows, we often just want to call + * the same block with both functions, and not do any transformations. */ suspend fun Flow.collectWith(other: Flow, block: suspend (T1, T2) -> Unit) { combine(this, other) { a, b -> a to b }.collect { block(it.first, it.second) } diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt index 8119943b9..af03679b6 100644 --- a/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/widgets/WidgetComponent.kt @@ -23,7 +23,6 @@ import android.os.Build import coil.request.ImageRequest import coil.size.Size import coil.transform.RoundedCornersTransformation -import kotlin.math.min import org.oxycblt.auxio.image.BitmapProvider import org.oxycblt.auxio.image.SquareFrameTransform import org.oxycblt.auxio.music.MusicParent @@ -103,7 +102,9 @@ class WidgetComponent(private val context: Context) : .toFloat())) // The output of RoundedCornersTransformation is dimension-dependent, // so scale up the image to the screen size to ensure consistent radii. - .size(min(metrics.widthPixels, metrics.heightPixels)) + // Make sure we stop at 1024, so we don't accidentally make a massive + // bitmap on very large screens. + .size(minOf(metrics.widthPixels, metrics.heightPixels, 1024)) } else { // Note: Explicitly use the "original" size as without it the scaling logic // in coil breaks down and results in an error.