├── app
├── .gitignore
├── libs
│ ├── com
│ │ ├── squareup
│ │ │ ├── okhttp3
│ │ │ │ └── okhttp
│ │ │ │ │ └── 4.12.0
│ │ │ │ │ ├── okhttp-4.12.0.jar.license
│ │ │ │ │ └── okhttp-4.12.0.jar
│ │ │ └── okio
│ │ │ │ └── okio-jvm
│ │ │ │ └── 3.9.1
│ │ │ │ ├── okio-jvm-3.9.1.jar.license
│ │ │ │ └── okio-jvm-3.9.1.jar
│ │ └── github
│ │ │ ├── bogerchan
│ │ │ └── Nier-Visualizer
│ │ │ │ └── v0.1.3
│ │ │ │ ├── Nier-Visualizer-v0.1.3.aar.license
│ │ │ │ └── Nier-Visualizer-v0.1.3.aar
│ │ │ └── philburk
│ │ │ └── jsyn
│ │ │ └── 3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e
│ │ │ ├── jsyn-3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e.jar.license
│ │ │ └── jsyn-3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e.jar
│ ├── io
│ │ └── coil-kt
│ │ │ └── coil3
│ │ │ ├── coil-android
│ │ │ └── 3.0.4
│ │ │ │ ├── coil-release.aar.license
│ │ │ │ └── coil-release.aar
│ │ │ ├── coil-core-android
│ │ │ └── 3.0.4
│ │ │ │ ├── coil-core-release.aar.license
│ │ │ │ └── coil-core-release.aar
│ │ │ ├── coil-network-core-android
│ │ │ └── 3.0.4
│ │ │ │ ├── coil-network-core-release.aar.license
│ │ │ │ └── coil-network-core-release.aar
│ │ │ └── coil-network-okhttp-jvm
│ │ │ └── 3.0.4
│ │ │ ├── coil-network-okhttp-jvm-3.0.4.jar.license
│ │ │ └── coil-network-okhttp-jvm-3.0.4.jar
│ └── androidx
│ │ ├── media3
│ │ ├── media3-ui
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-ui-1.8.0.aar.license
│ │ │ │ └── media3-ui-1.8.0.aar
│ │ ├── media3-common
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-common-1.8.0.aar.license
│ │ │ │ └── media3-common-1.8.0.aar
│ │ ├── media3-decoder
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-decoder-1.8.0.aar.license
│ │ │ │ └── media3-decoder-1.8.0.aar
│ │ ├── media3-session
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-session-1.8.0.aar.license
│ │ │ │ └── media3-session-1.8.0.aar
│ │ ├── media3-container
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-container-1.8.0.aar.license
│ │ │ │ └── media3-container-1.8.0.aar
│ │ ├── media3-database
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-database-1.8.0.aar.license
│ │ │ │ └── media3-database-1.8.0.aar
│ │ ├── media3-exoplayer
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-exoplayer-1.8.0.aar.license
│ │ │ │ └── media3-exoplayer-1.8.0.aar
│ │ ├── media3-extractor
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-extractor-1.8.0.aar.license
│ │ │ │ └── media3-extractor-1.8.0.aar
│ │ ├── media3-common-ktx
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-common-ktx-1.8.0.aar.license
│ │ │ │ └── media3-common-ktx-1.8.0.aar
│ │ ├── media3-datasource
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-datasource-1.8.0.aar.license
│ │ │ │ └── media3-datasource-1.8.0.aar
│ │ ├── media3-exoplayer-hls
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-exoplayer-hls-1.8.0.aar.license
│ │ │ │ └── media3-exoplayer-hls-1.8.0.aar
│ │ ├── media3-exoplayer-midi
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-exoplayer-midi-1.8.0.aar.license
│ │ │ │ └── media3-exoplayer-midi-1.8.0.aar
│ │ ├── media3-exoplayer-rtsp
│ │ │ └── 1.8.0
│ │ │ │ ├── media3-exoplayer-rtsp-1.8.0.aar.license
│ │ │ │ └── media3-exoplayer-rtsp-1.8.0.aar
│ │ └── media3-exoplayer-smoothstreaming
│ │ │ └── 1.8.0
│ │ │ ├── media3-exoplayer-smoothstreaming-1.8.0.aar.license
│ │ │ └── media3-exoplayer-smoothstreaming-1.8.0.aar
│ │ └── navigation
│ │ ├── navigation-ui
│ │ └── 2.9.5
│ │ │ ├── navigation-ui-2.9.5.aar.license
│ │ │ └── navigation-ui-2.9.5.aar
│ │ ├── navigation-ui-ktx
│ │ └── 2.9.5
│ │ │ ├── navigation-ui-ktx-2.9.5.aar.license
│ │ │ └── navigation-ui-ktx-2.9.5.aar
│ │ ├── navigation-fragment
│ │ └── 2.9.5
│ │ │ ├── navigation-fragment-2.9.5.aar.license
│ │ │ └── navigation-fragment-2.9.5.aar
│ │ ├── navigation-common-android
│ │ └── 2.9.5
│ │ │ ├── navigation-common-release.aar.license
│ │ │ └── navigation-common-release.aar
│ │ ├── navigation-fragment-ktx
│ │ └── 2.9.5
│ │ │ ├── navigation-fragment-ktx-2.9.5.aar.license
│ │ │ └── navigation-fragment-ktx-2.9.5.aar
│ │ └── navigation-runtime-android
│ │ └── 2.9.5
│ │ ├── navigation-runtime-release.aar.license
│ │ └── navigation-runtime-release.aar
├── src
│ └── main
│ │ ├── res
│ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens_ListItem.xml
│ │ │ ├── attrs_AppWidget.xml
│ │ │ ├── attrs_NowPlayingBar.xml
│ │ │ └── attrs_ListItem.xml
│ │ ├── xml
│ │ │ ├── automotive_app_desc.xml
│ │ │ ├── network_security_config.xml
│ │ │ └── app_widget_now_playing.xml
│ │ ├── values-uk
│ │ │ └── strings.xml
│ │ ├── values-be
│ │ │ └── strings.xml
│ │ ├── drawable
│ │ │ ├── bg_app_widget_round_view.xml
│ │ │ ├── bg_app_widget.xml
│ │ │ ├── bg_item_header_scrim.xml
│ │ │ ├── now_playing_marker.xml
│ │ │ ├── ic_remove.xml
│ │ │ ├── ic_arrow_drop_down.xml
│ │ │ ├── ic_keyboard_arrow_down.xml
│ │ │ ├── ic_drag_handle.xml
│ │ │ ├── ic_play_arrow.xml
│ │ │ ├── ic_add.xml
│ │ │ ├── ic_expand_content.xml
│ │ │ ├── ic_skip_next.xml
│ │ │ ├── ic_sort_alphabetical_ascending.xml
│ │ │ ├── ic_sort_alphabetical_descending.xml
│ │ │ ├── ic_skip_previous.xml
│ │ │ ├── ic_double_arrow.xml
│ │ │ ├── ic_playlist_play.xml
│ │ │ ├── ic_music_note.xml
│ │ │ ├── ic_bluetooth.xml
│ │ │ ├── ic_repeat.xml
│ │ │ ├── ic_shuffle_play.xml
│ │ │ ├── ic_shuffle.xml
│ │ │ ├── ic_graphic_eq.xml
│ │ │ ├── ic_home.xml
│ │ │ ├── ic_playlist_add.xml
│ │ │ ├── ic_playlist_remove.xml
│ │ │ ├── ic_pause.xml
│ │ │ ├── ic_repeat_one.xml
│ │ │ ├── ic_warning.xml
│ │ │ ├── ic_heart_filled.xml
│ │ │ ├── ic_edit.xml
│ │ │ ├── ic_launcher_monochrome.xml
│ │ │ ├── ic_search.xml
│ │ │ ├── ic_notification_small_icon.xml
│ │ │ ├── ic_jellyfin.xml
│ │ │ ├── ic_shelves.xml
│ │ │ ├── ic_sync.xml
│ │ │ ├── ic_edit_note.xml
│ │ │ ├── ic_more_vert.xml
│ │ │ ├── ic_delete.xml
│ │ │ ├── ic_settings_input_hdmi.xml
│ │ │ ├── ic_circle.xml
│ │ │ ├── ic_usb.xml
│ │ │ ├── ic_check_circle.xml
│ │ │ ├── ic_save.xml
│ │ │ ├── ic_smartphone.xml
│ │ │ ├── ic_queue_play_next.xml
│ │ │ ├── ic_add_to_queue.xml
│ │ │ ├── ic_lineage_library.xml
│ │ │ ├── ic_audio_file.xml
│ │ │ ├── ic_headphones.xml
│ │ │ ├── ic_search_off.xml
│ │ │ ├── ic_conversion_path_off.xml
│ │ │ ├── ic_genres.xml
│ │ │ ├── ic_error.xml
│ │ │ ├── ic_info.xml
│ │ │ ├── ic_conversion_path.xml
│ │ │ ├── ic_cast.xml
│ │ │ ├── ic_album.xml
│ │ │ └── ic_favorite.xml
│ │ ├── values-ka
│ │ │ └── strings.xml
│ │ ├── color
│ │ │ ├── textview_pressed.xml
│ │ │ ├── lyrics_line.xml
│ │ │ ├── list_item_background.xml
│ │ │ ├── list_item_primary.xml
│ │ │ └── list_item_secondary.xml
│ │ ├── values-v31
│ │ │ └── themes.xml
│ │ ├── mipmap
│ │ │ └── ic_launcher.xml
│ │ ├── layout
│ │ │ ├── settingslib_switch.xml
│ │ │ ├── settingslib_switch_compat.xml
│ │ │ ├── lyrics_line.xml
│ │ │ ├── provider_more_button.xml
│ │ │ ├── activity_main.xml
│ │ │ ├── genre_labels.xml
│ │ │ ├── artist_labels.xml
│ │ │ ├── alert_dialog_edit_text.xml
│ │ │ ├── fragment_library.xml
│ │ │ ├── audio_track_index.xml
│ │ │ ├── playlist_labels.xml
│ │ │ └── argument_item.xml
│ │ ├── navigation
│ │ │ ├── fragment_queue.xml
│ │ │ ├── fragment_lyrics.xml
│ │ │ ├── fragment_manage_provider.xml
│ │ │ ├── fragment_create_playlist_dialog.xml
│ │ │ ├── fragment_playback_control_bottom_sheet_dialog.xml
│ │ │ ├── fragment_now_playing_stats_bottom_sheet_dialog.xml
│ │ │ ├── fragment_provider_information_bottom_sheet_dialog.xml
│ │ │ └── fragment_add_or_remove_from_playlists.xml
│ │ ├── menu
│ │ │ ├── fragment_album_toolbar.xml
│ │ │ ├── fragment_playlist_toolbar.xml
│ │ │ └── navigation_bar_view_fragment_main.xml
│ │ └── values-sc-rIT
│ │ │ └── strings.xml
│ │ └── java
│ │ └── org
│ │ └── lineageos
│ │ └── twelve
│ │ ├── datasources
│ │ ├── jellyfin
│ │ │ ├── models
│ │ │ │ ├── TODO.kt
│ │ │ │ ├── QueryResult.kt
│ │ │ │ ├── UpdatePlaylist.kt
│ │ │ │ ├── AuthenticateUserResult.kt
│ │ │ │ ├── AuthenticateUser.kt
│ │ │ │ ├── Lyrics.kt
│ │ │ │ ├── UserData.kt
│ │ │ │ ├── CreatePlaylistResult.kt
│ │ │ │ ├── LyricLine.kt
│ │ │ │ ├── PlaylistItems.kt
│ │ │ │ ├── ArtistItem.kt
│ │ │ │ ├── Playlist.kt
│ │ │ │ ├── CreatePlaylist.kt
│ │ │ │ ├── SystemInfo.kt
│ │ │ │ └── ItemType.kt
│ │ │ ├── JellyfinAuthInterceptor.kt
│ │ │ └── serializers
│ │ │ │ └── UUIDSerializer.kt
│ │ └── subsonic
│ │ │ └── models
│ │ │ ├── Songs.kt
│ │ │ ├── Genres.kt
│ │ │ ├── AlbumList.kt
│ │ │ ├── AlbumList2.kt
│ │ │ ├── Playlists.kt
│ │ │ ├── UriAsString.kt
│ │ │ ├── IndexID3.kt
│ │ │ ├── InstantAsString.kt
│ │ │ ├── Genre.kt
│ │ │ ├── ResponseRoot.kt
│ │ │ ├── Lyrics.kt
│ │ │ ├── SearchResult3.kt
│ │ │ ├── ArtistsID3.kt
│ │ │ ├── License.kt
│ │ │ ├── RecordLabel.kt
│ │ │ ├── ItemGenre.kt
│ │ │ ├── DiscTitle.kt
│ │ │ ├── LyricsList.kt
│ │ │ ├── Starred2.kt
│ │ │ ├── ItemDate.kt
│ │ │ ├── Line.kt
│ │ │ ├── Playlist.kt
│ │ │ ├── ArtistID3.kt
│ │ │ ├── UriSerializer.kt
│ │ │ ├── Contributor.kt
│ │ │ ├── ArtistWithAlbumsID3.kt
│ │ │ ├── InstantSerializer.kt
│ │ │ ├── ReplayGain.kt
│ │ │ └── PlaylistWithSongs.kt
│ │ ├── models
│ │ ├── RepeatMode.kt
│ │ ├── PlaybackState.kt
│ │ ├── MediaType.kt
│ │ ├── SortingRule.kt
│ │ ├── ActivityTab.kt
│ │ ├── ArtistWorks.kt
│ │ ├── QueueItem.kt
│ │ ├── GenreContent.kt
│ │ ├── ResumptionPlaylist.kt
│ │ ├── SortingStrategy.kt
│ │ ├── PlaybackProgress.kt
│ │ ├── ColumnIndexCache.kt
│ │ ├── ProviderIdentifier.kt
│ │ ├── DataSourceInformation.kt
│ │ ├── UniqueItem.kt
│ │ ├── Error.kt
│ │ └── Provider.kt
│ │ ├── ext
│ │ ├── ClipData.kt
│ │ ├── Int.kt
│ │ ├── Bitmap.kt
│ │ ├── Configuration.kt
│ │ ├── Flow.kt
│ │ ├── AutoCompleteTextView.kt
│ │ ├── Fragment.kt
│ │ ├── Enum.kt
│ │ ├── AndroidViewModel.kt
│ │ ├── Iterable.kt
│ │ ├── Lifecycle.kt
│ │ ├── Parcelable.kt
│ │ ├── ConflatedCallbackFlow.kt
│ │ ├── NavController.kt
│ │ ├── Cursor.kt
│ │ ├── AppBarLayout.kt
│ │ ├── LinearProgressIndicator.kt
│ │ ├── AudioRouting.kt
│ │ ├── MediaMetadata.kt
│ │ ├── Uri.kt
│ │ ├── TypedArray.kt
│ │ ├── StorageManager.kt
│ │ ├── ImageView.kt
│ │ ├── Context.kt
│ │ ├── List.kt
│ │ └── Array.kt
│ │ ├── ui
│ │ ├── coil
│ │ │ └── ThumbnailMapper.kt
│ │ ├── recyclerview
│ │ │ ├── UniqueItemDiffCallback.kt
│ │ │ └── CenterSmoothScroller.kt
│ │ ├── views
│ │ │ ├── MediaItemGridItem.kt
│ │ │ └── HorizontalMediaItemView.kt
│ │ └── widgets
│ │ │ └── BaseAppWidgetProvider.kt
│ │ ├── database
│ │ ├── converters
│ │ │ ├── UriConverter.kt
│ │ │ └── InstantConverter.kt
│ │ ├── entities
│ │ │ ├── ResumptionPlaylistWithMediaItems.kt
│ │ │ ├── PlaylistWithBoolean.kt
│ │ │ ├── Playlist.kt
│ │ │ ├── PlaylistWithItems.kt
│ │ │ ├── LocalMediaStats.kt
│ │ │ ├── Favorite.kt
│ │ │ ├── ResumptionPlaylist.kt
│ │ │ ├── SubsonicProvider.kt
│ │ │ ├── JellyfinProvider.kt
│ │ │ └── PlaylistItemCrossRef.kt
│ │ └── dao
│ │ │ ├── PlaylistItemCrossRefDao.kt
│ │ │ └── PlaylistWithItemsDao.kt
│ │ ├── utils
│ │ ├── TimestampFormatter.kt
│ │ └── PermissionsUtils.kt
│ │ ├── fragments
│ │ └── MaterialDialogFragment.kt
│ │ ├── viewmodels
│ │ ├── ActivityViewModel.kt
│ │ └── LyricsViewModel.kt
│ │ └── repositories
│ │ └── OutputConfigurationRepository.kt
├── initial-package-stopped-states-org.lineageos.twelve.xml
├── preinstalled-packages-org.lineageos.twelve.xml
└── proguard-rules.pro
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .gitignore
├── .github
└── workflows
│ ├── build.yml
│ ├── build
│ └── action.yml
│ └── gerrit.yml
├── REUSE.toml
└── settings.gradle.kts
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/libs/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: Square, Inc.
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/com/squareup/okio/okio-jvm/3.9.1/okio-jvm-3.9.1.jar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: Square, Inc.
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-android/3.0.4/coil-release.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2019 Coil Contributors
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | local.properties
11 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-ui/1.8.0/media3-ui-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/com/github/bogerchan/Nier-Visualizer/v0.1.3/Nier-Visualizer-v0.1.3.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2017 Boger Chan
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-core-android/3.0.4/coil-core-release.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2019 Coil Contributors
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-common/1.8.0/media3-common-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-decoder/1.8.0/media3-decoder-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-session/1.8.0/media3-session-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-container/1.8.0/media3-container-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-database/1.8.0/media3-database-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer/1.8.0/media3-exoplayer-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-extractor/1.8.0/media3-extractor-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-common-ktx/1.8.0/media3-common-ktx-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-datasource/1.8.0/media3-datasource-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-ui/2.9.5/navigation-ui-2.9.5.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2018 The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-network-core-android/3.0.4/coil-network-core-release.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2019 Coil Contributors
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-network-okhttp-jvm/3.0.4/coil-network-okhttp-jvm-3.0.4.jar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2019 Coil Contributors
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-hls/1.8.0/media3-exoplayer-hls-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-midi/1.8.0/media3-exoplayer-midi-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-rtsp/1.8.0/media3-exoplayer-rtsp-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-ui/1.8.0/media3-ui-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-ui/1.8.0/media3-ui-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-ui-ktx/2.9.5/navigation-ui-ktx-2.9.5.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2018 The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar
--------------------------------------------------------------------------------
/app/libs/com/squareup/okio/okio-jvm/3.9.1/okio-jvm-3.9.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/com/squareup/okio/okio-jvm/3.9.1/okio-jvm-3.9.1.jar
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-android/3.0.4/coil-release.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/io/coil-kt/coil3/coil-android/3.0.4/coil-release.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-fragment/2.9.5/navigation-fragment-2.9.5.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2017 The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-common-android/2.9.5/navigation-common-release.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2017 The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-common/1.8.0/media3-common-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-common/1.8.0/media3-common-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-fragment-ktx/2.9.5/navigation-fragment-ktx-2.9.5.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2018 The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-runtime-android/2.9.5/navigation-runtime-release.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2017 The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-database/1.8.0/media3-database-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-database/1.8.0/media3-database-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-decoder/1.8.0/media3-decoder-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-decoder/1.8.0/media3-decoder-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-session/1.8.0/media3-session-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-session/1.8.0/media3-session-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-ui/2.9.5/navigation-ui-2.9.5.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/navigation/navigation-ui/2.9.5/navigation-ui-2.9.5.aar
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-core-android/3.0.4/coil-core-release.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/io/coil-kt/coil3/coil-core-android/3.0.4/coil-core-release.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-container/1.8.0/media3-container-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-container/1.8.0/media3-container-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-smoothstreaming/1.8.0/media3-exoplayer-smoothstreaming-1.8.0.aar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: The Android Open Source Project
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer/1.8.0/media3-exoplayer-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-exoplayer/1.8.0/media3-exoplayer-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-extractor/1.8.0/media3-extractor-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-extractor/1.8.0/media3-extractor-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/com/github/philburk/jsyn/3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e/jsyn-3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e.jar.license:
--------------------------------------------------------------------------------
1 | SPDX-FileCopyrightText: 2014 Phil Burk
2 |
3 | SPDX-License-Identifier: Apache-2.0
4 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-common-ktx/1.8.0/media3-common-ktx-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-common-ktx/1.8.0/media3-common-ktx-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-datasource/1.8.0/media3-datasource-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-datasource/1.8.0/media3-datasource-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/com/github/bogerchan/Nier-Visualizer/v0.1.3/Nier-Visualizer-v0.1.3.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/com/github/bogerchan/Nier-Visualizer/v0.1.3/Nier-Visualizer-v0.1.3.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-hls/1.8.0/media3-exoplayer-hls-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-exoplayer-hls/1.8.0/media3-exoplayer-hls-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-ui-ktx/2.9.5/navigation-ui-ktx-2.9.5.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/navigation/navigation-ui-ktx/2.9.5/navigation-ui-ktx-2.9.5.aar
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-midi/1.8.0/media3-exoplayer-midi-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-exoplayer-midi/1.8.0/media3-exoplayer-midi-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-rtsp/1.8.0/media3-exoplayer-rtsp-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-exoplayer-rtsp/1.8.0/media3-exoplayer-rtsp-1.8.0.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-fragment/2.9.5/navigation-fragment-2.9.5.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/navigation/navigation-fragment/2.9.5/navigation-fragment-2.9.5.aar
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-network-core-android/3.0.4/coil-network-core-release.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/io/coil-kt/coil3/coil-network-core-android/3.0.4/coil-network-core-release.aar
--------------------------------------------------------------------------------
/app/libs/io/coil-kt/coil3/coil-network-okhttp-jvm/3.0.4/coil-network-okhttp-jvm-3.0.4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/io/coil-kt/coil3/coil-network-okhttp-jvm/3.0.4/coil-network-okhttp-jvm-3.0.4.jar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-common-android/2.9.5/navigation-common-release.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/navigation/navigation-common-android/2.9.5/navigation-common-release.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-fragment-ktx/2.9.5/navigation-fragment-ktx-2.9.5.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/navigation/navigation-fragment-ktx/2.9.5/navigation-fragment-ktx-2.9.5.aar
--------------------------------------------------------------------------------
/app/libs/androidx/navigation/navigation-runtime-android/2.9.5/navigation-runtime-release.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/navigation/navigation-runtime-android/2.9.5/navigation-runtime-release.aar
--------------------------------------------------------------------------------
/app/src/main/res/xml/automotive_app_desc.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/libs/androidx/media3/media3-exoplayer-smoothstreaming/1.8.0/media3-exoplayer-smoothstreaming-1.8.0.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/androidx/media3/media3-exoplayer-smoothstreaming/1.8.0/media3-exoplayer-smoothstreaming-1.8.0.aar
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/jellyfin/models/TODO.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.jellyfin.models
7 |
8 | typealias TODO = (Nothing?)
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values-uk/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | Видалити
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens_ListItem.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | 16dp
8 |
9 |
--------------------------------------------------------------------------------
/app/libs/com/github/philburk/jsyn/3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e/jsyn-3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LineageOS/android_packages_apps_Twelve/HEAD/app/libs/com/github/philburk/jsyn/3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e/jsyn-3f6b44b853bccc0d2e3027104d575fcc5ccb6d4e.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: build
2 |
3 | on: [push, pull_request, workflow_dispatch]
4 |
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 |
9 | steps:
10 | - name: Checkout repo
11 | uses: actions/checkout@v4
12 |
13 | - name: Build
14 | uses: ./.github/workflows/build
15 |
--------------------------------------------------------------------------------
/app/initial-package-stopped-states-org.lineageos.twelve.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values-be/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | Разблакіраваць змяненне вышыні тону
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/RepeatMode.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | /**
9 | * Playback repeat mode.
10 | */
11 | enum class RepeatMode {
12 | NONE,
13 | ALL,
14 | ONE,
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/PlaybackState.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | /**
9 | * Player playback status.
10 | */
11 | enum class PlaybackState {
12 | IDLE,
13 | BUFFERING,
14 | READY,
15 | ENDED,
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs_AppWidget.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_app_widget_round_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_app_widget.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs_NowPlayingBar.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/ClipData.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023-2025 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import android.content.ClipData
9 |
10 | fun ClipData.asArray() = buildList {
11 | for (i in 0 until itemCount) {
12 | add(getItemAt(i))
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/MediaType.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | /**
9 | * Media types handled by the data sources.
10 | */
11 | enum class MediaType {
12 | ALBUM,
13 | ARTIST,
14 | AUDIO,
15 | GENRE,
16 | PLAYLIST,
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/Int.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 | package org.lineageos.twelve.ext
6 |
7 | import android.content.res.Resources.getSystem
8 | import kotlin.math.roundToInt
9 |
10 | /**
11 | * dp -> px.
12 | */
13 | val Int.px
14 | get() = (this * getSystem().displayMetrics.density).roundToInt()
15 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/Bitmap.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import android.graphics.Bitmap
9 | import java.nio.ByteBuffer
10 |
11 | fun Bitmap.toByteArray(): ByteArray = ByteBuffer.allocate(rowBytes * height).apply {
12 | copyPixelsToBuffer(this)
13 | }.array()
14 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/Songs.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class Songs(
13 | val song: List,
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/res/values-ka/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | პროგრამა უზრუნველყოფს ხმოვან მონაცემთა შეკუმშვას დანაკარგიანი დაშიფვრით. ხმის ხარისხზე შეიძლება იმოქმედოს.
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/Genres.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class Genres(
13 | val genre: List,
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/AlbumList.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class AlbumList(
13 | val album: List,
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/AlbumList2.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class AlbumList2(
13 | val album: List,
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/Playlists.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class Playlists(
13 | val playlist: List,
14 | )
15 |
--------------------------------------------------------------------------------
/app/src/main/res/color/textview_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/UriAsString.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import android.net.Uri
9 | import kotlinx.serialization.Serializable
10 |
11 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
12 | typealias UriAsString = @Serializable(with = UriSerializer::class) Uri
13 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/IndexID3.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class IndexID3(
13 | val artist: List,
14 | val name: String,
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/Configuration.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import android.content.res.Configuration
9 |
10 | /**
11 | * Return whether the orientation is [Configuration.ORIENTATION_LANDSCAPE].
12 | */
13 | val Configuration.isLandscape
14 | get() = orientation == Configuration.ORIENTATION_LANDSCAPE
15 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/InstantAsString.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 | import java.time.Instant
10 |
11 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
12 | typealias InstantAsString = @Serializable(with = InstantSerializer::class) Instant
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v31/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/Genre.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class Genre(
13 | val value: String,
14 | val songCount: Int,
15 | val albumCount: Int,
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ui/coil/ThumbnailMapper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ui.coil
7 |
8 | import coil3.map.Mapper
9 | import coil3.request.Options
10 | import org.lineageos.twelve.models.Thumbnail
11 |
12 | object ThumbnailMapper : Mapper {
13 | override fun map(data: Thumbnail, options: Options) = data.bitmap ?: data.uri
14 | }
15 |
--------------------------------------------------------------------------------
/app/preinstalled-packages-org.lineageos.twelve.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/Flow.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import android.database.Cursor
9 | import kotlinx.coroutines.flow.Flow
10 | import kotlinx.coroutines.flow.map
11 | import org.lineageos.twelve.models.ColumnIndexCache
12 |
13 | fun Flow.mapEachRow(
14 | mapping: (ColumnIndexCache) -> T,
15 | ) = map { it.mapEachRow(mapping) }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/jellyfin/models/QueryResult.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.jellyfin.models
7 |
8 | import kotlinx.serialization.SerialName
9 | import kotlinx.serialization.Serializable
10 |
11 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
12 | @Serializable
13 | data class QueryResult(
14 | @SerialName("Items") val items: List- ,
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/jellyfin/models/UpdatePlaylist.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.jellyfin.models
7 |
8 | import kotlinx.serialization.SerialName
9 | import kotlinx.serialization.Serializable
10 |
11 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
12 | @Serializable
13 | data class UpdatePlaylist(
14 | @SerialName("Name") val name: String,
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/res/color/lyrics_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/color/list_item_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_item_header_scrim.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/ResponseRoot.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class ResponseRoot(
13 | @kotlinx.serialization.SerialName("subsonic-response")
14 | val subsonicResponse: SubsonicResponse,
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/Lyrics.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2025 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | /**
11 | * Lyrics.
12 | */
13 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
14 | @Serializable
15 | data class Lyrics(
16 | val value: String,
17 | val artist: String? = null,
18 | val title: String? = null,
19 | )
20 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/jellyfin/models/AuthenticateUserResult.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.jellyfin.models
7 |
8 | import kotlinx.serialization.SerialName
9 | import kotlinx.serialization.Serializable
10 |
11 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
12 | @Serializable
13 | data class AuthenticateUserResult(
14 | @SerialName("AccessToken") val accessToken: String? = null,
15 | )
16 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/SearchResult3.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class SearchResult3(
13 | val artist: List? = null,
14 | val album: List? = null,
15 | val song: List? = null,
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/database/converters/UriConverter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.database.converters
7 |
8 | import android.net.Uri
9 | import androidx.core.net.toUri
10 | import androidx.room.TypeConverter
11 |
12 | class UriConverter {
13 | @TypeConverter
14 | fun fromString(value: String?) = value?.toUri()
15 |
16 | @TypeConverter
17 | fun toString(uri: Uri?) = uri?.toString()
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/AutoCompleteTextView.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import android.widget.AutoCompleteTextView
9 |
10 | fun AutoCompleteTextView.selectItem(position: Int = 0) {
11 | setText(adapter.getItem(position).toString(), false)
12 | showDropDown()
13 | setSelection(position)
14 | listSelection = position
15 | performCompletion()
16 | dismissDropDown()
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/ArtistsID3.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class ArtistsID3(
13 | val index: List,
14 | val ignoredArticles: String,
15 |
16 | // Navidrome
17 | val lastModified: Long? = null, // TODO
18 | )
19 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/jellyfin/models/AuthenticateUser.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.jellyfin.models
7 |
8 | import kotlinx.serialization.SerialName
9 | import kotlinx.serialization.Serializable
10 |
11 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
12 | @Serializable
13 | data class AuthenticateUser(
14 | @SerialName("Username") val username: String,
15 | @SerialName("Pw") val password: String,
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/Fragment.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import android.view.View
9 | import androidx.annotation.IdRes
10 | import androidx.fragment.app.Fragment
11 | import kotlin.properties.ReadOnlyProperty
12 |
13 | inline fun getViewProperty(@IdRes viewId: Int) =
14 | ReadOnlyProperty { thisRef, _ ->
15 | thisRef.requireView().findViewById(viewId)
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/settingslib_switch.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/settingslib_switch_compat.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/License.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2025 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
11 | @Serializable
12 | data class License(
13 | val valid: Boolean,
14 | val email: String? = null,
15 | val licenseExpires: InstantAsString? = null,
16 | val trialExpires: InstantAsString? = null,
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/RecordLabel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | /**
11 | * A record label for an album.
12 | *
13 | * Note: OpenSubsonic only.
14 | *
15 | * @param name The record label name
16 | */
17 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
18 | @Serializable
19 | data class RecordLabel(
20 | val name: String,
21 | )
22 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/ItemGenre.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | /**
11 | * A genre returned in list of genres for an item.
12 | *
13 | * Note: OpenSubsonic only.
14 | *
15 | * @param name Genre name
16 | */
17 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
18 | @Serializable
19 | data class ItemGenre(
20 | val name: String,
21 | )
22 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/Enum.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | /**
9 | * Get the previous value.
10 | */
11 | internal inline fun > E.previous() = enumValues().previous(
12 | this
13 | ) ?: throw Exception("No enum values")
14 |
15 | /**
16 | * Get the next value.
17 | */
18 | internal inline fun > E.next() = enumValues().next(
19 | this
20 | ) ?: throw Exception("No enum values")
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/lyrics_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/SortingRule.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | /**
9 | * Rules for sorting data.
10 | * Data providers must do a best effort attempt to respect the rules.
11 | *
12 | * @param strategy The strategy to use for sorting
13 | * @param reverse If the data should be sorted in descending order
14 | */
15 | data class SortingRule(
16 | val strategy: SortingStrategy,
17 | val reverse: Boolean = false,
18 | )
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/now_playing_marker.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/color/list_item_primary.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/color/list_item_secondary.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_remove.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/database/entities/ResumptionPlaylistWithMediaItems.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.database.entities
7 |
8 | import androidx.room.Embedded
9 | import androidx.room.Relation
10 |
11 | data class ResumptionPlaylistWithMediaItems(
12 | @Embedded val resumptionPlaylist: ResumptionPlaylist,
13 | @Relation(
14 | parentColumn = "resumption_id",
15 | entityColumn = "resumption_playlist_id",
16 | ) val items: List,
17 | )
18 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/AndroidViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2023-2025 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import android.app.Application
9 | import android.content.Context
10 | import android.content.res.Resources
11 | import androidx.lifecycle.AndroidViewModel
12 |
13 | val AndroidViewModel.applicationContext: Context
14 | get() = getApplication().applicationContext
15 |
16 | val AndroidViewModel.resources: Resources
17 | get() = getApplication().resources
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_drop_down.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
13 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/provider_more_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ext/Iterable.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2025 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ext
7 |
8 | import kotlinx.coroutines.async
9 | import kotlinx.coroutines.awaitAll
10 | import kotlinx.coroutines.coroutineScope
11 |
12 | /**
13 | * Maps a list of elements asynchronously.
14 | */
15 | suspend fun Iterable.mapAsync(
16 | transform: suspend (T) -> R,
17 | ): List = coroutineScope {
18 | map {
19 | async {
20 | transform(it)
21 | }
22 | }.awaitAll()
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/ActivityTab.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | data class ActivityTab(
9 | val id: String,
10 | val title: LocalizedString,
11 | val items: List>,
12 | ) : UniqueItem {
13 | override fun areItemsTheSame(other: ActivityTab) = id == other.id
14 |
15 | override fun areContentsTheSame(other: ActivityTab) =
16 | title == other.title && items.toTypedArray().contentEquals(other.items.toTypedArray())
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/ArtistWorks.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | /**
9 | * Whatever an artist has worked on.
10 | *
11 | * @param albums Albums released by the artist
12 | * @param appearsInAlbum Albums on which the artist appears
13 | * @param appearsInPlaylist Playlists on which the artist appears
14 | */
15 | data class ArtistWorks(
16 | val albums: List,
17 | val appearsInAlbum: List,
18 | val appearsInPlaylist: List,
19 | )
20 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/datasources/subsonic/models/DiscTitle.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.datasources.subsonic.models
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | /**
11 | * A disc title for an album.
12 | *
13 | * Note: OpenSubsonic only.
14 | *
15 | * @param disc The disc number
16 | * @param title The name of the disc
17 | */
18 | @Suppress("PROVIDED_RUNTIME_TOO_LOW")
19 | @Serializable
20 | data class DiscTitle(
21 | val disc: Int,
22 | val title: String,
23 | )
24 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/QueueItem.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | import androidx.media3.common.MediaItem
9 |
10 | data class QueueItem(
11 | val mediaItem: MediaItem,
12 | val isCurrent: Boolean,
13 | ) : UniqueItem {
14 | override fun areItemsTheSame(other: QueueItem) = mediaItem.mediaId == other.mediaItem.mediaId
15 |
16 | override fun areContentsTheSame(other: QueueItem) =
17 | mediaItem == other.mediaItem && isCurrent == other.isCurrent
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_keyboard_arrow_down.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
12 |
13 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/ui/recyclerview/UniqueItemDiffCallback.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.ui.recyclerview
7 |
8 | import androidx.recyclerview.widget.DiffUtil
9 | import org.lineageos.twelve.models.UniqueItem
10 |
11 | class UniqueItemDiffCallback> : DiffUtil.ItemCallback() {
12 | override fun areItemsTheSame(oldItem: T, newItem: T) = oldItem.areItemsTheSame(newItem)
13 |
14 | override fun areContentsTheSame(oldItem: T, newItem: T) = oldItem.areContentsTheSame(newItem)
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/org/lineageos/twelve/models/GenreContent.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * SPDX-FileCopyrightText: 2024 The LineageOS Project
3 | * SPDX-License-Identifier: Apache-2.0
4 | */
5 |
6 | package org.lineageos.twelve.models
7 |
8 | /**
9 | * Content related to a certain genre.
10 | *
11 | * @param appearsInAlbums Albums with audios related to this genre
12 | * @param appearsInPlaylists Playlists with audios related to this genre
13 | * @param audios Audios related to this genre
14 | */
15 | data class GenreContent(
16 | val appearsInAlbums: List,
17 | val appearsInPlaylists: List,
18 | val audios: List