diff --git a/CHANGELOG.md b/CHANGELOG.md index da465569a..3907a19ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,27 @@ # Changelog -## dev +## 3.5.0 + +#### What's New +- Android Auto support +- Full media browser implementation + +#### What's Improved +- Album covers are now loaded on a per-song basis +- Correctly interpret MP4 sort tags + +#### What's Fixed +- Fixed repeat mode not restoring on startup + +#### What's Changed +- For the time being, the media notification will not follow Album Covers or 1:1 Covers settings +- Playback will close automatically after some time left idle + +#### dev -> dev1 changes +- Re-added ability to open app from clicking on notification +- Removed tasker plugin + +## 3.4.3 #### What's Improved - Added back option disable ReplayGain for poorly tagged libraries diff --git a/app/build.gradle b/app/build.gradle index 522858562..f3663da09 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,8 +21,8 @@ android { defaultConfig { applicationId namespace - versionName "3.4.3" - versionCode 44 + versionName "3.5.0-dev" + versionCode 45 minSdk 24 targetSdk 34 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 53c1b4e2b..960d2c8ae 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -134,5 +134,6 @@ android:name="android.appwidget.provider" android:resource="@xml/widget_info" /> + \ No newline at end of file diff --git a/app/src/main/java/org/oxycblt/auxio/AuxioService.kt b/app/src/main/java/org/oxycblt/auxio/AuxioService.kt index 64121e6d1..fd44f6a5b 100644 --- a/app/src/main/java/org/oxycblt/auxio/AuxioService.kt +++ b/app/src/main/java/org/oxycblt/auxio/AuxioService.kt @@ -28,6 +28,8 @@ import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject import org.oxycblt.auxio.music.service.IndexerServiceFragment import org.oxycblt.auxio.playback.service.MediaSessionServiceFragment +import org.oxycblt.auxio.tasker.indicateServiceRunning +import org.oxycblt.auxio.tasker.indicateServiceStopped @AndroidEntryPoint class AuxioService : MediaLibraryService(), ForegroundListener { @@ -40,6 +42,7 @@ class AuxioService : MediaLibraryService(), ForegroundListener { super.onCreate() mediaSessionFragment.attach(this, this) indexingFragment.attach(this) + indicateServiceRunning() } override fun onBind(intent: Intent?): IBinder? { @@ -70,6 +73,7 @@ class AuxioService : MediaLibraryService(), ForegroundListener { override fun onDestroy() { super.onDestroy() + indicateServiceStopped() indexingFragment.release() mediaSessionFragment.release() } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/service/ExoPlaybackStateHolder.kt b/app/src/main/java/org/oxycblt/auxio/playback/service/ExoPlaybackStateHolder.kt index e8dca68be..e8a108d0a 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/service/ExoPlaybackStateHolder.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/service/ExoPlaybackStateHolder.kt @@ -329,12 +329,16 @@ class ExoPlaybackStateHolder( val trueFrom = indices[from] val trueTo = indices[to] + // ExoPlayer does not actually update it's ShuffleOrder when moving items. Retain a + // semblance of "normalcy" by doing a weird no-op swap that actually moves the item. when { trueFrom > trueTo -> { player.moveMediaItem(trueFrom, trueTo) + player.moveMediaItem(trueTo + 1, trueFrom) } trueTo > trueFrom -> { player.moveMediaItem(trueFrom, trueTo) + player.moveMediaItem(trueTo - 1, trueFrom) } } playbackManager.ack(this, ack) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt b/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt index 8152b1053..fb884cee3 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/service/MediaSessionServiceFragment.kt @@ -52,6 +52,7 @@ import org.oxycblt.auxio.music.service.MediaItemBrowser import org.oxycblt.auxio.playback.state.DeferredPlayback import org.oxycblt.auxio.playback.state.PlaybackStateManager import org.oxycblt.auxio.util.logD +import org.oxycblt.auxio.util.newMainPendingIntent class MediaSessionServiceFragment @Inject @@ -76,6 +77,11 @@ constructor( .setNotificationId(IntegerTable.PLAYBACK_NOTIFICATION_CODE) .setChannelId(BuildConfig.APPLICATION_ID + ".channel.PLAYBACK") .setChannelName(R.string.lbl_playback) + .setPlayDrawableResourceId(R.drawable.ic_play_24) + .setPauseDrawableResourceId(R.drawable.ic_pause_24) + .setSkipNextDrawableResourceId(R.drawable.ic_skip_next_24) + .setSkipPrevDrawableResourceId(R.drawable.ic_skip_prev_24) + .setContentIntent(context.newMainPendingIntent()) .build() .also { it.setSmallIcon(R.drawable.ic_auxio_24) } private var foregroundListener: ForegroundListener? = null diff --git a/app/src/main/java/org/oxycblt/auxio/playback/service/PlaybackActionHandler.kt b/app/src/main/java/org/oxycblt/auxio/playback/service/PlaybackActionHandler.kt index 7aa37e36b..8597770de 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/service/PlaybackActionHandler.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/service/PlaybackActionHandler.kt @@ -27,7 +27,6 @@ import android.os.Bundle import androidx.core.content.ContextCompat import androidx.media3.common.Player import androidx.media3.session.CommandButton -import androidx.media3.session.DefaultMediaNotificationProvider import androidx.media3.session.SessionCommand import androidx.media3.session.SessionCommands import dagger.hilt.android.qualifiers.ApplicationContext @@ -106,12 +105,6 @@ constructor( .setSessionCommand( SessionCommand(PlaybackActions.ACTION_INC_REPEAT_MODE, Bundle())) .setEnabled(true) - .setExtras( - Bundle().apply { - putInt( - DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, - 0) - }) .build()) } ActionMode.SHUFFLE -> { @@ -135,36 +128,6 @@ constructor( .setDisplayName(context.getString(R.string.desc_skip_prev)) .setPlayerCommand(Player.COMMAND_SEEK_TO_PREVIOUS) .setEnabled(true) - .setExtras( - Bundle().apply { - putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 1) - }) - .build()) - - actions.add( - CommandButton.Builder() - .setIconResId( - if (playbackManager.progression.isPlaying) R.drawable.ic_pause_24 - else R.drawable.ic_play_24) - .setDisplayName(context.getString(R.string.desc_play_pause)) - .setPlayerCommand(Player.COMMAND_PLAY_PAUSE) - .setEnabled(true) - .setExtras( - Bundle().apply { - putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 2) - }) - .build()) - - actions.add( - CommandButton.Builder() - .setIconResId(R.drawable.ic_skip_next_24) - .setDisplayName(context.getString(R.string.desc_skip_next)) - .setPlayerCommand(Player.COMMAND_SEEK_TO_NEXT) - .setEnabled(true) - .setExtras( - Bundle().apply { - putInt(DefaultMediaNotificationProvider.COMMAND_KEY_COMPACT_VIEW_INDEX, 3) - }) .build()) actions.add( diff --git a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt index 2ece33656..a80bc446d 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/AboutFragment.kt @@ -68,9 +68,6 @@ class AboutFragment : ViewBindingFragment() { binding.aboutLicenses.setOnClickListener { requireContext().openInBrowser(LINK_LICENSES) } binding.aboutProfile.setOnClickListener { requireContext().openInBrowser(LINK_PROFILE) } binding.aboutDonate.setOnClickListener { requireContext().openInBrowser(LINK_DONATE) } - binding.aboutSupporterYrliet.setOnClickListener { - requireContext().openInBrowser(LINK_YRLIET) - } binding.aboutSupportersPromo.setOnClickListener { requireContext().openInBrowser(LINK_DONATE) } @@ -100,6 +97,5 @@ class AboutFragment : ViewBindingFragment() { const val LINK_LICENSES = "$LINK_WIKI/Licenses" const val LINK_PROFILE = "https://github.com/OxygenCobalt" const val LINK_DONATE = "https://github.com/sponsors/OxygenCobalt" - const val LINK_YRLIET = "https://github.com/yrliet" } } diff --git a/app/src/main/java/org/oxycblt/auxio/tasker/Tasker.kt b/app/src/main/java/org/oxycblt/auxio/tasker/Tasker.kt deleted file mode 100644 index ec2d6ac99..000000000 --- a/app/src/main/java/org/oxycblt/auxio/tasker/Tasker.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2024 Auxio Project - * Tasker.kt is part of Auxio. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.oxycblt.auxio.tasker diff --git a/app/src/main/res/drawable/ui_selection_bg.xml b/app/src/main/res/drawable/ui_selection_bg.xml new file mode 100644 index 000000000..45a1fd8a1 --- /dev/null +++ b/app/src/main/res/drawable/ui_selection_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index 06211fab4..787fcb546 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -224,18 +224,6 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> - - + android:background="@drawable/ui_selection_bg"> Microsoft WAVE - yrliet \ No newline at end of file diff --git a/media b/media index 1d58171e1..00124cbac 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit 1d58171e16107d73ec3c842319663a8a06bfd23a +Subproject commit 00124cbac493c06a24e19b01893946bdaf8faf58