diff --git a/CHANGELOG.md b/CHANGELOG.md index 933cb04ed..24ae76407 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,11 +12,13 @@ - Fixed bug where music would be incorrectly reloaded on a hot restart - Fixed issue where the album/artist/genre would not be correctly restored - Fixed issue where items would not highlight properly in the detail UI +- Fixed hypothetical issue where widget would cause an OOM on large devices #### Dev/Meta - New translations [yurical -> Korean, qwerty287 -> German] - Switched from `LiveData` to `StateFlow` - Use `notifyItemChanged` instead of directly mutating `ViewHolder` instances. +- Added highly experimental ExoPlayer metadata backend (not enabled in-app) ## v2.3.0 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 3bda40104..74d8f385e 100644 --- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt @@ -321,6 +321,7 @@ class HomeFragment : ViewBindingFragment(), Toolbar.OnMenuI } private fun handleLoadEvent(binding: FragmentHomeBinding, event: MusicStore.LoadState?) { + binding.homeFab.hide() binding.homePager.visibility = View.INVISIBLE binding.homeLoadingContainer.visibility = View.VISIBLE binding.homeLoadingProgress.visibility = View.VISIBLE diff --git a/app/src/main/java/org/oxycblt/auxio/image/Components.kt b/app/src/main/java/org/oxycblt/auxio/image/Components.kt index cb7d83cc7..e739b3f00 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/Components.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/Components.kt @@ -110,7 +110,7 @@ private constructor( private val genre: Genre, ) : BaseFetcher() { override suspend fun fetch(): FetchResult? { - // Don't sort here to preserve compatibility with previous versions of this image. + // Don't sort here to preserve compatibility with previous versions of this images val albums = genre.songs.groupBy { it.album }.keys val results = albums.mapAtMost(4) { album -> fetchArt(context, album) } return createMosaic(context, results, size) 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 03dd92bc8..ff223cf2a 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt @@ -25,7 +25,6 @@ import android.provider.OpenableColumns import androidx.core.content.ContextCompat import java.lang.Exception import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import org.oxycblt.auxio.music.indexer.Indexer import org.oxycblt.auxio.music.indexer.useQuery diff --git a/app/src/main/java/org/oxycblt/auxio/music/indexer/ExoPlayerBackend.kt b/app/src/main/java/org/oxycblt/auxio/music/indexer/ExoPlayerBackend.kt index 4abfcac4e..197998fca 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/indexer/ExoPlayerBackend.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/indexer/ExoPlayerBackend.kt @@ -32,6 +32,7 @@ import java.util.concurrent.Executors import java.util.concurrent.Future import org.oxycblt.auxio.music.MusicStore import org.oxycblt.auxio.music.Song +import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logW /** @@ -113,9 +114,12 @@ class ExoPlayerBackend(private val inner: MediaStoreBackend) : Indexer.Backend { private val onComplete: (Song) -> Unit, ) : FutureCallback { override fun onSuccess(result: TrackGroupArray) { - val metadata = result[0].getFormat(0).metadata - if (metadata != null) { - completeAudio(audio, metadata) + val metadata = result[0].getFormat(0) + + logD("${metadata.sampleMimeType} ${metadata.averageBitrate} ${metadata.sampleRate}") + + if (metadata.metadata != null) { + completeAudio(audio, metadata.metadata!!) } else { logW("No metadata was found for ${audio.title}") } @@ -131,10 +135,6 @@ class ExoPlayerBackend(private val inner: MediaStoreBackend) : Indexer.Backend { } private fun completeAudio(audio: MediaStoreBackend.Audio, metadata: Metadata) { - if (metadata.length() == 0) { - return - } - // ExoPlayer only exposes ID3v2 and Vorbis metadata, which constitutes the vast majority // of audio formats. Some formats (like FLAC) can contain both ID3v2 and vorbis tags, but // this isn't too big of a deal, as we generally let the "source of truth" for metadata diff --git a/app/src/main/java/org/oxycblt/auxio/music/indexer/Indexer.kt b/app/src/main/java/org/oxycblt/auxio/music/indexer/Indexer.kt index a78e80179..28b532989 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/indexer/Indexer.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/indexer/Indexer.kt @@ -54,14 +54,6 @@ object Indexer { else -> Api21MediaStoreBackend() } - // Disabled until direct parsing is fully capable of integration into Auxio's - // architecture. - // val backend = if (settingsManager.useQualityMetadata) { - // ExoPlayerBackend(mediaStoreBackend) - // } else { - // mediaStoreBackend - // } - val songs = buildSongs(context, mediaStoreBackend, callback) if (songs.isEmpty()) { return null @@ -71,6 +63,7 @@ object Indexer { val albums = buildAlbums(songs) val artists = buildArtists(albums) + val genres = buildGenres(songs) // Sanity check: Ensure that all songs are linked up to albums/artists/genres. diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot7.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot7.png index 616bc683d..5114bb008 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/shot7.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/shot7.png differ