diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b9a0b8dc..42ee0b705 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # Changelog ## dev [v2.2.1 or v2.3.0] +#### What's Improved - Updated chinese translations [courtesy of cccClyde] +- Use body typography in correct places ## v2.2.0 #### What's New: diff --git a/app/src/main/java/org/oxycblt/auxio/music/Models.kt b/app/src/main/java/org/oxycblt/auxio/music/Models.kt index 80f27daf6..080bd584d 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/Models.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/Models.kt @@ -60,6 +60,8 @@ data class Song( override val name: String, /** The file name of this song, excluding the full path. */ val fileName: String, + /** The parent directories of this song. More or less the complement to [fileName]. */ + val dirs: String, /** The total duration of this song, in millis. */ val duration: Long, /** The track number of this song. */ diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt index e6088f2d2..058cc6d84 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt @@ -7,6 +7,7 @@ import android.provider.MediaStore import androidx.core.database.getStringOrNull import org.oxycblt.auxio.R import org.oxycblt.auxio.excluded.ExcludedDatabase +import org.oxycblt.auxio.util.logD import org.oxycblt.auxio.util.logE import java.lang.Exception @@ -124,7 +125,7 @@ class MusicLoader { args += "$path%" // Append % so that the selector properly detects children } - context.applicationContext.contentResolver.query( + context.contentResolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, arrayOf( MediaStore.Audio.AudioColumns._ID, @@ -137,6 +138,7 @@ class MusicLoader { MediaStore.Audio.AudioColumns.YEAR, MediaStore.Audio.AudioColumns.TRACK, MediaStore.Audio.AudioColumns.DURATION, + MediaStore.Audio.AudioColumns.DATA ), selector, args.toTypedArray(), null )?.use { cursor -> @@ -150,6 +152,7 @@ class MusicLoader { val yearIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.AudioColumns.YEAR) val trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.AudioColumns.TRACK) val durationIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.AudioColumns.DURATION) + val dataIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.AudioColumns.DATA) while (cursor.moveToNext()) { val id = cursor.getLong(idIndex) @@ -170,10 +173,19 @@ class MusicLoader { val track = cursor.getInt(trackIndex) val duration = cursor.getLong(durationIndex) + // More efficient to slice away DISPLAY_NAME from the full path then to + // grok the path components from DATA itself. + val dirs = cursor.getString(dataIndex).run { + substring(0 until lastIndexOfAny(listOf(fileName))) + } + + logD("SONG NAME: $title ALBUM: $album ARTIST: $artist ALBUM ARTIST: $albumArtist") + songs.add( Song( title, fileName, + dirs, duration, track, id, @@ -188,7 +200,8 @@ class MusicLoader { } songs = songs.distinctBy { - it.name to it.internalMediaStoreAlbumName to it.internalMediaStoreArtistName to it.internalMediaStoreAlbumArtistName to it.track to it.duration + it.name to it.internalMediaStoreAlbumName to it.internalMediaStoreArtistName to + it.internalMediaStoreAlbumArtistName to it.track to it.duration }.toMutableList() return songs @@ -223,6 +236,8 @@ class MusicLoader { ) val artistName = templateSong.internalGroupingArtistName + logD("ALBUM NAME: $albumName PREFERRED ARTIST: $artistName") + albums.add( Album( albumName, @@ -279,7 +294,7 @@ class MusicLoader { private fun readGenres(context: Context, songs: List): List { val genres = mutableListOf() - val genreCursor = context.applicationContext.contentResolver.query( + val genreCursor = context.contentResolver.query( MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI, arrayOf( MediaStore.Audio.Genres._ID, @@ -332,7 +347,7 @@ class MusicLoader { val genreSongs = mutableListOf() // Don't even bother blacklisting here as useless iterations are less expensive than IO - val songCursor = context.applicationContext.contentResolver.query( + val songCursor = context.contentResolver.query( MediaStore.Audio.Genres.Members.getContentUri("external", genreId), arrayOf(MediaStore.Audio.Genres.Members._ID), null, null, null diff --git a/app/src/main/res/layout/widget_default.xml b/app/src/main/res/layout/widget_default.xml index 255cc28b3..1a3729aaf 100644 --- a/app/src/main/res/layout/widget_default.xml +++ b/app/src/main/res/layout/widget_default.xml @@ -19,12 +19,12 @@ diff --git a/app/src/main/res/values/styles_android.xml b/app/src/main/res/values/styles_android.xml index 3bd708c22..436dd4309 100644 --- a/app/src/main/res/values/styles_android.xml +++ b/app/src/main/res/values/styles_android.xml @@ -22,7 +22,7 @@ @@ -40,16 +40,14 @@ diff --git a/app/src/main/res/values/styles_ui.xml b/app/src/main/res/values/styles_ui.xml index e738fd67a..c6042f9da 100644 --- a/app/src/main/res/values/styles_ui.xml +++ b/app/src/main/res/values/styles_ui.xml @@ -85,7 +85,7 @@ @@ -105,7 +105,7 @@ end 1 ?android:attr/textColorSecondary - @style/TextAppearance.Auxio.TitleMedium + @style/TextAppearance.Auxio.BodyLarge \ No newline at end of file