diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7c9542770..ca73fa663 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,9 @@
## dev [v2.2.2 or 2.3.0]
+#### What's New
+- New spanish translations and metadata [courtesy of n-berenice]
+
#### What's Improved
- Rounded images are more nuanced
- Shuffle and Repeat mode buttons now have more contrast when they are turned on
diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
index 7bcc57ce3..a0d47383b 100644
--- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
+++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
@@ -42,6 +42,7 @@ import org.oxycblt.auxio.util.systemBarInsetsCompat
* The single [AppCompatActivity] for Auxio.
* TODO: Add a new view for crashes with a stack trace
* TODO: Custom language support
+ * TODO: Rework menus [perhaps add multi-select]
*/
class MainActivity : AppCompatActivity() {
private val playbackModel: PlaybackViewModel by viewModels()
@@ -81,7 +82,6 @@ class MainActivity : AppCompatActivity() {
if (action == Intent.ACTION_VIEW && !isConsumed) {
// Mark the intent as used so this does not fire again
intent.putExtra(KEY_INTENT_USED, true)
-
intent.data?.let { fileUri ->
playbackModel.playWithUri(fileUri, this)
}
diff --git a/app/src/main/java/org/oxycblt/auxio/coil/RoundableImageView.kt b/app/src/main/java/org/oxycblt/auxio/coil/RoundableImageView.kt
index d122d73ab..49ff7f46f 100644
--- a/app/src/main/java/org/oxycblt/auxio/coil/RoundableImageView.kt
+++ b/app/src/main/java/org/oxycblt/auxio/coil/RoundableImageView.kt
@@ -39,7 +39,9 @@ class RoundableImageView @JvmOverloads constructor(
// dimensions of the image, which will result in inconsistent corners across different
// album covers unless we resize all covers to be the same size. clipToOutline is both
// cheaper and more elegant.
- val settingsManager = SettingsManager.getInstance()
- clipToOutline = settingsManager.roundCovers
+ if (!isInEditMode) {
+ val settingsManager = SettingsManager.getInstance()
+ clipToOutline = settingsManager.roundCovers
+ }
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt
index 954215565..9aaf16b6f 100644
--- a/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt
+++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailAppBarLayout.kt
@@ -38,7 +38,6 @@ class DetailAppBarLayout @JvmOverloads constructor(
override fun onAttachedToWindow() {
super.onAttachedToWindow()
-
(layoutParams as CoordinatorLayout.LayoutParams).behavior = Behavior(context)
}
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 1e3f80386..d23b2d2c6 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/Models.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/Models.kt
@@ -58,7 +58,7 @@ sealed class MusicParent : Music() {
}
/**
- * The data object for a song. Inherits [Item].
+ * The data object for a song.
*/
data class Song(
override val name: String,
@@ -147,7 +147,7 @@ data class Song(
}
/**
- * The data object for an album. Inherits [MusicParent].
+ * The data object for an album.
*/
data class Album(
override val name: String,
@@ -220,7 +220,7 @@ data class Artist(
}
/**
- * The data object for a genre. Inherits [MusicParent]
+ * The data object for a genre.
*/
data class Genre(
override val name: String,
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 286cb13b1..c2a298c68 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/MusicLoader.kt
@@ -8,7 +8,6 @@ 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
/**
* This class acts as the base for most the black magic required to get a remotely sensible music
@@ -94,8 +93,12 @@ class MusicLoader {
song.internalIsMissingArtist ||
song.internalIsMissingGenre
) {
- logE("Found malformed song: ${song.name}")
- throw IllegalStateException()
+ throw IllegalStateException(
+ "Found malformed song: ${song.name} [" +
+ "album: ${!song.internalIsMissingAlbum} " +
+ "artist: ${!song.internalIsMissingArtist} " +
+ "genre: ${!song.internalIsMissingGenre}]"
+ )
}
}
@@ -126,6 +129,7 @@ class MusicLoader {
args += "$path%" // Append % so that the selector properly detects children
}
+ // TODO: Figure out the semantics of the track field to prevent odd 4-digit numbers
context.applicationContext.contentResolver.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
arrayOf(
diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt
index dab47ed9b..44dc718d7 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/MusicUtils.kt
@@ -131,7 +131,11 @@ fun TextView.bindSongInfo(song: Song?) {
return
}
- text = song.resolvedArtistName
+ text = context.getString(
+ R.string.fmt_two,
+ song.resolvedArtistName,
+ song.resolvedAlbumName
+ )
}
@BindingAdapter("albumInfo")
@@ -141,7 +145,11 @@ fun TextView.bindAlbumInfo(album: Album?) {
return
}
- text = album.resolvedArtistName
+ text = context.getString(
+ R.string.fmt_two,
+ album.resolvedArtistName,
+ context.getPluralSafe(R.plurals.fmt_song_count, album.songs.size)
+ )
}
@BindingAdapter("artistInfo")
@@ -152,7 +160,7 @@ fun TextView.bindArtistInfo(artist: Artist?) {
}
text = context.getString(
- R.string.fmt_counts,
+ R.string.fmt_two,
context.getPluralSafe(R.plurals.fmt_album_count, artist.albums.size),
context.getPluralSafe(R.plurals.fmt_song_count, artist.songs.size)
)
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt
index f5d984841..b458553ac 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackLayout.kt
@@ -48,6 +48,7 @@ import kotlin.math.min
* or extendable. You have been warned.
*
* @author OxygenCobalt (With help from Umano and Hai Zhang)
+ * TODO: Find a better way to handle PlaybackFragment in general (navigation, creation)
*/
class PlaybackLayout @JvmOverloads constructor(
context: Context,
@@ -109,6 +110,8 @@ class PlaybackLayout @JvmOverloads constructor(
}
init {
+ setWillNotDraw(false)
+
// Set up our playback views. Doing this allows us to abstract away the implementation
// of these views from the user of this layout [MainFragment].
playbackContainerView = FrameLayout(context).apply {
diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt
index 23b7c3a16..4380eaba8 100644
--- a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt
+++ b/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt
@@ -93,6 +93,8 @@ class AudioReactor(
/**
* Updates the rough volume adjustment for [Metadata] with ReplayGain tags.
* This is based off Vanilla Music's implementation.
+ * TODO: Add ReplayGain pre-amp
+ * TODO: Add positive ReplayGain values
*/
fun applyReplayGain(metadata: Metadata?) {
if (metadata == null) {
@@ -130,6 +132,7 @@ class AudioReactor(
playbackManager.song?.album == playbackManager.parent
}
}
+
val gain = parseReplayGain(metadata)
val adjust = if (gain != null) {
@@ -147,8 +150,6 @@ class AudioReactor(
// Final adjustment along the volume curve.
// Ensure this is clamped to 0 or 1 so that it can be used as a volume.
- // While positive ReplayGain values *could* be theoretically added, it's such
- // a niche use-case that to be worth the effort required. Maybe if someone requests it.
volume = MathUtils.clamp((10f.pow((adjust / 20f))), 0f, 1f)
}
@@ -180,7 +181,7 @@ class AudioReactor(
}
if (key in REPLAY_GAIN_TAGS) {
- tags.add(GainTag(key!!, parseReplayGainFloat(value)))
+ tags.add(GainTag(requireNotNull(key), parseReplayGainFloat(value)))
}
}
diff --git a/app/src/main/res/layout/item_song.xml b/app/src/main/res/layout/item_song.xml
index 22429934e..c8a42bde4 100644
--- a/app/src/main/res/layout/item_song.xml
+++ b/app/src/main/res/layout/item_song.xml
@@ -30,9 +30,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@{song.name}"
- android:layout_marginEnd="@dimen/spacing_small"
app:layout_constraintBottom_toTopOf="@+id/song_info"
- app:layout_constraintEnd_toStartOf="@+id/song_duration"
app:layout_constraintStart_toEndOf="@+id/album_cover"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
@@ -44,26 +42,9 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
app:songInfo="@{song}"
- android:layout_marginEnd="@dimen/spacing_small"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/song_duration"
app:layout_constraintStart_toEndOf="@+id/album_cover"
app:layout_constraintTop_toBottomOf="@+id/song_name"
tools:text="Artist / Album" />
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 85ce25122..4470ddbd5 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -4,7 +4,7 @@
Auxio
+ %1$s • %2$s
%1$s • %2$s • %3$s
- %1$s, %2$s
%d
\ No newline at end of file