From 2d0a74122f2bc98d7bd1e36bfe2a093fd67b6909 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Thu, 25 May 2023 11:37:15 -0600 Subject: [PATCH] ui: clean up share impl Clean up the sharing implementation to be more in-line with how I would write it. --- CHANGELOG.md | 5 ++ .../org/oxycblt/auxio/util/FrameworkUtil.kt | 48 ++++++++----------- app/src/main/res/menu/menu_album_detail.xml | 6 +-- .../main/res/menu/menu_album_song_actions.xml | 6 +-- .../res/menu/menu_artist_song_actions.xml | 6 +-- app/src/main/res/menu/menu_parent_actions.xml | 6 +-- app/src/main/res/menu/menu_playback.xml | 6 +-- .../res/menu/menu_playlist_song_actions.xml | 3 ++ app/src/main/res/menu/menu_song_actions.xml | 6 +-- 9 files changed, 47 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63626d664..77b90dedf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## dev + +#### What's New +- Added ability to share a track + ## 3.1.0 #### What's New diff --git a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt index b70c6051a..f3091603e 100644 --- a/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt +++ b/app/src/main/java/org/oxycblt/auxio/util/FrameworkUtil.kt @@ -36,12 +36,10 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding import java.lang.IllegalArgumentException -import org.oxycblt.auxio.music.Music +import org.oxycblt.auxio.R import org.oxycblt.auxio.music.MusicParent import org.oxycblt.auxio.music.Song -private const val MIME_TYPE_FALLBACK = "audio/*" - /** * Get if this [View] contains the given [PointF], with optional leeway. * @@ -271,35 +269,31 @@ fun WindowInsets.replaceSystemBarInsetsCompat( } /** - * Show system share sheet to share songs + * Share a single [Song]. * - * @param music the [Music] to share + * @param song */ -fun Context.share(music: Music) = share( - when (music) { - is Song -> listOf(music) - is MusicParent -> music.songs - } -) +fun Context.share(song: Song) = share(listOf(song)) /** - * Show system share sheet to share multiple song + * Share all songs in a [MusicParent]. * - * @param songs the collection of [Song] to share + * @param parent The [MusicParent] to share. */ -fun Context.share(songs: Collection) { - if (songs.isEmpty()) { - return +fun Context.share(parent: MusicParent) = share(parent.songs) + +/** + * Share an arbitrary list of [Song]s. + * @param songs The [Song]s to share. + */ +fun Context.share(songs: List) { + if (songs.isEmpty()) return + val builder = ShareCompat.IntentBuilder(this) + val mimeTypes = mutableSetOf() + for (song in songs) { + builder.addStream(song.uri) + mimeTypes.add(song.mimeType.fromFormat ?: song.mimeType.fromExtension) } - val type = songs.mapTo(HashSet(songs.size)) { - it.mimeType.raw - }.singleOrNull() ?: MIME_TYPE_FALLBACK - ShareCompat.IntentBuilder(this) - .apply { - for (song in songs) { - addStream(song.uri) - } - } - .setType(type) - .startChooser() + + builder.setType(mimeTypes.singleOrNull() ?: "audio/*").startChooser() } diff --git a/app/src/main/res/menu/menu_album_detail.xml b/app/src/main/res/menu/menu_album_detail.xml index f0b18e132..7cc2b4b79 100644 --- a/app/src/main/res/menu/menu_album_detail.xml +++ b/app/src/main/res/menu/menu_album_detail.xml @@ -9,10 +9,10 @@ - + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_album_song_actions.xml b/app/src/main/res/menu/menu_album_song_actions.xml index d356eeedb..7325144c0 100644 --- a/app/src/main/res/menu/menu_album_song_actions.xml +++ b/app/src/main/res/menu/menu_album_song_actions.xml @@ -12,10 +12,10 @@ - + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_artist_song_actions.xml b/app/src/main/res/menu/menu_artist_song_actions.xml index aaad4040a..78442df43 100644 --- a/app/src/main/res/menu/menu_artist_song_actions.xml +++ b/app/src/main/res/menu/menu_artist_song_actions.xml @@ -12,10 +12,10 @@ - + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_parent_actions.xml b/app/src/main/res/menu/menu_parent_actions.xml index b741fd51b..6de2527de 100644 --- a/app/src/main/res/menu/menu_parent_actions.xml +++ b/app/src/main/res/menu/menu_parent_actions.xml @@ -12,10 +12,10 @@ - + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_playback.xml b/app/src/main/res/menu/menu_playback.xml index 5dca5f5dd..92264d881 100644 --- a/app/src/main/res/menu/menu_playback.xml +++ b/app/src/main/res/menu/menu_playback.xml @@ -14,9 +14,6 @@ android:id="@+id/action_go_album" android:title="@string/lbl_go_album" app:showAsAction="never" /> - @@ -24,4 +21,7 @@ android:id="@+id/action_song_detail" android:title="@string/lbl_song_detail" app:showAsAction="never" /> + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_playlist_song_actions.xml b/app/src/main/res/menu/menu_playlist_song_actions.xml index 28c508681..e55d8e3f6 100644 --- a/app/src/main/res/menu/menu_playlist_song_actions.xml +++ b/app/src/main/res/menu/menu_playlist_song_actions.xml @@ -15,4 +15,7 @@ + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_song_actions.xml b/app/src/main/res/menu/menu_song_actions.xml index cba78013b..b892ba7c3 100644 --- a/app/src/main/res/menu/menu_song_actions.xml +++ b/app/src/main/res/menu/menu_song_actions.xml @@ -15,10 +15,10 @@ - + \ No newline at end of file