diff --git a/README.md b/README.md
index d0346a8f2..9ad42ddf1 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,14 @@
Auxio
A simple, rational music player for android.
+
+
+
-
+
-
+
diff --git a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
index 5651b8f43..05fdf113a 100644
--- a/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
+++ b/app/src/main/java/org/oxycblt/auxio/MainActivity.kt
@@ -83,6 +83,10 @@ class MainActivity : AppCompatActivity() {
}
if (intent.getBooleanExtra(KEY_INTENT_USED, false)) {
+ // Don't commit the action, but also return that the intent was applied.
+ // This is because onStart can run multiple times, and thus we really don't
+ // want to return false and override the original delayed action with a
+ // RestoreState action.
return true
}
@@ -110,8 +114,6 @@ class MainActivity : AppCompatActivity() {
// the point where most phones should have an automatic option for light/dark theming.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
AppCompatDelegate.setDefaultNightMode(settings.theme)
- } else {
- AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
}
// The black theme has a completely separate set of styles since style attributes cannot
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 96801d068..a0c02bb5d 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
@@ -23,7 +23,6 @@ import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentHomeListBinding
import org.oxycblt.auxio.music.Album
import org.oxycblt.auxio.music.Music
-import org.oxycblt.auxio.music.resolveYear
import org.oxycblt.auxio.ui.DisplayMode
import org.oxycblt.auxio.ui.Sort
import org.oxycblt.auxio.ui.recycler.AlbumViewHolder
diff --git a/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt b/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt
index f132f76cf..225113286 100644
--- a/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt
+++ b/app/src/main/java/org/oxycblt/auxio/image/BaseFetcher.kt
@@ -151,8 +151,8 @@ abstract class BaseFetcher : Fetcher {
return null
}
- // The metadata extraction process of ExoPlayer is normalized into a superclass.
- // That means we have to iterate through and find the cover art ourselves.
+ // The metadata extraction process of ExoPlayer results in a dump of all metadata
+ // it found, which must be iterated through.
val metadata = tracks[0].getFormat(0).metadata
if (metadata == null || metadata.length() == 0) {
diff --git a/app/src/main/java/org/oxycblt/auxio/music/Music.kt b/app/src/main/java/org/oxycblt/auxio/music/Music.kt
index fee1bf31c..a0c174ae1 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/Music.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/Music.kt
@@ -502,11 +502,7 @@ sealed class ReleaseType {
// it isn't. There are technically two other types, but those are unrelated to music
// and thus we don't support them.
return when {
- // Album (+ Other and Broadcast, which don't have meaning in Auxio) correspond to
- // Album.
- primary.equals("album", true) ||
- primary.equals("other", true) ||
- primary.equals("broadcast", true) -> types.parseSecondaryTypes(1) { Album(it) }
+ primary.equals("album", true) -> types.parseSecondaryTypes(1) { Album(it) }
primary.equals("ep", true) -> types.parseSecondaryTypes(1) { EP(it) }
primary.equals("single", true) -> types.parseSecondaryTypes(1) { Single(it) }
else -> types.parseSecondaryTypes(0) { Album(it) }
diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt
index a3e810e78..835125104 100644
--- a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt
+++ b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt
@@ -141,7 +141,9 @@ class SearchViewModel(application: Application) :
private fun List.filterSongsBy(value: String) =
baseFilterBy(value) {
- it.rawSortName?.contains(value) == true || it.path.name.contains(value)
+ logD(it.rawSortName)
+ it.rawSortName?.contains(value, ignoreCase = true) == true ||
+ it.path.name.contains(value)
}
private fun List.filterAlbumsBy(value: String) =
diff --git a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt
index 230755520..196bb050e 100644
--- a/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt
+++ b/app/src/main/java/org/oxycblt/auxio/widgets/Forms.kt
@@ -185,8 +185,6 @@ private fun RemoteViews.applyFullControls(
R.id.widget_shuffle,
context.newBroadcastPendingIntent(PlaybackService.ACTION_INVERT_SHUFFLE))
- // Like notifications, use the remote variants of icons since we really don't want to hack
- // indicators.
val shuffleRes =
when {
state.isShuffled -> R.drawable.ic_shuffle_on_24
diff --git a/app/src/main/res/layout/view_preference_switch.xml b/app/src/main/res/layout/view_preference_switch.xml
index f7aa6b526..10733b786 100644
--- a/app/src/main/res/layout/view_preference_switch.xml
+++ b/app/src/main/res/layout/view_preference_switch.xml
@@ -1,6 +1,5 @@
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cfb1eb776..793dd025a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -7,7 +7,9 @@
View and control music playback
+
Retry
+
Grant
Loading music
Loading your music library…
@@ -19,26 +21,39 @@
Albums
Album
+
Live album
+
Remix album
+
EPs
+
EP
+
Live EP
+
Remix EP
+
Singles
+
Single
+
Live single
+
Remix single
+
Compilations
+
Compilation
Soundtracks
Soundtrack
Mixtapes
Mixtape
+
Live
Remixes
@@ -77,7 +92,9 @@
Song properties
File name
Parent path
+
Format
+
Size
Bit rate
Sample rate
@@ -109,6 +126,7 @@
Library statistics
+
Settings
Appearance
Theme
@@ -169,9 +187,12 @@
May wipe playback state
Music folders
Manage where music should be loaded from
+
Mode
+
Exclude
Music will not be loaded from the folders you add.
+
Include
Music will only be loaded from the folders you add.
Ignore MediaStore tags
@@ -184,6 +205,7 @@
Music loading failed
Auxio needs permission to read your music library
No app can open this link
+
No Folders
This folder is not supported
Auxio does not support this window size
@@ -191,9 +213,12 @@
No state could be restored
+
+
Search your library…
+
Track %d
Play or Pause
@@ -207,15 +232,16 @@
Move this queue song
Move this tab
Clear search query
- Remove directory
+ Remove folder
Auxio icon
Album cover
- Album Cover for %s
- Artist Image for %s
- Genre Image for %s
+ Album cover for %s
+ Artist image for %s
+ Genre image for %s
+
Unknown Artist
Unknown Genre
No Date
@@ -228,13 +254,14 @@
Artist Name
-
+
+
MPEG-1 Audio
-
+
MPEG-4 Audio
-
+
Ogg Audio
-
+
Matroska Audio
Advanced Audio Coding (AAC)
@@ -242,6 +269,7 @@
Free Lossless Audio Codec (FLAC)
+
Red
Pink
Purple
@@ -262,13 +290,15 @@
Dynamic
+
+
Disc %d
+%.1f dB
-%.1f dB
-
+
%d kbps
%d Hz
diff --git a/info/FAQ.md b/info/FAQ.md
index 02d37fe37..d7a79bb88 100644
--- a/info/FAQ.md
+++ b/info/FAQ.md
@@ -21,24 +21,24 @@ of Android through the use of the ExoPlayer FLAC extension.
#### Auxio doesn't load my music correctly!
This depends on the context:
-1. If "Ignore MediaStore Tags" is enabled, please file an issue with your particular issue.
+1. If "Ignore MediaStore Tags" is enabled, please create a bug report.
2. If "Ignore MediaStore Tags" is not enabled, please check below to make sure your issue is not already
-awknowledged before reporting an issue.
-
-Moreso, if the issue encountered does not appear in other apps like Music Player GO, Phonograph,
-Vinyl, Retro Music, VLC, or Vanilla, then it should be reported.
+awknowledged before reporting a bug.
+ - Moreso, if the issue encountered does not appear in other apps like Music Player GO, Phonograph,
+or Retro Music then it should definitely be reported, as it is a logic bug on Auxio's part.
***Known unfixable music loading issues***
These are a list of unfixable music loading issues that can only be fixed by enabling "Ignore MediaStore Tags":
-**My FLAC/OGG/OPUS files don't have dates:** Android does not read the `DATE` tag from vorbis files. It reads the `YEAR` tag. This is because android's metadata parser is
-stuck in 2008.
+**My FLAC/OGG/OPUS/MP3 files don't have dates:** Android does not read the `DATE` tag from vorbis files. It reads the `YEAR` tag.
+Similarly, Android does not read ID3v2.4's `TDRC` and actually reads `TYER` regardless of the version. This is because android's
+metadata parser is stuck in 2008.
**Some files with accented/symbolic characters have corrupted tags:** When Android extracts metadata, at some point it tries to convert the bytes it extracted to a
java string, which apparently involves detecting the encoding of the data dynamically and then converting it to Java's Unicode dialect. Of course, trying to detect
codings on the fly like that is a [terrible idea](https://en.wikipedia.org/wiki/Bush_hid_the_facts), and more often than not it results in UTF-8 tags (Seen on
-FLAC/OGG/OPUS files most often) being corrupted.
+FLAC/OGG/OPUS files most often) being corrupted. It also affects MP3 files with ID3v2.4.0 tags that use the UTF-8 encoding in text-based tags.
**I have a large library and Auxio takes really long to load it:** This is expected since reading from the audio database takes awhile, especially with libraries
containing 10k songs or more.
@@ -98,8 +98,8 @@ fully may take some time.
#### Why is playback distorted when I play my FLAC/WAV files?
ExoPlayer, while powerful, does add some overhead when playing exceptionally high-quality files (2000+ KB/s bitrate,
90000+ Hz sample rate). This is worsened by the ReplayGain system, as it has to copy the audio buffer no matter what.
-This results in choppy, distorted playback in some cases as audio data cannot be delivered in time. Sadly, there is
-not much I can do about this right now.
+This results in choppy, distorted playback in some cases as audio data cannot be delivered in time. I can also mitigate
+this similarly to the above issue, but again, it may take some time.
#### Why are accents lighter/less saturated in dark mode?
As per the [Material Design Guidelines](https://material.io/design/color/dark-theme.html), accents should be less