diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0a4f913c..81c82879b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
- Added support for date values formatted as "YYYYMMDD"
- Pressing the button will now clear the current selection before navigating back
- Added support for non-standard `ARTISTS` tags
+- Reworked music folders dialog to be more coherent
#### What's Fixed
- Fixed unreliable ReplayGain adjustment application in certain situations
diff --git a/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt b/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt
index 2ac6e26c3..b80b45882 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/extractor/MetadataExtractor.kt
@@ -218,7 +218,9 @@ class Task(context: Context, private val raw: Song.Raw) {
// Album artist
textFrames["TXXX:musicbrainz album artist id"]?.let { raw.albumArtistMusicBrainzIds = it }
(textFrames["TXXX:albumartists"] ?: textFrames["TPE2"])?.let { raw.albumArtistNames = it }
- (textFrames["TXXX:albumartists_sort"] ?: textFrames["TSO2"])?.let { raw.albumArtistSortNames = it }
+ (textFrames["TXXX:albumartists_sort"] ?: textFrames["TSO2"])?.let {
+ raw.albumArtistSortNames = it
+ }
// Genre
textFrames["TCON"]?.let { raw.genreNames = it }
diff --git a/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt b/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt
index e9cb75d42..3db2c0dff 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/storage/MusicDirsDialog.kt
@@ -26,6 +26,7 @@ import android.view.LayoutInflater
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
+import androidx.core.view.ViewCompat
import androidx.core.view.isVisible
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.R
@@ -50,10 +51,8 @@ class MusicDirsDialog :
DialogMusicDirsBinding.inflate(inflater)
override fun onConfigDialog(builder: AlertDialog.Builder) {
- // Don't set the click listener here, we do some custom magic in onCreateView instead.
builder
.setTitle(R.string.set_dirs)
- .setNeutralButton(R.string.lbl_add, null)
.setNegativeButton(R.string.lbl_cancel, null)
.setPositiveButton(R.string.lbl_save) { _, _ ->
val settings = MusicSettings.from(requireContext())
@@ -74,13 +73,9 @@ class MusicDirsDialog :
registerForActivityResult(
ActivityResultContracts.OpenDocumentTree(), ::addDocumentTreeUriToDirs)
- // Now that the dialog exists, we get the view manually when the dialog is shown
- // and override its click listener so that the dialog does not auto-dismiss when we
- // click the "Add"/"Save" buttons. This prevents the dialog from disappearing in the former
- // and the app from crashing in the latter.
- requireDialog().setOnShowListener {
- val dialog = it as AlertDialog
- dialog.getButton(AlertDialog.BUTTON_NEUTRAL)?.setOnClickListener {
+ binding.dirsAdd.apply {
+ ViewCompat.setTooltipText(this, contentDescription)
+ setOnClickListener {
logD("Opening launcher")
val launcher =
requireNotNull(openDocumentTreeLauncher) {
@@ -182,8 +177,12 @@ class MusicDirsDialog :
private fun updateMode() {
val binding = requireBinding()
if (isUiModeInclude(binding)) {
+ binding.dirsModeExclude.icon = null
+ binding.dirsModeInclude.setIconResource(R.drawable.ic_check_24)
binding.dirsModeDesc.setText(R.string.set_dirs_mode_include_desc)
} else {
+ binding.dirsModeExclude.setIconResource(R.drawable.ic_check_24)
+ binding.dirsModeInclude.icon = null
binding.dirsModeDesc.setText(R.string.set_dirs_mode_exclude_desc)
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt
index de624a85d..3ba0fee00 100644
--- a/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt
+++ b/app/src/main/java/org/oxycblt/auxio/util/ContextUtil.kt
@@ -18,6 +18,7 @@
package org.oxycblt.auxio.util
import android.app.PendingIntent
+import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.content.res.ColorStateList
@@ -26,6 +27,7 @@ import android.os.Build
import android.util.TypedValue
import android.view.LayoutInflater
import android.widget.Toast
+import androidx.activity.result.ActivityResultLauncher
import androidx.annotation.AttrRes
import androidx.annotation.ColorRes
import androidx.annotation.DimenRes
diff --git a/app/src/main/res/drawable/ic_add_24.xml b/app/src/main/res/drawable/ic_add_24.xml
new file mode 100644
index 000000000..c056f550e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_add_24.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/app/src/main/res/layout/dialog_music_dirs.xml b/app/src/main/res/layout/dialog_music_dirs.xml
index 2bad59793..8d234db5f 100644
--- a/app/src/main/res/layout/dialog_music_dirs.xml
+++ b/app/src/main/res/layout/dialog_music_dirs.xml
@@ -4,60 +4,27 @@
xmlns:tools="http://schemas.android.com/tools"
style="@style/Widget.Auxio.Dialog.NestedScrollView"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="match_parent"
android:orientation="vertical">
-
+ android:layout_height="match_parent">
-
-
-
-
-
-
-
-
+ android:text="@string/set_dirs_mode"
+ app:layout_constraintTop_toTopOf="parent" />
-
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_music_dir.xml b/app/src/main/res/layout/item_music_dir.xml
index f49006e95..61e7c0dbd 100644
--- a/app/src/main/res/layout/item_music_dir.xml
+++ b/app/src/main/res/layout/item_music_dir.xml
@@ -4,6 +4,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:paddingTop="@dimen/spacing_small"
+ android:paddingBottom="@dimen/spacing_small"
android:gravity="center"
android:orientation="horizontal">