Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,9 @@ android {
// ExoPlayer
implementation(libs.exoplayer.core)
implementation(libs.exoplayer.hls)
// Local AARs with 16KB-aligned native libs (for Android page size compatibility)
implementation(files("libs/extension-flac.aar"))
implementation(files("libs/extension-opus.aar"))

implementation(libs.androidx.drawerlayout)

Expand Down
Binary file added android/app/libs/extension-flac.aar
Binary file not shown.
Binary file added android/app/libs/extension-opus.aar
Binary file not shown.
10 changes: 7 additions & 3 deletions android/app/src/main/assets/changelog.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
[
{
"versionName": "1.0.8",
"releaseDate": "03/11/2025",
"releaseDate": "10/01/2026",
"features": [
"Added app shortcut to toggle playback"
],
"fixes": [
"Fixed an issue where some tags could not be read"
"Fixed an issue where some tags could not be read",
"Fixed a bluetooth metadata issue affecting the queue after track 7",
"Removed QuickLyric - no longer available on the Play Store"
],
"improvements": [
"Migrate some stuff to Compose (Thanks Àlex Magaz Graça)",
"Add support for hidden files in folder based artwork with `.` in filename (e.g. `.cover.jpg`) (Thnks a-gss)",
"Ensure native libraries support 16kb page size (new Android requirement)"
"Ensure native libraries support 16kb page size (new Android requirement)",
"Improved native artwork detection"
],
"notes": [
"What's up? I want to make Shuttle great again. I just need more hours in the day, and more days in the week!"
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,6 @@ interface PlaybackContract {

fun goToArtist(artist: com.simplecityapps.shuttle.model.AlbumArtist)

fun launchQuickLyric(
artistName: String,
songName: String
)

fun getQuickLyric()

fun showQuickLyricUnavailable()

fun showSongInfoDialog(song: com.simplecityapps.shuttle.model.Song)

fun displayLyrics(lyrics: String)
Expand Down Expand Up @@ -84,9 +75,7 @@ interface PlaybackContract {

fun showSongInfo()

fun showOrLaunchLyrics()

fun launchQuickLyric()
fun showLyrics()

fun clearQueue()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.SeekBar
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
Expand Down Expand Up @@ -42,7 +41,6 @@ import com.simplecityapps.shuttle.ui.common.view.fadeIn
import com.simplecityapps.shuttle.ui.common.view.fadeOut
import com.simplecityapps.shuttle.ui.common.view.multisheet.MultiSheetView
import com.simplecityapps.shuttle.ui.common.view.multisheet.findParentMultiSheetView
import com.simplecityapps.shuttle.ui.lyrics.QuickLyricManager
import com.simplecityapps.shuttle.ui.screens.library.albumartists.detail.AlbumArtistDetailFragmentArgs
import com.simplecityapps.shuttle.ui.screens.library.albums.detail.AlbumDetailFragmentArgs
import com.simplecityapps.shuttle.ui.screens.queue.QueueFragment
Expand Down Expand Up @@ -88,7 +86,6 @@ class PlaybackFragment :
private var lyricsView: View by autoCleared()
private var lyricsText: TextView by autoCleared()
private var closeLyricsButton: Button by autoCleared()
private var quickLyricButton: Button by autoCleared()

private var pendingScrollPosition: Int? = null

Expand Down Expand Up @@ -174,8 +171,6 @@ class PlaybackFragment :
lyricsText = view.findViewById(R.id.lyricsTextView)
closeLyricsButton = view.findViewById(R.id.closeLyricsButton)
closeLyricsButton.setOnClickListener { lyricsView.fadeOut() }
quickLyricButton = view.findViewById(R.id.quickLyricButton)
quickLyricButton.setOnClickListener { presenter.launchQuickLyric() }

recyclerView.adapter = adapter
recyclerView.setRecyclerListener(RecyclerListener())
Expand All @@ -197,24 +192,29 @@ class PlaybackFragment :
presenter.sleepTimerClicked()
true
}

R.id.lyrics -> {
presenter.showOrLaunchLyrics()
presenter.showLyrics()
true
}

R.id.songInfo -> {
presenter.showSongInfo()
true
}

R.id.editTags -> {
queueManager.getCurrentItem()?.song?.let { song ->
TagEditorAlertDialog.newInstance(listOf(song)).show(childFragmentManager)
}
true
}

R.id.clearQueue -> {
presenter.clearQueue()
true
}

else -> false
}
}
Expand Down Expand Up @@ -274,6 +274,7 @@ class PlaybackFragment :
skipPrevButton.isVisible = false
skipButton.isVisible = false
}

else -> {
seekBackwardButton.isVisible = false
seekForwardButton.isVisible = false
Expand All @@ -290,7 +291,13 @@ class PlaybackFragment :
}

toolbar.menu.findItem(R.id.lyrics)?.let { menuItem ->
menuItem.title = song.lyrics?.let { getString(R.string.lyrics_title) } ?: getString(R.string.lyrics_quicklyric_title)
val title = song.lyrics?.let { getString(R.string.lyrics_title) }
if (title == null) {
menuItem.isVisible = false
} else {
menuItem.title = title
menuItem.isVisible = true
}
}
}
}
Expand Down Expand Up @@ -369,24 +376,6 @@ class PlaybackFragment :
}, 200)
}

