From 6e0292998295a76fcdcc8538961d6714960c12bb Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Mon, 16 Jan 2023 10:18:55 -0700 Subject: [PATCH] music: reorganize music folders dialog Reorganize the music folders dialog to be more visually straightforward than prior, primarily by grouping the folder elements into the same visual region. Resolves #318. --- CHANGELOG.md | 1 + .../music/extractor/MetadataExtractor.kt | 4 +- .../auxio/music/storage/MusicDirsDialog.kt | 17 ++- .../org/oxycblt/auxio/util/ContextUtil.kt | 2 + app/src/main/res/drawable/ic_add_24.xml | 11 ++ app/src/main/res/layout/dialog_music_dirs.xml | 114 +++++++++++------- app/src/main/res/layout/item_music_dir.xml | 2 + 7 files changed, 97 insertions(+), 54 deletions(-) create mode 100644 app/src/main/res/drawable/ic_add_24.xml 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" /> -