├── 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