override fun launchQuickLyric(
artistName: String,
songName: String
) {
val intent = QuickLyricManager.buildLyricsIntent(artistName, songName)
if (intent.resolveActivity(requireContext().packageManager) != null) {
requireContext().startActivity(intent)
}
}

override fun getQuickLyric() {
requireContext().startActivity(QuickLyricManager.quickLyricIntent)
}

override fun showQuickLyricUnavailable() {
Toast.makeText(requireContext(), getString(R.string.lyrics_quicklyric_unavailable), Toast.LENGTH_LONG).show()
}

override fun showSongInfoDialog(song: Song) {
SongInfoDialogFragment.newInstance(song).show(childFragmentManager)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import com.simplecityapps.playback.queue.QueueItem
import com.simplecityapps.playback.queue.QueueManager
import com.simplecityapps.playback.queue.QueueWatcher
import com.simplecityapps.shuttle.ui.common.mvp.BasePresenter
import com.simplecityapps.shuttle.ui.lyrics.QuickLyricManager
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import kotlinx.coroutines.Job
Expand Down Expand Up @@ -219,27 +218,10 @@ constructor(
}
}

override fun showOrLaunchLyrics() {
override fun showLyrics() {
queueManager.getCurrentItem()?.let { queueItem ->
queueItem.song.lyrics?.let { lyrics ->
view?.displayLyrics(lyrics)
} ?: launchQuickLyric()
}
}

override fun launchQuickLyric() {
queueManager.getCurrentItem()?.let { queueItem ->
if (QuickLyricManager.isQuickLyricInstalled(context)) {
view?.launchQuickLyric(
queueItem.song.albumArtist ?: context.getString(com.simplecityapps.core.R.string.unknown),
queueItem.song.name ?: context.getString(com.simplecityapps.core.R.string.unknown)
)
} else {
if (QuickLyricManager.canDownloadQuickLyric(context)) {
view?.getQuickLyric()
} else {
view?.showQuickLyricUnavailable()
}
}
}
}
Expand Down
14 changes: 0 additions & 14 deletions android/app/src/main/res/layout/view_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,6 @@

</androidx.core.widget.NestedScrollView>

<Button
android:id="@+id/quickLyricButton"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="QuickLyric"
android:textAllCaps="false"
android:textColor="#FFF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/closeLyricsButton"
app:strokeColor="#FF8F00" />

<Button
android:id="@+id/closeLyricsButton"
style="@style/Widget.MaterialComponents.Button.TextButton"
Expand Down
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-de/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Songtext</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric nicht verfügbar</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-en-rGB/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Lyrics</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric unavailable</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-es-rES/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Letra</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric no disponible</string>
<!-- Button to hide the lyrics -->
<string name="lyrics_close_button_title">Cerrar</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-es/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Letra</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric no disponible</string>
<!-- Button to hide the lyrics -->
<string name="lyrics_close_button_title">Cerrar</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-fr/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Paroles</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric non disponible</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-hi/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">बोल</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric अनुपलब्ध है</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-it/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Testo</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric non disponibile</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-ja/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">歌詞</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyricは利用できません</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-nl/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Songtekst</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric niet beschikbaar</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-pl/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Tekst piosenki</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric niedostępny</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-pt-rBR/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Letra da Música</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric indisponível</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-pt-rPT/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Letra da música</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric indisponível</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-ru/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Текст песни</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric недоступен</string>
</resources>
4 changes: 0 additions & 4 deletions android/app/src/main/res/values-tr/strings_lyrics.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,4 @@
<resources>
<!-- The option to view lyrics for a song-->
<string name="lyrics_title">Şarkı sözleri</string>
<!-- QuickLyric - an app for viewing lyrics (probably don't translate-->
<string name="lyrics_quicklyric_title">QuickLyric</string>
<!-- Shown when the QuickLyric app is unavailable-->
<string name="lyrics_quicklyric_unavailable">QuickLyric kullanılamıyor</string>
</resources>
Loading