10 Commits

13 changed files with 6014 additions and 17 deletions

1
.idea/misc.xml generated
View File

@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="DesignSurface"> <component name="DesignSurface">
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">

View File

@@ -68,12 +68,14 @@ android {
buildConfig true buildConfig true
} }
lintOptions {
baseline file("lint-baseline.xml")
}
namespace 'com.cappielloantonio.tempo' namespace 'com.cappielloantonio.tempo'
} }
dependencies { dependencies {
implementation files('../libs/lib-decoder-ffmpeg-release.aar')
// AndroidX // AndroidX
implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.3.0' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.3.0'
@@ -84,6 +86,7 @@ dependencies {
implementation 'androidx.room:room-runtime:2.8.4' implementation 'androidx.room:room-runtime:2.8.4'
implementation 'androidx.core:core-splashscreen:1.2.0' implementation 'androidx.core:core-splashscreen:1.2.0'
implementation 'androidx.appcompat:appcompat:1.7.1' implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.mediarouter:mediarouter:1.8.1'
// Android Material // Android Material
implementation 'com.google.android.material:material:1.13.0' implementation 'com.google.android.material:material:1.13.0'
@@ -108,4 +111,7 @@ dependencies {
implementation 'com.squareup.retrofit2:retrofit:3.0.0' implementation 'com.squareup.retrofit2:retrofit:3.0.0'
implementation 'com.squareup.okhttp3:logging-interceptor:5.3.2' implementation 'com.squareup.okhttp3:logging-interceptor:5.3.2'
implementation 'com.squareup.retrofit2:converter-gson:3.0.0' implementation 'com.squareup.retrofit2:converter-gson:3.0.0'
// Jellyfin
implementation 'org.jellyfin.media3:media3-ffmpeg-decoder:1.8.0+1'
} }

5972
app/lint-baseline.xml Normal file

File diff suppressed because one or more lines are too long

View File

@@ -157,7 +157,7 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
albums.sort(Comparator.comparing(AlbumID3::getName)); albums.sort(Comparator.comparing(AlbumID3::getName));
break; break;
case Constants.ALBUM_ORDER_BY_ARTIST: case Constants.ALBUM_ORDER_BY_ARTIST:
albums.sort(Comparator.comparing(AlbumID3::getArtist)); albums.sort(Comparator.comparing(AlbumID3::getArtist, Comparator.nullsLast(Comparator.naturalOrder())));
break; break;
case Constants.ALBUM_ORDER_BY_YEAR: case Constants.ALBUM_ORDER_BY_YEAR:
albums.sort(Comparator.comparing(AlbumID3::getYear)); albums.sort(Comparator.comparing(AlbumID3::getYear));

View File

@@ -129,17 +129,22 @@ public class PlaylistPageFragment extends Fragment implements ClickCallback {
playlistPageViewModel.getPlaylistSongLiveList().observe(getViewLifecycleOwner(), songs -> { playlistPageViewModel.getPlaylistSongLiveList().observe(getViewLifecycleOwner(), songs -> {
if (isVisible() && getActivity() != null) { if (isVisible() && getActivity() != null) {
DownloadUtil.getDownloadTracker(requireContext()).download( DownloadUtil.getDownloadTracker(requireContext()).download(
MappingUtil.mapDownloads(songs), MappingUtil.mapDownloads(songs),
songs.stream().map(child -> { songs.stream().map(child -> {
Download toDownload = new Download(child); Download toDownload = new Download(child);
toDownload.setPlaylistId(playlistPageViewModel.getPlaylist().getId()); toDownload.setPlaylistId(playlistPageViewModel.getPlaylist().getId());
toDownload.setPlaylistName(playlistPageViewModel.getPlaylist().getName()); toDownload.setPlaylistName(playlistPageViewModel.getPlaylist().getName());
return toDownload; return toDownload;
}).collect(Collectors.toList()) }).collect(Collectors.toList())
); );
} }
}); });
return true; return true;
} else if (item.getItemId() == R.id.action_add_to_queue) {
playlistPageViewModel.getPlaylistSongLiveList().observe(getViewLifecycleOwner(), songs -> {
MediaManager.enqueue(mediaBrowserListenableFuture, songs, false);
});
return true;
} else if (item.getItemId() == R.id.action_pin_playlist) { } else if (item.getItemId() == R.id.action_pin_playlist) {
playlistPageViewModel.setPinned(true); playlistPageViewModel.setPinned(true);
return true; return true;

View File

@@ -36,6 +36,7 @@
android:paddingStart="24dp" android:paddingStart="24dp"
android:paddingEnd="24dp" android:paddingEnd="24dp"
android:visibility="gone" android:visibility="gone"
android:background="?attr/colorSurface"
app:menu="@menu/bottom_nav_menu" /> app:menu="@menu/bottom_nav_menu" />
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -13,6 +13,13 @@
android:icon="@drawable/ic_file_download" android:icon="@drawable/ic_file_download"
android:title="@string/menu_download_all_button" android:title="@string/menu_download_all_button"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/action_add_to_queue"
android:icon="@drawable/ic_add"
android:title="@string/menu_add_to_queue_button"
app:showAsAction="never" />
<item <item
android:id="@+id/action_pin_playlist" android:id="@+id/action_pin_playlist"
android:icon="@drawable/ic_add" android:icon="@drawable/ic_add"

View File

@@ -157,6 +157,7 @@
<string name="login_title">Subsonic servers</string> <string name="login_title">Subsonic servers</string>
<string name="login_title_expanded">Subsonic servers</string> <string name="login_title_expanded">Subsonic servers</string>
<string name="media_route_menu_title">Cast</string> <string name="media_route_menu_title">Cast</string>
<string name="menu_add_to_queue_button">Add to queue</string>
<string name="menu_add_button">Add</string> <string name="menu_add_button">Add</string>
<string name="menu_download_all_button">Download all</string> <string name="menu_download_all_button">Download all</string>
<string name="menu_download_label">Download</string> <string name="menu_download_label">Download</string>

View File

@@ -7,9 +7,15 @@
android:title="@string/menu_search_button" android:title="@string/menu_search_button"
app:showAsAction="always" /> app:showAsAction="always" />
<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="androidx.mediarouter.app.MediaRouteActionProvider"
app:showAsAction="ifRoom" />
<item <item
android:id="@+id/action_settings" android:id="@+id/action_settings"
android:icon="@drawable/ic_settings" android:icon="@drawable/ic_settings"
android:title="@string/menu_settings_button" android:title="@string/menu_settings_button"
app:showAsAction="never" /> app:showAsAction="ifRoom" />
</menu> </menu>

Binary file not shown.