mirror of
https://github.com/antebudimir/tempus.git
synced 2025-12-31 17:43:32 +00:00
Code decontextualization
This commit is contained in:
parent
f16650a74b
commit
a4b31a9c02
108 changed files with 569 additions and 952 deletions
|
|
@ -15,6 +15,7 @@ import com.google.android.material.color.DynamicColors;
|
||||||
|
|
||||||
public class App extends Application {
|
public class App extends Application {
|
||||||
private static App instance;
|
private static App instance;
|
||||||
|
private static Context context;
|
||||||
private static Subsonic subsonic;
|
private static Subsonic subsonic;
|
||||||
private static SharedPreferences preferences;
|
private static SharedPreferences preferences;
|
||||||
|
|
||||||
|
|
@ -27,6 +28,8 @@ public class App extends Application {
|
||||||
String themePref = sharedPreferences.getString(Preferences.THEME, ThemeHelper.DEFAULT_MODE);
|
String themePref = sharedPreferences.getString(Preferences.THEME, ThemeHelper.DEFAULT_MODE);
|
||||||
ThemeHelper.applyTheme(themePref);
|
ThemeHelper.applyTheme(themePref);
|
||||||
|
|
||||||
|
instance = new App();
|
||||||
|
context = getApplicationContext();
|
||||||
preferences = getSharedPreferences(Constants.SHARED_PREF_KEY, Context.MODE_PRIVATE);
|
preferences = getSharedPreferences(Constants.SHARED_PREF_KEY, Context.MODE_PRIVATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -34,12 +37,21 @@ public class App extends Application {
|
||||||
if (instance == null) {
|
if (instance == null) {
|
||||||
instance = new App();
|
instance = new App();
|
||||||
}
|
}
|
||||||
|
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Subsonic getSubsonicClientInstance(Context context, boolean override) {
|
public static Context getContext() {
|
||||||
|
if (context == null) {
|
||||||
|
context = getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Subsonic getSubsonicClientInstance(boolean override) {
|
||||||
if (subsonic == null || override) {
|
if (subsonic == null || override) {
|
||||||
subsonic = getSubsonicClient(context);
|
subsonic = getSubsonicClient();
|
||||||
}
|
}
|
||||||
return subsonic;
|
return subsonic;
|
||||||
}
|
}
|
||||||
|
|
@ -52,7 +64,7 @@ public class App extends Application {
|
||||||
return preferences;
|
return preferences;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Subsonic getSubsonicClient(Context context) {
|
private static Subsonic getSubsonicClient() {
|
||||||
String server = Preferences.getServer();
|
String server = Preferences.getServer();
|
||||||
String username = Preferences.getUser();
|
String username = Preferences.getUser();
|
||||||
String password = Preferences.getPassword();
|
String password = Preferences.getPassword();
|
||||||
|
|
@ -74,6 +86,6 @@ public class App extends Application {
|
||||||
Preferences.setSalt(preferences.getAuthentication().getSalt());
|
Preferences.setSalt(preferences.getAuthentication().getSalt());
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Subsonic(context, preferences);
|
return new Subsonic(preferences);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibraryAlbumBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
|
|
@ -23,13 +19,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder> {
|
public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<AlbumID3> albums;
|
private List<AlbumID3> albums;
|
||||||
|
|
||||||
public AlbumAdapter(Context context, ClickCallback click) {
|
public AlbumAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.albums = Collections.emptyList();
|
this.albums = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -37,7 +31,7 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_album, parent, false);
|
ItemLibraryAlbumBinding view = ItemLibraryAlbumBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,14 +39,14 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
AlbumID3 album = albums.get(position);
|
AlbumID3 album = albums.get(position);
|
||||||
|
|
||||||
holder.textAlbumName.setText(MusicUtil.getReadableString(album.getName()));
|
holder.item.albumNameLabel.setText(MusicUtil.getReadableString(album.getName()));
|
||||||
holder.textArtistName.setText(MusicUtil.getReadableString(album.getArtist()));
|
holder.item.artistNameLabel.setText(MusicUtil.getReadableString(album.getArtist()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
.from(holder.itemView.getContext(), album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.albumCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -70,19 +64,15 @@ public class AlbumAdapter extends RecyclerView.Adapter<AlbumAdapter.ViewHolder>
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textAlbumName;
|
ItemLibraryAlbumBinding item;
|
||||||
TextView textArtistName;
|
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibraryAlbumBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textAlbumName = itemView.findViewById(R.id.album_name_label);
|
this.item = item;
|
||||||
textArtistName = itemView.findViewById(R.id.artist_name_label);
|
|
||||||
cover = itemView.findViewById(R.id.album_cover_image_view);
|
|
||||||
|
|
||||||
textAlbumName.setSelected(true);
|
item.albumNameLabel.setSelected(true);
|
||||||
textArtistName.setSelected(true);
|
item.artistNameLabel.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibraryArtistPageOrSimilarAlbumBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
|
|
@ -23,13 +19,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AlbumArtistPageOrSimilarAdapter extends RecyclerView.Adapter<AlbumArtistPageOrSimilarAdapter.ViewHolder> {
|
public class AlbumArtistPageOrSimilarAdapter extends RecyclerView.Adapter<AlbumArtistPageOrSimilarAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<AlbumID3> albums;
|
private List<AlbumID3> albums;
|
||||||
|
|
||||||
public AlbumArtistPageOrSimilarAdapter(Context context, ClickCallback click) {
|
public AlbumArtistPageOrSimilarAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.albums = Collections.emptyList();
|
this.albums = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -37,7 +31,7 @@ public class AlbumArtistPageOrSimilarAdapter extends RecyclerView.Adapter<AlbumA
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_artist_page_or_similar_album, parent, false);
|
ItemLibraryArtistPageOrSimilarAlbumBinding view = ItemLibraryArtistPageOrSimilarAlbumBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,14 +39,14 @@ public class AlbumArtistPageOrSimilarAdapter extends RecyclerView.Adapter<AlbumA
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
AlbumID3 album = albums.get(position);
|
AlbumID3 album = albums.get(position);
|
||||||
|
|
||||||
holder.textAlbumName.setText(MusicUtil.getReadableString(album.getName()));
|
holder.item.albumNameLabel.setText(MusicUtil.getReadableString(album.getName()));
|
||||||
holder.textArtistName.setText(MusicUtil.getReadableString(album.getArtist()));
|
holder.item.artistNameLabel.setText(MusicUtil.getReadableString(album.getArtist()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
.from(holder.itemView.getContext(), album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.artistPageAlbumCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -70,19 +64,15 @@ public class AlbumArtistPageOrSimilarAdapter extends RecyclerView.Adapter<AlbumA
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textAlbumName;
|
ItemLibraryArtistPageOrSimilarAlbumBinding item;
|
||||||
TextView textArtistName;
|
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibraryArtistPageOrSimilarAlbumBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textAlbumName = itemView.findViewById(R.id.album_name_label);
|
this.item = item;
|
||||||
textArtistName = itemView.findViewById(R.id.artist_name_label);
|
|
||||||
cover = itemView.findViewById(R.id.artist_page_album_cover_image_view);
|
|
||||||
|
|
||||||
textAlbumName.setSelected(true);
|
item.albumNameLabel.setSelected(true);
|
||||||
textArtistName.setSelected(true);
|
item.artistNameLabel.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,17 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Filter;
|
import android.widget.Filter;
|
||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibraryCatalogueAlbumBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.model.Album;
|
import com.cappielloantonio.play.model.Album;
|
||||||
|
|
@ -28,7 +24,6 @@ import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAdapter.ViewHolder> implements Filterable {
|
public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAdapter.ViewHolder> implements Filterable {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
private final Filter filtering = new Filter() {
|
private final Filter filtering = new Filter() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -64,8 +59,7 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
|
||||||
private List<AlbumID3> albums;
|
private List<AlbumID3> albums;
|
||||||
private List<AlbumID3> albumsFull;
|
private List<AlbumID3> albumsFull;
|
||||||
|
|
||||||
public AlbumCatalogueAdapter(Context context, ClickCallback click) {
|
public AlbumCatalogueAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.albums = Collections.emptyList();
|
this.albums = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -73,7 +67,7 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_catalogue_album, parent, false);
|
ItemLibraryCatalogueAlbumBinding view = ItemLibraryCatalogueAlbumBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -81,14 +75,14 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
AlbumID3 album = albums.get(position);
|
AlbumID3 album = albums.get(position);
|
||||||
|
|
||||||
holder.textAlbumName.setText(MusicUtil.getReadableString(album.getName()));
|
holder.item.albumNameLabel.setText(MusicUtil.getReadableString(album.getName()));
|
||||||
holder.textArtistName.setText(MusicUtil.getReadableString(album.getArtist()));
|
holder.item.artistNameLabel.setText(MusicUtil.getReadableString(album.getArtist()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
.from(holder.itemView.getContext(), album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.albumCatalogueCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -122,19 +116,15 @@ public class AlbumCatalogueAdapter extends RecyclerView.Adapter<AlbumCatalogueAd
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textAlbumName;
|
ItemLibraryCatalogueAlbumBinding item;
|
||||||
TextView textArtistName;
|
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibraryCatalogueAlbumBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textAlbumName = itemView.findViewById(R.id.album_name_label);
|
this.item = item;
|
||||||
textArtistName = itemView.findViewById(R.id.artist_name_label);
|
|
||||||
cover = itemView.findViewById(R.id.album_catalogue_cover_image_view);
|
|
||||||
|
|
||||||
textAlbumName.setSelected(true);
|
item.albumNameLabel.setSelected(true);
|
||||||
textArtistName.setSelected(true);
|
item.artistNameLabel.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemHorizontalAlbumBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
|
|
@ -23,14 +19,12 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AlbumHorizontalAdapter extends RecyclerView.Adapter<AlbumHorizontalAdapter.ViewHolder> {
|
public class AlbumHorizontalAdapter extends RecyclerView.Adapter<AlbumHorizontalAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
private final boolean isOffline;
|
private final boolean isOffline;
|
||||||
|
|
||||||
private List<AlbumID3> albums;
|
private List<AlbumID3> albums;
|
||||||
|
|
||||||
public AlbumHorizontalAdapter(Context context, ClickCallback click, boolean isOffline) {
|
public AlbumHorizontalAdapter(ClickCallback click, boolean isOffline) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.isOffline = isOffline;
|
this.isOffline = isOffline;
|
||||||
this.albums = Collections.emptyList();
|
this.albums = Collections.emptyList();
|
||||||
|
|
@ -39,7 +33,7 @@ public class AlbumHorizontalAdapter extends RecyclerView.Adapter<AlbumHorizontal
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal_album, parent, false);
|
ItemHorizontalAlbumBinding view = ItemHorizontalAlbumBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -47,14 +41,14 @@ public class AlbumHorizontalAdapter extends RecyclerView.Adapter<AlbumHorizontal
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
AlbumID3 album = albums.get(position);
|
AlbumID3 album = albums.get(position);
|
||||||
|
|
||||||
holder.albumTitle.setText(MusicUtil.getReadableString(album.getName()));
|
holder.item.albumTitleTextView.setText(MusicUtil.getReadableString(album.getName()));
|
||||||
holder.albumArtist.setText(MusicUtil.getReadableString(album.getArtist()));
|
holder.item.albumArtistTextView.setText(MusicUtil.getReadableString(album.getArtist()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
.from(holder.itemView.getContext(), album.getCoverArtId(), CustomGlideRequest.ALBUM_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.albumCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -72,25 +66,19 @@ public class AlbumHorizontalAdapter extends RecyclerView.Adapter<AlbumHorizontal
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView albumTitle;
|
ItemHorizontalAlbumBinding item;
|
||||||
TextView albumArtist;
|
|
||||||
ImageView more;
|
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHorizontalAlbumBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
albumTitle = itemView.findViewById(R.id.album_title_text_view);
|
this.item = item;
|
||||||
albumArtist = itemView.findViewById(R.id.album_artist_text_view);
|
|
||||||
more = itemView.findViewById(R.id.album_more_button);
|
|
||||||
cover = itemView.findViewById(R.id.album_cover_image_view);
|
|
||||||
|
|
||||||
albumTitle.setSelected(true);
|
item.albumTitleTextView.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
||||||
more.setOnClickListener(v -> onLongClick());
|
item.albumMoreButton.setOnClickListener(v -> onLongClick());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onClick() {
|
private void onClick() {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,8 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
|
|
@ -14,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibraryArtistBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
|
|
@ -25,15 +21,13 @@ import java.util.List;
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder> {
|
public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
private final boolean mix;
|
private final boolean mix;
|
||||||
private final boolean bestOf;
|
private final boolean bestOf;
|
||||||
|
|
||||||
private List<ArtistID3> artists;
|
private List<ArtistID3> artists;
|
||||||
|
|
||||||
public ArtistAdapter(Context context, ClickCallback click, Boolean mix, Boolean bestOf) {
|
public ArtistAdapter(ClickCallback click, Boolean mix, Boolean bestOf) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.mix = mix;
|
this.mix = mix;
|
||||||
this.bestOf = bestOf;
|
this.bestOf = bestOf;
|
||||||
|
|
@ -43,7 +37,7 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_artist, parent, false);
|
ItemLibraryArtistBinding view = ItemLibraryArtistBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -51,9 +45,13 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
ArtistID3 artist = artists.get(position);
|
ArtistID3 artist = artists.get(position);
|
||||||
|
|
||||||
holder.textArtistName.setText(MusicUtil.getReadableString(artist.getName()));
|
holder.item.artistNameLabel.setText(MusicUtil.getReadableString(artist.getName()));
|
||||||
|
|
||||||
setArtistCover(artist, holder.cover);
|
CustomGlideRequest.Builder
|
||||||
|
.from(holder.itemView.getContext(), artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
||||||
|
.build()
|
||||||
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
|
.into(holder.item.artistCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -80,25 +78,15 @@ public class ArtistAdapter extends RecyclerView.Adapter<ArtistAdapter.ViewHolder
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setArtistCover(ArtistID3 artist, ImageView cover) {
|
|
||||||
CustomGlideRequest.Builder
|
|
||||||
.from(context, artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
|
||||||
.build()
|
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
|
||||||
.into(cover);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textArtistName;
|
ItemLibraryArtistBinding item;
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibraryArtistBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textArtistName = itemView.findViewById(R.id.artist_name_label);
|
this.item = item;
|
||||||
cover = itemView.findViewById(R.id.artist_cover_image_view);
|
|
||||||
|
|
||||||
textArtistName.setSelected(true);
|
item.artistNameLabel.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,17 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Filter;
|
import android.widget.Filter;
|
||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibraryCatalogueArtistBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.model.Artist;
|
import com.cappielloantonio.play.model.Artist;
|
||||||
|
|
@ -28,7 +24,6 @@ import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ArtistCatalogueAdapter extends RecyclerView.Adapter<ArtistCatalogueAdapter.ViewHolder> implements Filterable {
|
public class ArtistCatalogueAdapter extends RecyclerView.Adapter<ArtistCatalogueAdapter.ViewHolder> implements Filterable {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private final Filter filtering = new Filter() {
|
private final Filter filtering = new Filter() {
|
||||||
|
|
@ -65,8 +60,7 @@ public class ArtistCatalogueAdapter extends RecyclerView.Adapter<ArtistCatalogue
|
||||||
private List<ArtistID3> artists;
|
private List<ArtistID3> artists;
|
||||||
private List<ArtistID3> artistFull;
|
private List<ArtistID3> artistFull;
|
||||||
|
|
||||||
public ArtistCatalogueAdapter(Context context, ClickCallback click) {
|
public ArtistCatalogueAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.artists = Collections.emptyList();
|
this.artists = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -74,7 +68,7 @@ public class ArtistCatalogueAdapter extends RecyclerView.Adapter<ArtistCatalogue
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_catalogue_artist, parent, false);
|
ItemLibraryCatalogueArtistBinding view = ItemLibraryCatalogueArtistBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -82,9 +76,13 @@ public class ArtistCatalogueAdapter extends RecyclerView.Adapter<ArtistCatalogue
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
ArtistID3 artist = artists.get(position);
|
ArtistID3 artist = artists.get(position);
|
||||||
|
|
||||||
holder.textArtistName.setText(MusicUtil.getReadableString(artist.getName()));
|
holder.item.artistNameLabel.setText(MusicUtil.getReadableString(artist.getName()));
|
||||||
|
|
||||||
setArtistCover(artist, holder.cover);
|
CustomGlideRequest.Builder
|
||||||
|
.from(holder.itemView.getContext(), artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
||||||
|
.build()
|
||||||
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
|
.into(holder.item.artistCatalogueCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -117,25 +115,15 @@ public class ArtistCatalogueAdapter extends RecyclerView.Adapter<ArtistCatalogue
|
||||||
return filtering;
|
return filtering;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setArtistCover(ArtistID3 artist, ImageView cover) {
|
|
||||||
CustomGlideRequest.Builder
|
|
||||||
.from(context, artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
|
||||||
.build()
|
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
|
||||||
.into(cover);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textArtistName;
|
ItemLibraryCatalogueArtistBinding item;
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibraryCatalogueArtistBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textArtistName = itemView.findViewById(R.id.artist_name_label);
|
this.item = item;
|
||||||
cover = itemView.findViewById(R.id.artist_catalogue_cover_image_view);
|
|
||||||
|
|
||||||
textArtistName.setSelected(true);
|
item.artistNameLabel.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,16 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemHorizontalArtistBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
|
|
@ -23,13 +20,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ArtistHorizontalAdapter extends RecyclerView.Adapter<ArtistHorizontalAdapter.ViewHolder> {
|
public class ArtistHorizontalAdapter extends RecyclerView.Adapter<ArtistHorizontalAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<ArtistID3> artists;
|
private List<ArtistID3> artists;
|
||||||
|
|
||||||
public ArtistHorizontalAdapter(Context context, ClickCallback click) {
|
public ArtistHorizontalAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.artists = Collections.emptyList();
|
this.artists = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -37,7 +32,7 @@ public class ArtistHorizontalAdapter extends RecyclerView.Adapter<ArtistHorizont
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal_artist, parent, false);
|
ItemHorizontalArtistBinding view = ItemHorizontalArtistBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,15 +40,19 @@ public class ArtistHorizontalAdapter extends RecyclerView.Adapter<ArtistHorizont
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
ArtistID3 artist = artists.get(position);
|
ArtistID3 artist = artists.get(position);
|
||||||
|
|
||||||
holder.artistName.setText(MusicUtil.getReadableString(artist.getName()));
|
holder.item.artistNameTextView.setText(MusicUtil.getReadableString(artist.getName()));
|
||||||
|
|
||||||
if (artist.getAlbumCount() > 0) {
|
if (artist.getAlbumCount() > 0) {
|
||||||
holder.artistInfo.setText("Album count: " + artist.getAlbumCount());
|
holder.item.artistInfoTextView.setText("Album count: " + artist.getAlbumCount());
|
||||||
} else {
|
} else {
|
||||||
holder.artistInfo.setVisibility(View.GONE);
|
holder.item.artistInfoTextView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
setArtistCover(artist, holder.cover);
|
CustomGlideRequest.Builder
|
||||||
|
.from(holder.itemView.getContext(), artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
||||||
|
.build()
|
||||||
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
|
.into(holder.item.artistCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -80,35 +79,20 @@ public class ArtistHorizontalAdapter extends RecyclerView.Adapter<ArtistHorizont
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setArtistCover(ArtistID3 artist, ImageView cover) {
|
|
||||||
CustomGlideRequest.Builder
|
|
||||||
.from(context, artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
|
||||||
.build()
|
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
|
||||||
.into(cover);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView artistName;
|
ItemHorizontalArtistBinding item;
|
||||||
TextView artistInfo;
|
|
||||||
|
|
||||||
ImageView more;
|
ViewHolder(ItemHorizontalArtistBinding item) {
|
||||||
ImageView cover;
|
super(item.getRoot());
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
this.item = item;
|
||||||
super(itemView);
|
|
||||||
|
|
||||||
artistName = itemView.findViewById(R.id.artist_name_text_view);
|
item.artistNameTextView.setSelected(true);
|
||||||
artistInfo = itemView.findViewById(R.id.artist_info_text_view);
|
|
||||||
more = itemView.findViewById(R.id.artist_more_button);
|
|
||||||
cover = itemView.findViewById(R.id.artist_cover_image_view);
|
|
||||||
|
|
||||||
artistName.setSelected(true);
|
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
||||||
more.setOnClickListener(v -> onLongClick());
|
item.artistMoreButton.setOnClickListener(v -> onLongClick());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onClick() {
|
private void onClick() {
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibrarySimilarArtistBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.SimilarArtistID3;
|
import com.cappielloantonio.play.subsonic.models.SimilarArtistID3;
|
||||||
|
|
@ -23,13 +19,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ArtistSimilarAdapter extends RecyclerView.Adapter<ArtistSimilarAdapter.ViewHolder> {
|
public class ArtistSimilarAdapter extends RecyclerView.Adapter<ArtistSimilarAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<SimilarArtistID3> artists;
|
private List<SimilarArtistID3> artists;
|
||||||
|
|
||||||
public ArtistSimilarAdapter(Context context, ClickCallback click) {
|
public ArtistSimilarAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.artists = Collections.emptyList();
|
this.artists = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -37,7 +31,7 @@ public class ArtistSimilarAdapter extends RecyclerView.Adapter<ArtistSimilarAdap
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_similar_artist, parent, false);
|
ItemLibrarySimilarArtistBinding view = ItemLibrarySimilarArtistBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,9 +39,13 @@ public class ArtistSimilarAdapter extends RecyclerView.Adapter<ArtistSimilarAdap
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
SimilarArtistID3 artist = artists.get(position);
|
SimilarArtistID3 artist = artists.get(position);
|
||||||
|
|
||||||
holder.textArtistName.setText(MusicUtil.getReadableString(artist.getName()));
|
holder.item.artistNameLabel.setText(MusicUtil.getReadableString(artist.getName()));
|
||||||
|
|
||||||
setArtistCover(artist, holder.cover);
|
CustomGlideRequest.Builder
|
||||||
|
.from(holder.itemView.getContext(), artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
||||||
|
.build()
|
||||||
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
|
.into(holder.item.similarArtistCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -74,28 +72,18 @@ public class ArtistSimilarAdapter extends RecyclerView.Adapter<ArtistSimilarAdap
|
||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setArtistCover(SimilarArtistID3 artist, ImageView cover) {
|
|
||||||
CustomGlideRequest.Builder
|
|
||||||
.from(context, artist.getCoverArtId(), CustomGlideRequest.ARTIST_PIC, null)
|
|
||||||
.build()
|
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
|
||||||
.into(cover);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textArtistName;
|
ItemLibrarySimilarArtistBinding item;
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibrarySimilarArtistBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textArtistName = itemView.findViewById(R.id.artist_name_label);
|
this.item = item;
|
||||||
cover = itemView.findViewById(R.id.similar_artist_cover_image_view);
|
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
||||||
textArtistName.setSelected(true);
|
item.artistNameLabel.setSelected(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClick() {
|
public void onClick() {
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,14 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.animation.AccelerateDecelerateInterpolator;
|
import android.view.animation.AccelerateDecelerateInterpolator;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemHomeDiscoverSongBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
|
@ -22,13 +18,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapter.ViewHolder> {
|
public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Child> songs;
|
private List<Child> songs;
|
||||||
|
|
||||||
public DiscoverSongAdapter(Context context, ClickCallback click) {
|
public DiscoverSongAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.songs = Collections.emptyList();
|
this.songs = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -36,7 +30,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_home_discover_song, parent, false);
|
ItemHomeDiscoverSongBinding view = ItemHomeDiscoverSongBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -44,13 +38,13 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Child song = songs.get(position);
|
Child song = songs.get(position);
|
||||||
|
|
||||||
holder.textTitle.setText(MusicUtil.getReadableString(song.getTitle()));
|
holder.item.titleDiscoverSongLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
holder.textAlbum.setText(MusicUtil.getReadableString(song.getAlbum()));
|
holder.item.albumDiscoverSongLabel.setText(MusicUtil.getReadableString(song.getAlbum()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(holder.itemView.getContext(), song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.into(holder.cover);
|
.into(holder.item.discoverSongCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -70,16 +64,12 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textTitle;
|
ItemHomeDiscoverSongBinding item;
|
||||||
TextView textAlbum;
|
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHomeDiscoverSongBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textTitle = itemView.findViewById(R.id.title_discover_song_label);
|
this.item = item;
|
||||||
textAlbum = itemView.findViewById(R.id.album_discover_song_label);
|
|
||||||
cover = itemView.findViewById(R.id.discover_song_cover_image_view);
|
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
}
|
}
|
||||||
|
|
@ -94,7 +84,7 @@ public class DiscoverSongAdapter extends RecyclerView.Adapter<DiscoverSongAdapte
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startAnimation(ViewHolder holder) {
|
private void startAnimation(ViewHolder holder) {
|
||||||
holder.cover.animate()
|
holder.item.discoverSongCoverImageView.animate()
|
||||||
.setDuration(20000)
|
.setDuration(20000)
|
||||||
.setStartDelay(10)
|
.setStartDelay(10)
|
||||||
.setInterpolator(new AccelerateDecelerateInterpolator())
|
.setInterpolator(new AccelerateDecelerateInterpolator())
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
|
import com.cappielloantonio.play.databinding.ItemHorizontalDownloadBinding;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
@ -24,13 +22,11 @@ import java.util.Objects;
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public class DownloadHorizontalAdapter extends RecyclerView.Adapter<DownloadHorizontalAdapter.ViewHolder> {
|
public class DownloadHorizontalAdapter extends RecyclerView.Adapter<DownloadHorizontalAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Child> songs;
|
private List<Child> songs;
|
||||||
|
|
||||||
public DownloadHorizontalAdapter(Context context, ClickCallback click) {
|
public DownloadHorizontalAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.songs = Collections.emptyList();
|
this.songs = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -38,7 +34,7 @@ public class DownloadHorizontalAdapter extends RecyclerView.Adapter<DownloadHori
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal_download, parent, false);
|
ItemHorizontalDownloadBinding view = ItemHorizontalDownloadBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,14 +42,14 @@ public class DownloadHorizontalAdapter extends RecyclerView.Adapter<DownloadHori
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Child song = songs.get(position);
|
Child song = songs.get(position);
|
||||||
|
|
||||||
holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle()));
|
holder.item.downloadedSongTitleTextView.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
holder.songArtist.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
holder.item.downloadedSongArtistTextView.setText(holder.itemView.getContext().getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
||||||
holder.songAlbum.setText(MusicUtil.getReadableString(song.getAlbum()));
|
holder.item.downloadedSongAlbumTextView.setText(MusicUtil.getReadableString(song.getAlbum()));
|
||||||
|
|
||||||
if (position > 0 && songs.get(position - 1) != null && !Objects.equals(songs.get(position - 1).getAlbum(), songs.get(position).getAlbum())) {
|
if (position > 0 && songs.get(position - 1) != null && !Objects.equals(songs.get(position - 1).getAlbum(), songs.get(position).getAlbum())) {
|
||||||
holder.divider.setPadding(0, 12, 0, 0);
|
holder.item.divider.setPadding(0, 12, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
if (position > 0) holder.divider.setVisibility(View.GONE);
|
if (position > 0) holder.item.divider.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -72,28 +68,20 @@ public class DownloadHorizontalAdapter extends RecyclerView.Adapter<DownloadHori
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
View divider;
|
ItemHorizontalDownloadBinding item;
|
||||||
TextView songTitle;
|
|
||||||
TextView songArtist;
|
|
||||||
TextView songAlbum;
|
|
||||||
ImageView more;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHorizontalDownloadBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
divider = itemView.findViewById(R.id.divider);
|
this.item = item;
|
||||||
songTitle = itemView.findViewById(R.id.downloaded_song_title_text_view);
|
|
||||||
songArtist = itemView.findViewById(R.id.downloaded_song_artist_text_view);
|
|
||||||
songAlbum = itemView.findViewById(R.id.downloaded_song_album_text_view);
|
|
||||||
more = itemView.findViewById(R.id.downloaded_song_more_button);
|
|
||||||
|
|
||||||
songTitle.setSelected(true);
|
item.downloadedSongTitleTextView.setSelected(true);
|
||||||
songArtist.setSelected(true);
|
item.downloadedSongArtistTextView.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
||||||
more.setOnClickListener(v -> onLongClick());
|
item.downloadedSongMoreButton.setOnClickListener(v -> onLongClick());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClick() {
|
public void onClick() {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,13 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibraryGenreBinding;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.model.Media;
|
import com.cappielloantonio.play.model.Media;
|
||||||
import com.cappielloantonio.play.subsonic.models.Genre;
|
import com.cappielloantonio.play.subsonic.models.Genre;
|
||||||
|
|
@ -20,13 +17,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder> {
|
public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder> {
|
||||||
private final Context context;
|
private final ClickCallback click;
|
||||||
private ClickCallback click;
|
|
||||||
|
|
||||||
private List<Genre> genres;
|
private List<Genre> genres;
|
||||||
|
|
||||||
public GenreAdapter(Context context, ClickCallback click) {
|
public GenreAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.genres = Collections.emptyList();
|
this.genres = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -34,7 +29,7 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_genre, parent, false);
|
ItemLibraryGenreBinding view = ItemLibraryGenreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,7 +37,7 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Genre genre = genres.get(position);
|
Genre genre = genres.get(position);
|
||||||
|
|
||||||
holder.textGenre.setText(MusicUtil.getReadableString(genre.getGenre()));
|
holder.item.genreLabel.setText(MusicUtil.getReadableString(genre.getGenre()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -60,12 +55,12 @@ public class GenreAdapter extends RecyclerView.Adapter<GenreAdapter.ViewHolder>
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textGenre;
|
ItemLibraryGenreBinding item;
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibraryGenreBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textGenre = itemView.findViewById(R.id.genre_label);
|
this.item = item;
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,15 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Filter;
|
import android.widget.Filter;
|
||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLibraryCatalogueGenreBinding;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.model.Media;
|
import com.cappielloantonio.play.model.Media;
|
||||||
import com.cappielloantonio.play.subsonic.models.Genre;
|
import com.cappielloantonio.play.subsonic.models.Genre;
|
||||||
|
|
@ -24,7 +21,6 @@ import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class GenreCatalogueAdapter extends RecyclerView.Adapter<GenreCatalogueAdapter.ViewHolder> implements Filterable {
|
public class GenreCatalogueAdapter extends RecyclerView.Adapter<GenreCatalogueAdapter.ViewHolder> implements Filterable {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private final Filter filtering = new Filter() {
|
private final Filter filtering = new Filter() {
|
||||||
|
|
@ -61,8 +57,7 @@ public class GenreCatalogueAdapter extends RecyclerView.Adapter<GenreCatalogueAd
|
||||||
private List<Genre> genres;
|
private List<Genre> genres;
|
||||||
private List<Genre> genresFull;
|
private List<Genre> genresFull;
|
||||||
|
|
||||||
public GenreCatalogueAdapter(Context context, ClickCallback click) {
|
public GenreCatalogueAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.genres = Collections.emptyList();
|
this.genres = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +65,7 @@ public class GenreCatalogueAdapter extends RecyclerView.Adapter<GenreCatalogueAd
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_library_catalogue_genre, parent, false);
|
ItemLibraryCatalogueGenreBinding view = ItemLibraryCatalogueGenreBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,7 +73,7 @@ public class GenreCatalogueAdapter extends RecyclerView.Adapter<GenreCatalogueAd
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Genre genre = genres.get(position);
|
Genre genre = genres.get(position);
|
||||||
|
|
||||||
holder.textGenre.setText(MusicUtil.getReadableString(genre.getGenre()));
|
holder.item.genreLabel.setText(MusicUtil.getReadableString(genre.getGenre()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -102,12 +97,12 @@ public class GenreCatalogueAdapter extends RecyclerView.Adapter<GenreCatalogueAd
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textGenre;
|
ItemLibraryCatalogueGenreBinding item;
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLibraryCatalogueGenreBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textGenre = itemView.findViewById(R.id.genre_label);
|
this.item = item;
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> {
|
itemView.setOnClickListener(v -> {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,15 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemHomeGridTrackBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.model.Chronology;
|
import com.cappielloantonio.play.model.Chronology;
|
||||||
|
|
@ -22,13 +19,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class GridTrackAdapter extends RecyclerView.Adapter<GridTrackAdapter.ViewHolder> {
|
public class GridTrackAdapter extends RecyclerView.Adapter<GridTrackAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Chronology> items;
|
private List<Chronology> items;
|
||||||
|
|
||||||
public GridTrackAdapter(Context context, ClickCallback click) {
|
public GridTrackAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.items = Collections.emptyList();
|
this.items = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -36,7 +31,7 @@ public class GridTrackAdapter extends RecyclerView.Adapter<GridTrackAdapter.View
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_home_grid_track, parent, false);
|
ItemHomeGridTrackBinding view = ItemHomeGridTrackBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,10 +40,10 @@ public class GridTrackAdapter extends RecyclerView.Adapter<GridTrackAdapter.View
|
||||||
Chronology item = items.get(position);
|
Chronology item = items.get(position);
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, item.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(holder.itemView.getContext(), item.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.trackCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -66,12 +61,12 @@ public class GridTrackAdapter extends RecyclerView.Adapter<GridTrackAdapter.View
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
ImageView cover;
|
ItemHomeGridTrackBinding item;
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHomeGridTrackBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
cover = itemView.findViewById(R.id.track_cover_image_view);
|
this.item = item;
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.media3.session.MediaBrowser;
|
import androidx.media3.session.MediaBrowser;
|
||||||
|
|
@ -15,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
|
import com.cappielloantonio.play.databinding.ItemPlayerQueueSongBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.service.MediaManager;
|
import com.cappielloantonio.play.service.MediaManager;
|
||||||
|
|
@ -27,14 +25,12 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueueAdapter.ViewHolder> {
|
public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueueAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
|
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
|
||||||
private List<Child> songs;
|
private List<Child> songs;
|
||||||
|
|
||||||
public PlayerSongQueueAdapter(Context context, ClickCallback click) {
|
public PlayerSongQueueAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.songs = Collections.emptyList();
|
this.songs = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -42,7 +38,7 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_player_queue_song, parent, false);
|
ItemPlayerQueueSongBinding view = ItemPlayerQueueSongBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,17 +46,17 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Child song = songs.get(position);
|
Child song = songs.get(position);
|
||||||
|
|
||||||
holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle()));
|
holder.item.queueSongTitleTextView.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
holder.item.queueSongSubtitleTextView.setText(holder.itemView.getContext().getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(holder.itemView.getContext(), song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.queueSongCoverImageView);
|
||||||
|
|
||||||
MediaManager.getCurrentIndex(mediaBrowserListenableFuture, index -> {
|
MediaManager.getCurrentIndex(mediaBrowserListenableFuture, index -> {
|
||||||
holder.play.setVisibility(position == index ? View.VISIBLE : View.INVISIBLE);
|
holder.item.queueSongPlayImageView.setVisibility(position == index ? View.VISIBLE : View.INVISIBLE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -87,21 +83,15 @@ public class PlayerSongQueueAdapter extends RecyclerView.Adapter<PlayerSongQueue
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView songTitle;
|
ItemPlayerQueueSongBinding item;
|
||||||
TextView songSubtitle;
|
|
||||||
ImageView cover;
|
|
||||||
ImageView play;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemPlayerQueueSongBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
songTitle = itemView.findViewById(R.id.queue_song_title_text_view);
|
this.item = item;
|
||||||
songSubtitle = itemView.findViewById(R.id.queue_song_subtitle_text_view);
|
|
||||||
cover = itemView.findViewById(R.id.queue_song_cover_image_view);
|
|
||||||
play = itemView.findViewById(R.id.queue_song_play_image_view);
|
|
||||||
|
|
||||||
songTitle.setSelected(true);
|
item.queueSongTitleTextView.setSelected(true);
|
||||||
songSubtitle.setSelected(true);
|
item.queueSongSubtitleTextView.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,14 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
|
import com.cappielloantonio.play.databinding.ItemHorizontalPlaylistDialogBinding;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.Playlist;
|
import com.cappielloantonio.play.subsonic.models.Playlist;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
@ -19,13 +17,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaylistDialogHorizontalAdapter extends RecyclerView.Adapter<PlaylistDialogHorizontalAdapter.ViewHolder> {
|
public class PlaylistDialogHorizontalAdapter extends RecyclerView.Adapter<PlaylistDialogHorizontalAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Playlist> playlists;
|
private List<Playlist> playlists;
|
||||||
|
|
||||||
public PlaylistDialogHorizontalAdapter(Context context, ClickCallback click) {
|
public PlaylistDialogHorizontalAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.playlists = Collections.emptyList();
|
this.playlists = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -33,7 +29,7 @@ public class PlaylistDialogHorizontalAdapter extends RecyclerView.Adapter<Playli
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal_playlist_dialog, parent, false);
|
ItemHorizontalPlaylistDialogBinding view = ItemHorizontalPlaylistDialogBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,9 +37,9 @@ public class PlaylistDialogHorizontalAdapter extends RecyclerView.Adapter<Playli
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Playlist playlist = playlists.get(position);
|
Playlist playlist = playlists.get(position);
|
||||||
|
|
||||||
holder.playlistTitle.setText(MusicUtil.getReadableString(playlist.getName()));
|
holder.item.playlistDialogTitleTextView.setText(MusicUtil.getReadableString(playlist.getName()));
|
||||||
holder.playlistTrackCount.setText(context.getString(R.string.playlist_counted_tracks, playlist.getSongCount()));
|
holder.item.playlistDialogCountTextView.setText(holder.itemView.getContext().getString(R.string.playlist_counted_tracks, playlist.getSongCount()));
|
||||||
holder.playlistDuration.setText(MusicUtil.getReadableDurationString(playlist.getDuration(), false));
|
holder.item.playlistDialogDurationTextView.setText(MusicUtil.getReadableDurationString(playlist.getDuration(), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -61,18 +57,14 @@ public class PlaylistDialogHorizontalAdapter extends RecyclerView.Adapter<Playli
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView playlistTitle;
|
ItemHorizontalPlaylistDialogBinding item;
|
||||||
TextView playlistTrackCount;
|
|
||||||
TextView playlistDuration;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHorizontalPlaylistDialogBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
playlistTitle = itemView.findViewById(R.id.playlist_dialog_title_text_view);
|
this.item = item;
|
||||||
playlistTrackCount = itemView.findViewById(R.id.playlist_dialog_count_text_view);
|
|
||||||
playlistDuration = itemView.findViewById(R.id.playlist_dialog_duration_text_view);
|
|
||||||
|
|
||||||
playlistTitle.setSelected(true);
|
item.playlistDialogTitleTextView.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,14 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemHorizontalPlaylistDialogTrackBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
@ -21,19 +17,16 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<PlaylistDialogSongHorizontalAdapter.ViewHolder> {
|
public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<PlaylistDialogSongHorizontalAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
|
|
||||||
private List<Child> songs;
|
private List<Child> songs;
|
||||||
|
|
||||||
public PlaylistDialogSongHorizontalAdapter(Context context) {
|
public PlaylistDialogSongHorizontalAdapter() {
|
||||||
this.context = context;
|
|
||||||
this.songs = Collections.emptyList();
|
this.songs = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal_playlist_dialog_track, parent, false);
|
ItemHorizontalPlaylistDialogTrackBinding view = ItemHorizontalPlaylistDialogTrackBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,15 +34,15 @@ public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<Pl
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Child song = songs.get(position);
|
Child song = songs.get(position);
|
||||||
|
|
||||||
holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle()));
|
holder.item.playlistDialogSongTitleTextView.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
holder.songArtist.setText(MusicUtil.getReadableString(song.getArtist()));
|
holder.item.playlistDialogAlbumArtistTextView.setText(MusicUtil.getReadableString(song.getArtist()));
|
||||||
holder.songDuration.setText(MusicUtil.getReadableDurationString(song.getDuration(), false));
|
holder.item.playlistDialogSongDurationTextView.setText(MusicUtil.getReadableDurationString(song.getDuration(), false));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(holder.itemView.getContext(), song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.playlistDialogSongCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -71,20 +64,14 @@ public class PlaylistDialogSongHorizontalAdapter extends RecyclerView.Adapter<Pl
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ViewHolder extends RecyclerView.ViewHolder {
|
public static class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView songTitle;
|
ItemHorizontalPlaylistDialogTrackBinding item;
|
||||||
TextView songArtist;
|
|
||||||
TextView songDuration;
|
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHorizontalPlaylistDialogTrackBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
songTitle = itemView.findViewById(R.id.playlist_dialog_song_title_text_view);
|
this.item = item;
|
||||||
songArtist = itemView.findViewById(R.id.playlist_dialog_album_artist_text_view);
|
|
||||||
songDuration = itemView.findViewById(R.id.playlist_dialog_song_duration_text_view);
|
|
||||||
cover = itemView.findViewById(R.id.playlist_dialog_song_cover_image_view);
|
|
||||||
|
|
||||||
songTitle.setSelected(true);
|
item.playlistDialogSongTitleTextView.setSelected(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Filter;
|
import android.widget.Filter;
|
||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
|
import com.cappielloantonio.play.databinding.ItemHorizontalPlaylistBinding;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.Playlist;
|
import com.cappielloantonio.play.subsonic.models.Playlist;
|
||||||
import com.cappielloantonio.play.util.MusicUtil;
|
import com.cappielloantonio.play.util.MusicUtil;
|
||||||
|
|
@ -23,7 +21,6 @@ import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PlaylistHorizontalAdapter extends RecyclerView.Adapter<PlaylistHorizontalAdapter.ViewHolder> implements Filterable {
|
public class PlaylistHorizontalAdapter extends RecyclerView.Adapter<PlaylistHorizontalAdapter.ViewHolder> implements Filterable {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Playlist> playlists;
|
private List<Playlist> playlists;
|
||||||
|
|
@ -60,8 +57,7 @@ public class PlaylistHorizontalAdapter extends RecyclerView.Adapter<PlaylistHori
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public PlaylistHorizontalAdapter(Context context, ClickCallback click) {
|
public PlaylistHorizontalAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.playlists = Collections.emptyList();
|
this.playlists = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +65,7 @@ public class PlaylistHorizontalAdapter extends RecyclerView.Adapter<PlaylistHori
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal_playlist, parent, false);
|
ItemHorizontalPlaylistBinding view = ItemHorizontalPlaylistBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,9 +73,9 @@ public class PlaylistHorizontalAdapter extends RecyclerView.Adapter<PlaylistHori
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Playlist playlist = playlists.get(position);
|
Playlist playlist = playlists.get(position);
|
||||||
|
|
||||||
holder.playlistTitle.setText(MusicUtil.getReadableString(playlist.getName()));
|
holder.item.playlistDialogTitleTextView.setText(MusicUtil.getReadableString(playlist.getName()));
|
||||||
holder.playlistTrackCount.setText(context.getString(R.string.playlist_counted_tracks, playlist.getSongCount()));
|
holder.item.playlistDialogCountTextView.setText(holder.itemView.getContext().getString(R.string.playlist_counted_tracks, playlist.getSongCount()));
|
||||||
holder.playlistDuration.setText(MusicUtil.getReadableDurationString(playlist.getDuration(), false));
|
holder.item.playlistDialogDurationTextView.setText(MusicUtil.getReadableDurationString(playlist.getDuration(), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -103,18 +99,14 @@ public class PlaylistHorizontalAdapter extends RecyclerView.Adapter<PlaylistHori
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView playlistTitle;
|
ItemHorizontalPlaylistBinding item;
|
||||||
TextView playlistTrackCount;
|
|
||||||
TextView playlistDuration;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHorizontalPlaylistBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
playlistTitle = itemView.findViewById(R.id.playlist_dialog_title_text_view);
|
this.item = item;
|
||||||
playlistTrackCount = itemView.findViewById(R.id.playlist_dialog_count_text_view);
|
|
||||||
playlistDuration = itemView.findViewById(R.id.playlist_dialog_duration_text_view);
|
|
||||||
|
|
||||||
playlistTitle.setSelected(true);
|
item.playlistDialogTitleTextView.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,8 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
@ -15,6 +10,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
|
import com.cappielloantonio.play.databinding.ItemHomePodcastEpisodeBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.PodcastEpisode;
|
import com.cappielloantonio.play.subsonic.models.PodcastEpisode;
|
||||||
|
|
@ -25,13 +21,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PodcastEpisodeAdapter extends RecyclerView.Adapter<PodcastEpisodeAdapter.ViewHolder> {
|
public class PodcastEpisodeAdapter extends RecyclerView.Adapter<PodcastEpisodeAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<PodcastEpisode> podcastEpisodes;
|
private List<PodcastEpisode> podcastEpisodes;
|
||||||
|
|
||||||
public PodcastEpisodeAdapter(Context context, ClickCallback click) {
|
public PodcastEpisodeAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.podcastEpisodes = Collections.emptyList();
|
this.podcastEpisodes = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -39,7 +33,7 @@ public class PodcastEpisodeAdapter extends RecyclerView.Adapter<PodcastEpisodeAd
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_home_podcast_episode, parent, false);
|
ItemHomePodcastEpisodeBinding view = ItemHomePodcastEpisodeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -48,16 +42,16 @@ public class PodcastEpisodeAdapter extends RecyclerView.Adapter<PodcastEpisodeAd
|
||||||
PodcastEpisode podcastEpisode = podcastEpisodes.get(position);
|
PodcastEpisode podcastEpisode = podcastEpisodes.get(position);
|
||||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM d");
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM d");
|
||||||
|
|
||||||
holder.textTitle.setText(MusicUtil.getReadableString(podcastEpisode.getTitle()));
|
holder.item.podcastTitleLabel.setText(MusicUtil.getReadableString(podcastEpisode.getTitle()));
|
||||||
holder.textSubtitle.setText(MusicUtil.getReadableString(podcastEpisode.getArtist()));
|
holder.item.podcastSubtitleLabel.setText(MusicUtil.getReadableString(podcastEpisode.getArtist()));
|
||||||
holder.textReleaseAndDuration.setText(context.getString(R.string.podcast_release_date_duration_formatter, simpleDateFormat.format(podcastEpisode.getPublishDate()), MusicUtil.getReadablePodcastDurationString(podcastEpisode.getDuration())));
|
holder.item.podcastReleasesAndDurationLabel.setText(holder.itemView.getContext().getString(R.string.podcast_release_date_duration_formatter, simpleDateFormat.format(podcastEpisode.getPublishDate()), MusicUtil.getReadablePodcastDurationString(podcastEpisode.getDuration())));
|
||||||
holder.textDescription.setText(MusicUtil.getReadableString(podcastEpisode.getDescription()));
|
holder.item.podcastDescriptionLabel.setText(MusicUtil.getReadableString(podcastEpisode.getDescription()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, podcastEpisode.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(holder.itemView.getContext(), podcastEpisode.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.podcastCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -71,28 +65,16 @@ public class PodcastEpisodeAdapter extends RecyclerView.Adapter<PodcastEpisodeAd
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textTitle;
|
ItemHomePodcastEpisodeBinding item;
|
||||||
TextView textSubtitle;
|
|
||||||
TextView textReleaseAndDuration;
|
|
||||||
TextView textDescription;
|
|
||||||
ImageView cover;
|
|
||||||
Button playButton;
|
|
||||||
Button moreButton;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHomePodcastEpisodeBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textTitle = itemView.findViewById(R.id.podcast_title_label);
|
this.item = item;
|
||||||
textSubtitle = itemView.findViewById(R.id.podcast_subtitle_label);
|
|
||||||
textReleaseAndDuration = itemView.findViewById(R.id.podcast_releases_and_duration_label);
|
|
||||||
textDescription = itemView.findViewById(R.id.podcast_description_label);
|
|
||||||
cover = itemView.findViewById(R.id.podcast_cover_image_view);
|
|
||||||
playButton = itemView.findViewById(R.id.podcast_play_button);
|
|
||||||
moreButton = itemView.findViewById(R.id.podcast_more_button);
|
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
|
|
||||||
moreButton.setOnLongClickListener(v -> openMore());
|
item.podcastMoreButton.setOnLongClickListener(v -> openMore());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClick() {
|
public void onClick() {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,13 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemLoginServerBinding;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.model.Server;
|
import com.cappielloantonio.play.model.Server;
|
||||||
|
|
||||||
|
|
@ -18,13 +15,11 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ViewHolder> {
|
public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Server> servers;
|
private List<Server> servers;
|
||||||
|
|
||||||
public ServerAdapter(Context context, ClickCallback click) {
|
public ServerAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.servers = new ArrayList<>();
|
this.servers = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
@ -32,7 +27,7 @@ public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ViewHolder
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_login_server, parent, false);
|
ItemLoginServerBinding view = ItemLoginServerBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -40,8 +35,8 @@ public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ViewHolder
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Server server = servers.get(position);
|
Server server = servers.get(position);
|
||||||
|
|
||||||
holder.serverName.setText(server.getServerName());
|
holder.item.serverNameTextView.setText(server.getServerName());
|
||||||
holder.serverAddress.setText(server.getAddress());
|
holder.item.serverAddressTextView.setText(server.getAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -59,16 +54,14 @@ public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ViewHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView serverName;
|
ItemLoginServerBinding item;
|
||||||
TextView serverAddress;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemLoginServerBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
serverName = itemView.findViewById(R.id.server_name_text_view);
|
this.item = item;
|
||||||
serverAddress = itemView.findViewById(R.id.server_address_text_view);
|
|
||||||
|
|
||||||
serverName.setSelected(true);
|
item.serverNameTextView.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemHomeSimilarTrackBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
|
@ -23,13 +19,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapter.ViewHolder> {
|
public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Child> songs;
|
private List<Child> songs;
|
||||||
|
|
||||||
public SimilarTrackAdapter(Context context, ClickCallback click) {
|
public SimilarTrackAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.songs = Collections.emptyList();
|
this.songs = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -37,7 +31,7 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_home_similar_track, parent, false);
|
ItemHomeSimilarTrackBinding view = ItemHomeSimilarTrackBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,13 +39,13 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Child song = songs.get(position);
|
Child song = songs.get(position);
|
||||||
|
|
||||||
holder.textTitle.setText(MusicUtil.getReadableString(song.getTitle()));
|
holder.item.titleTrackLabel.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
|
|
||||||
CustomGlideRequest.Builder
|
CustomGlideRequest.Builder
|
||||||
.from(context, song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(holder.itemView.getContext(), song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.trackCoverImageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -69,14 +63,12 @@ public class SimilarTrackAdapter extends RecyclerView.Adapter<SimilarTrackAdapte
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textTitle;
|
ItemHomeSimilarTrackBinding item;
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHomeSimilarTrackBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textTitle = itemView.findViewById(R.id.title_track_label);
|
this.item = item;
|
||||||
cover = itemView.findViewById(R.id.track_cover_image_view);
|
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
|
|
@ -15,6 +12,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
|
import com.cappielloantonio.play.databinding.ItemHorizontalTrackBinding;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
|
@ -28,14 +26,12 @@ import java.util.List;
|
||||||
|
|
||||||
@UnstableApi
|
@UnstableApi
|
||||||
public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAdapter.ViewHolder> {
|
public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
private final boolean isCoverVisible;
|
private final boolean isCoverVisible;
|
||||||
|
|
||||||
private List<Child> songs;
|
private List<Child> songs;
|
||||||
|
|
||||||
public SongHorizontalAdapter(Context context, ClickCallback click, boolean isCoverVisible) {
|
public SongHorizontalAdapter(ClickCallback click, boolean isCoverVisible) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.isCoverVisible = isCoverVisible;
|
this.isCoverVisible = isCoverVisible;
|
||||||
this.songs = Collections.emptyList();
|
this.songs = Collections.emptyList();
|
||||||
|
|
@ -44,7 +40,7 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal_track, parent, false);
|
ItemHorizontalTrackBinding view = ItemHorizontalTrackBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,28 +48,28 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
Child song = songs.get(position);
|
Child song = songs.get(position);
|
||||||
|
|
||||||
holder.songTitle.setText(MusicUtil.getReadableString(song.getTitle()));
|
holder.item.searchResultSongTitleTextView.setText(MusicUtil.getReadableString(song.getTitle()));
|
||||||
holder.songSubtitle.setText(context.getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
holder.item.searchResultSongSubtitleTextView.setText(holder.itemView.getContext().getString(R.string.song_subtitle_formatter, MusicUtil.getReadableString(song.getArtist()), MusicUtil.getReadableDurationString(song.getDuration(), false)));
|
||||||
holder.trackNumber.setText(String.valueOf(song.getTrack()));
|
holder.item.trackNumberTextView.setText(String.valueOf(song.getTrack()));
|
||||||
|
|
||||||
if (DownloadUtil.getDownloadTracker(context).isDownloaded(MappingUtil.mapMediaItem(context, song, false))) {
|
if (DownloadUtil.getDownloadTracker(holder.itemView.getContext()).isDownloaded(MappingUtil.mapMediaItem(song, false))) {
|
||||||
holder.downloadIndicator.setVisibility(View.VISIBLE);
|
holder.item.searchResultDowanloadIndicatorImageView.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
holder.downloadIndicator.setVisibility(View.GONE);
|
holder.item.searchResultDowanloadIndicatorImageView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isCoverVisible) CustomGlideRequest.Builder
|
if (isCoverVisible) CustomGlideRequest.Builder
|
||||||
.from(context, song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
.from(holder.itemView.getContext(), song.getCoverArtId(), CustomGlideRequest.SONG_PIC, null)
|
||||||
.build()
|
.build()
|
||||||
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
.transform(new CenterCrop(), new RoundedCorners(CustomGlideRequest.CORNER_RADIUS))
|
||||||
.into(holder.cover);
|
.into(holder.item.songCoverImageView);
|
||||||
|
|
||||||
if (isCoverVisible) holder.trackNumber.setVisibility(View.INVISIBLE);
|
if (isCoverVisible) holder.item.trackNumberTextView.setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
if (!isCoverVisible) holder.cover.setVisibility(View.INVISIBLE);
|
if (!isCoverVisible) holder.item.songCoverImageView.setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
if (!isCoverVisible && (position > 0 && songs.get(position - 1) != null && songs.get(position - 1).getDiscNumber() < songs.get(position).getDiscNumber())) {
|
if (!isCoverVisible && (position > 0 && songs.get(position - 1) != null && songs.get(position - 1).getDiscNumber() < songs.get(position).getDiscNumber())) {
|
||||||
holder.differentDiscDivider.setVisibility(View.VISIBLE);
|
holder.item.differentDiskDivider.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,34 +88,20 @@ public class SongHorizontalAdapter extends RecyclerView.Adapter<SongHorizontalAd
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
View differentDiscDivider;
|
ItemHorizontalTrackBinding item;
|
||||||
TextView songTitle;
|
|
||||||
TextView songSubtitle;
|
|
||||||
TextView trackNumber;
|
|
||||||
View downloadIndicator;
|
|
||||||
View coverSeparator;
|
|
||||||
ImageView more;
|
|
||||||
ImageView cover;
|
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHorizontalTrackBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
differentDiscDivider = itemView.findViewById(R.id.different_disk_divider);
|
this.item = item;
|
||||||
songTitle = itemView.findViewById(R.id.search_result_song_title_text_view);
|
|
||||||
songSubtitle = itemView.findViewById(R.id.search_result_song_subtitle_text_view);
|
|
||||||
trackNumber = itemView.findViewById(R.id.track_number_text_view);
|
|
||||||
downloadIndicator = itemView.findViewById(R.id.search_result_dowanload_indicator_image_view);
|
|
||||||
more = itemView.findViewById(R.id.search_result_song_more_button);
|
|
||||||
cover = itemView.findViewById(R.id.song_cover_image_view);
|
|
||||||
coverSeparator = itemView.findViewById(R.id.cover_image_separator);
|
|
||||||
|
|
||||||
songTitle.setSelected(true);
|
item.searchResultSongTitleTextView.setSelected(true);
|
||||||
songSubtitle.setSelected(true);
|
item.searchResultSongSubtitleTextView.setSelected(true);
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
itemView.setOnLongClickListener(v -> onLongClick());
|
itemView.setOnLongClickListener(v -> onLongClick());
|
||||||
|
|
||||||
more.setOnClickListener(v -> onLongClick());
|
item.searchResultSongMoreButton.setOnClickListener(v -> onLongClick());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClick() {
|
public void onClick() {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,13 @@
|
||||||
package com.cappielloantonio.play.adapter;
|
package com.cappielloantonio.play.adapter;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.databinding.ItemHomeYearBinding;
|
||||||
import com.cappielloantonio.play.interfaces.ClickCallback;
|
import com.cappielloantonio.play.interfaces.ClickCallback;
|
||||||
import com.cappielloantonio.play.model.Media;
|
import com.cappielloantonio.play.model.Media;
|
||||||
|
|
||||||
|
|
@ -18,13 +15,11 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class YearAdapter extends RecyclerView.Adapter<YearAdapter.ViewHolder> {
|
public class YearAdapter extends RecyclerView.Adapter<YearAdapter.ViewHolder> {
|
||||||
private final Context context;
|
|
||||||
private final ClickCallback click;
|
private final ClickCallback click;
|
||||||
|
|
||||||
private List<Integer> years;
|
private List<Integer> years;
|
||||||
|
|
||||||
public YearAdapter(Context context, ClickCallback click) {
|
public YearAdapter(ClickCallback click) {
|
||||||
this.context = context;
|
|
||||||
this.click = click;
|
this.click = click;
|
||||||
this.years = Collections.emptyList();
|
this.years = Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
@ -32,7 +27,7 @@ public class YearAdapter extends RecyclerView.Adapter<YearAdapter.ViewHolder> {
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||||
View view = LayoutInflater.from(context).inflate(R.layout.item_home_year, parent, false);
|
ItemHomeYearBinding view = ItemHomeYearBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
|
||||||
return new ViewHolder(view);
|
return new ViewHolder(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -40,7 +35,7 @@ public class YearAdapter extends RecyclerView.Adapter<YearAdapter.ViewHolder> {
|
||||||
public void onBindViewHolder(ViewHolder holder, int position) {
|
public void onBindViewHolder(ViewHolder holder, int position) {
|
||||||
int year = years.get(position);
|
int year = years.get(position);
|
||||||
|
|
||||||
holder.textYear.setText(Integer.toString(year));
|
holder.item.yearLabel.setText(Integer.toString(year));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -58,12 +53,12 @@ public class YearAdapter extends RecyclerView.Adapter<YearAdapter.ViewHolder> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
TextView textYear;
|
ItemHomeYearBinding item;
|
||||||
|
|
||||||
ViewHolder(View itemView) {
|
ViewHolder(ItemHomeYearBinding item) {
|
||||||
super(itemView);
|
super(item.getRoot());
|
||||||
|
|
||||||
textYear = itemView.findViewById(R.id.year_label);
|
this.item = item;
|
||||||
|
|
||||||
itemView.setOnClickListener(v -> onClick());
|
itemView.setOnClickListener(v -> onClick());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
package com.cappielloantonio.play.database;
|
package com.cappielloantonio.play.database;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import androidx.room.AutoMigration;
|
import androidx.room.AutoMigration;
|
||||||
import androidx.room.Database;
|
import androidx.room.Database;
|
||||||
import androidx.room.Room;
|
import androidx.room.Room;
|
||||||
import androidx.room.RoomDatabase;
|
import androidx.room.RoomDatabase;
|
||||||
import androidx.room.TypeConverters;
|
import androidx.room.TypeConverters;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.database.converter.DateConverters;
|
import com.cappielloantonio.play.database.converter.DateConverters;
|
||||||
import com.cappielloantonio.play.database.dao.ChronologyDao;
|
import com.cappielloantonio.play.database.dao.ChronologyDao;
|
||||||
import com.cappielloantonio.play.database.dao.DownloadDao;
|
import com.cappielloantonio.play.database.dao.DownloadDao;
|
||||||
|
|
@ -32,9 +31,9 @@ public abstract class AppDatabase extends RoomDatabase {
|
||||||
private final static String DB_NAME = "play_db";
|
private final static String DB_NAME = "play_db";
|
||||||
private static AppDatabase instance;
|
private static AppDatabase instance;
|
||||||
|
|
||||||
public static synchronized AppDatabase getInstance(Context context) {
|
public static synchronized AppDatabase getInstance() {
|
||||||
if (instance == null && context != null) {
|
if (instance == null) {
|
||||||
instance = Room.databaseBuilder(context, AppDatabase.class, DB_NAME)
|
instance = Room.databaseBuilder(App.getContext(), AppDatabase.class, DB_NAME)
|
||||||
.fallbackToDestructiveMigration()
|
.fallbackToDestructiveMigration()
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,8 +40,8 @@ public class CustomGlideRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String createUrl(String item, int size) {
|
public static String createUrl(String item, int size) {
|
||||||
String url = App.getSubsonicClientInstance(App.getInstance(), false).getUrl();
|
String url = App.getSubsonicClientInstance(false).getUrl();
|
||||||
Map<String, String> params = App.getSubsonicClientInstance(App.getInstance(), false).getParams();
|
Map<String, String> params = App.getSubsonicClientInstance(false).getParams();
|
||||||
|
|
||||||
url = url + "getCoverArt" +
|
url = url + "getCoverArt" +
|
||||||
"?u=" + params.get("u") +
|
"?u=" + params.get("u") +
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
|
@ -11,7 +9,6 @@ import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
@ -26,16 +23,10 @@ import retrofit2.Response;
|
||||||
public class AlbumRepository {
|
public class AlbumRepository {
|
||||||
private static final String TAG = "AlbumRepository";
|
private static final String TAG = "AlbumRepository";
|
||||||
|
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public AlbumRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MutableLiveData<List<AlbumID3>> getAlbums(String type, int size, Integer fromYear, Integer toYear) {
|
public MutableLiveData<List<AlbumID3>> getAlbums(String type, int size, Integer fromYear, Integer toYear) {
|
||||||
MutableLiveData<List<AlbumID3>> listLiveAlbums = new MutableLiveData<>();
|
MutableLiveData<List<AlbumID3>> listLiveAlbums = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getAlbumList2(type, size, 0, fromYear, toYear)
|
.getAlbumList2(type, size, 0, fromYear, toYear)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -58,7 +49,7 @@ public class AlbumRepository {
|
||||||
public MutableLiveData<List<AlbumID3>> getStarredAlbums(boolean random, int size) {
|
public MutableLiveData<List<AlbumID3>> getStarredAlbums(boolean random, int size) {
|
||||||
MutableLiveData<List<AlbumID3>> starredAlbums = new MutableLiveData<>(new ArrayList<>());
|
MutableLiveData<List<AlbumID3>> starredAlbums = new MutableLiveData<>(new ArrayList<>());
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getStarred2()
|
.getStarred2()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -86,7 +77,7 @@ public class AlbumRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void star(String id) {
|
public void star(String id) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.star(null, id, null)
|
.star(null, id, null)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -103,7 +94,7 @@ public class AlbumRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unstar(String id) {
|
public void unstar(String id) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.unstar(null, id, null)
|
.unstar(null, id, null)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -120,7 +111,7 @@ public class AlbumRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRating(String id, int rating) {
|
public void setRating(String id, int rating) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.setRating(id, rating)
|
.setRating(id, rating)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -139,7 +130,7 @@ public class AlbumRepository {
|
||||||
public MutableLiveData<List<Child>> getAlbumTracks(String id) {
|
public MutableLiveData<List<Child>> getAlbumTracks(String id) {
|
||||||
MutableLiveData<List<Child>> albumTracks = new MutableLiveData<>();
|
MutableLiveData<List<Child>> albumTracks = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getAlbum(id)
|
.getAlbum(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -166,7 +157,7 @@ public class AlbumRepository {
|
||||||
public MutableLiveData<List<AlbumID3>> getArtistAlbums(String id) {
|
public MutableLiveData<List<AlbumID3>> getArtistAlbums(String id) {
|
||||||
MutableLiveData<List<AlbumID3>> artistsAlbum = new MutableLiveData<>(new ArrayList<>());
|
MutableLiveData<List<AlbumID3>> artistsAlbum = new MutableLiveData<>(new ArrayList<>());
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtist(id)
|
.getArtist(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -191,7 +182,7 @@ public class AlbumRepository {
|
||||||
public MutableLiveData<AlbumID3> getAlbum(String id) {
|
public MutableLiveData<AlbumID3> getAlbum(String id) {
|
||||||
MutableLiveData<AlbumID3> album = new MutableLiveData<>();
|
MutableLiveData<AlbumID3> album = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getAlbum(id)
|
.getAlbum(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -212,7 +203,7 @@ public class AlbumRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getInstantMix(AlbumID3 album, int count, MediaCallback callback) {
|
public void getInstantMix(AlbumID3 album, int count, MediaCallback callback) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getSimilarSongs2(album.getId(), count)
|
.getSimilarSongs2(album.getId(), count)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -257,7 +248,7 @@ public class AlbumRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getFirstAlbum(DecadesCallback callback) {
|
private void getFirstAlbum(DecadesCallback callback) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getAlbumList2("byYear", 1, 0, 1900, Calendar.getInstance().get(Calendar.YEAR))
|
.getAlbumList2("byYear", 1, 0, 1900, Calendar.getInstance().get(Calendar.YEAR))
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -276,7 +267,7 @@ public class AlbumRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getLastAlbum(DecadesCallback callback) {
|
private void getLastAlbum(DecadesCallback callback) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getAlbumList2("byYear", 1, 0, Calendar.getInstance().get(Calendar.YEAR), 1900)
|
.getAlbumList2("byYear", 1, 0, Calendar.getInstance().get(Calendar.YEAR), 1900)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.LifecycleOwner;
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
@ -23,16 +21,10 @@ import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
public class ArtistRepository {
|
public class ArtistRepository {
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public ArtistRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MutableLiveData<List<ArtistID3>> getStarredArtists(boolean random, int size) {
|
public MutableLiveData<List<ArtistID3>> getStarredArtists(boolean random, int size) {
|
||||||
MutableLiveData<List<ArtistID3>> starredArtists = new MutableLiveData<>();
|
MutableLiveData<List<ArtistID3>> starredArtists = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getStarred2()
|
.getStarred2()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -62,7 +54,7 @@ public class ArtistRepository {
|
||||||
public MutableLiveData<List<ArtistID3>> getArtists(boolean random, int size) {
|
public MutableLiveData<List<ArtistID3>> getArtists(boolean random, int size) {
|
||||||
MutableLiveData<List<ArtistID3>> listLiveArtists = new MutableLiveData<>();
|
MutableLiveData<List<ArtistID3>> listLiveArtists = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtists()
|
.getArtists()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -101,7 +93,7 @@ public class ArtistRepository {
|
||||||
list.setValue(liveArtists);
|
list.setValue(liveArtists);
|
||||||
|
|
||||||
for (ArtistID3 artist : artists) {
|
for (ArtistID3 artist : artists) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtist(artist.getId())
|
.getArtist(artist.getId())
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -123,7 +115,7 @@ public class ArtistRepository {
|
||||||
public MutableLiveData<ArtistID3> getArtistInfo(String id) {
|
public MutableLiveData<ArtistID3> getArtistInfo(String id) {
|
||||||
MutableLiveData<ArtistID3> artist = new MutableLiveData<>();
|
MutableLiveData<ArtistID3> artist = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtist(id)
|
.getArtist(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -149,7 +141,7 @@ public class ArtistRepository {
|
||||||
public MutableLiveData<ArtistInfo2> getArtistFullInfo(String id) {
|
public MutableLiveData<ArtistInfo2> getArtistFullInfo(String id) {
|
||||||
MutableLiveData<ArtistInfo2> artistFullInfo = new MutableLiveData<>();
|
MutableLiveData<ArtistInfo2> artistFullInfo = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtistInfo2(id)
|
.getArtistInfo2(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -170,7 +162,7 @@ public class ArtistRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void star(String id) {
|
public void star(String id) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.star(null, null, id)
|
.star(null, null, id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -187,7 +179,7 @@ public class ArtistRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unstar(String id) {
|
public void unstar(String id) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.unstar(null, null, id)
|
.unstar(null, null, id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -204,7 +196,7 @@ public class ArtistRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRating(String id, int rating) {
|
public void setRating(String id, int rating) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.setRating(id, rating)
|
.setRating(id, rating)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -223,7 +215,7 @@ public class ArtistRepository {
|
||||||
public MutableLiveData<ArtistID3> getArtist(String id) {
|
public MutableLiveData<ArtistID3> getArtist(String id) {
|
||||||
MutableLiveData<ArtistID3> artist = new MutableLiveData<>();
|
MutableLiveData<ArtistID3> artist = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtist(id)
|
.getArtist(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -246,7 +238,7 @@ public class ArtistRepository {
|
||||||
public MutableLiveData<List<Child>> getInstantMix(ArtistID3 artist, int count) {
|
public MutableLiveData<List<Child>> getInstantMix(ArtistID3 artist, int count) {
|
||||||
MutableLiveData<List<Child>> instantMix = new MutableLiveData<>();
|
MutableLiveData<List<Child>> instantMix = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getSimilarSongs2(artist.getId(), count)
|
.getSimilarSongs2(artist.getId(), count)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -269,7 +261,7 @@ public class ArtistRepository {
|
||||||
public MutableLiveData<ArrayList<Child>> getArtistRandomSong(LifecycleOwner owner, ArtistID3 artist, int count) {
|
public MutableLiveData<ArrayList<Child>> getArtistRandomSong(LifecycleOwner owner, ArtistID3 artist, int count) {
|
||||||
MutableLiveData<ArrayList<Child>> randomSongs = new MutableLiveData<>();
|
MutableLiveData<ArrayList<Child>> randomSongs = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtist(artist.getId())
|
.getArtist(artist.getId())
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -279,7 +271,7 @@ public class ArtistRepository {
|
||||||
List<AlbumID3> albums = response.body().getSubsonicResponse().getArtist().getAlbums();
|
List<AlbumID3> albums = response.body().getSubsonicResponse().getArtist().getAlbums();
|
||||||
|
|
||||||
if (albums.size() > 0) {
|
if (albums.size() > 0) {
|
||||||
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
|
AlbumRepository albumRepository = new AlbumRepository();
|
||||||
|
|
||||||
for (int index = 0; index < albums.size(); index++) {
|
for (int index = 0; index < albums.size(); index++) {
|
||||||
albumRepository.getAlbumTracks(albums.get(index).getId()).observe(owner, songs -> {
|
albumRepository.getAlbumTracks(albums.get(index).getId()).observe(owner, songs -> {
|
||||||
|
|
@ -306,7 +298,7 @@ public class ArtistRepository {
|
||||||
public MutableLiveData<List<Child>> getTopSongs(String artistName, int count) {
|
public MutableLiveData<List<Child>> getTopSongs(String artistName, int count) {
|
||||||
MutableLiveData<List<Child>> topSongs = new MutableLiveData<>(new ArrayList<>());
|
MutableLiveData<List<Child>> topSongs = new MutableLiveData<>(new ArrayList<>());
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getTopSongs(artistName, count)
|
.getTopSongs(artistName, count)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.database.AppDatabase;
|
import com.cappielloantonio.play.database.AppDatabase;
|
||||||
|
|
@ -12,14 +10,7 @@ import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ChronologyRepository {
|
public class ChronologyRepository {
|
||||||
private static final String TAG = "ChronologyRepository";
|
private final ChronologyDao chronologyDao = AppDatabase.getInstance().chronologyDao();
|
||||||
|
|
||||||
private final ChronologyDao chronologyDao;
|
|
||||||
|
|
||||||
public ChronologyRepository(Application application) {
|
|
||||||
AppDatabase database = AppDatabase.getInstance(application);
|
|
||||||
chronologyDao = database.chronologyDao();
|
|
||||||
}
|
|
||||||
|
|
||||||
public LiveData<List<Chronology>> getThisWeek(String server) {
|
public LiveData<List<Chronology>> getThisWeek(String server) {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.database.AppDatabase;
|
import com.cappielloantonio.play.database.AppDatabase;
|
||||||
|
|
@ -11,12 +9,7 @@ import com.cappielloantonio.play.model.Download;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class DownloadRepository {
|
public class DownloadRepository {
|
||||||
private final DownloadDao downloadDao;
|
private final DownloadDao downloadDao = AppDatabase.getInstance().downloadDao();
|
||||||
|
|
||||||
public DownloadRepository(Application application) {
|
|
||||||
AppDatabase database = AppDatabase.getInstance(application);
|
|
||||||
downloadDao = database.downloadDao();
|
|
||||||
}
|
|
||||||
|
|
||||||
public LiveData<List<Download>> getLiveDownload() {
|
public LiveData<List<Download>> getLiveDownload() {
|
||||||
return downloadDao.getAll();
|
return downloadDao.getAll();
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,11 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.Genre;
|
import com.cappielloantonio.play.subsonic.models.Genre;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -18,18 +15,10 @@ import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
public class GenreRepository {
|
public class GenreRepository {
|
||||||
private static final String TAG = "GenreRepository";
|
|
||||||
|
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public GenreRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MutableLiveData<List<Genre>> getGenres(boolean random, int size) {
|
public MutableLiveData<List<Genre>> getGenres(boolean random, int size) {
|
||||||
MutableLiveData<List<Genre>> genres = new MutableLiveData<>();
|
MutableLiveData<List<Genre>> genres = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getGenres()
|
.getGenres()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
@ -23,20 +22,12 @@ import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
public class PlaylistRepository {
|
public class PlaylistRepository {
|
||||||
private final Application application;
|
private final PlaylistDao playlistDao = AppDatabase.getInstance().playlistDao();
|
||||||
private final PlaylistDao playlistDao;
|
|
||||||
|
|
||||||
public PlaylistRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
|
|
||||||
AppDatabase database = AppDatabase.getInstance(application);
|
|
||||||
this.playlistDao = database.playlistDao();
|
|
||||||
}
|
|
||||||
|
|
||||||
public MutableLiveData<List<Playlist>> getPlaylists(boolean random, int size) {
|
public MutableLiveData<List<Playlist>> getPlaylists(boolean random, int size) {
|
||||||
MutableLiveData<List<Playlist>> listLivePlaylists = new MutableLiveData<>(new ArrayList<>());
|
MutableLiveData<List<Playlist>> listLivePlaylists = new MutableLiveData<>(new ArrayList<>());
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPlaylistClient()
|
.getPlaylistClient()
|
||||||
.getPlaylists()
|
.getPlaylists()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -65,7 +56,7 @@ public class PlaylistRepository {
|
||||||
public MutableLiveData<List<Child>> getPlaylistSongs(String id) {
|
public MutableLiveData<List<Child>> getPlaylistSongs(String id) {
|
||||||
MutableLiveData<List<Child>> listLivePlaylistSongs = new MutableLiveData<>();
|
MutableLiveData<List<Child>> listLivePlaylistSongs = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPlaylistClient()
|
.getPlaylistClient()
|
||||||
.getPlaylist(id)
|
.getPlaylist(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -86,7 +77,7 @@ public class PlaylistRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSongToPlaylist(String playlistId, ArrayList<String> songsId) {
|
public void addSongToPlaylist(String playlistId, ArrayList<String> songsId) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPlaylistClient()
|
.getPlaylistClient()
|
||||||
.updatePlaylist(playlistId, null, true, songsId, null)
|
.updatePlaylist(playlistId, null, true, songsId, null)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -103,7 +94,7 @@ public class PlaylistRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createPlaylist(String playlistId, String name, ArrayList<String> songsId) {
|
public void createPlaylist(String playlistId, String name, ArrayList<String> songsId) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPlaylistClient()
|
.getPlaylistClient()
|
||||||
.createPlaylist(playlistId, name, songsId)
|
.createPlaylist(playlistId, name, songsId)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -120,7 +111,7 @@ public class PlaylistRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updatePlaylist(String playlistId, String name, boolean isPublic, ArrayList<String> songIdToAdd, ArrayList<Integer> songIndexToRemove) {
|
public void updatePlaylist(String playlistId, String name, boolean isPublic, ArrayList<String> songIdToAdd, ArrayList<Integer> songIndexToRemove) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPlaylistClient()
|
.getPlaylistClient()
|
||||||
.updatePlaylist(playlistId, name, isPublic, songIdToAdd, songIndexToRemove)
|
.updatePlaylist(playlistId, name, isPublic, songIdToAdd, songIndexToRemove)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -137,7 +128,7 @@ public class PlaylistRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deletePlaylist(String playlistId) {
|
public void deletePlaylist(String playlistId) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPlaylistClient()
|
.getPlaylistClient()
|
||||||
.deletePlaylist(playlistId)
|
.deletePlaylist(playlistId)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
@ -10,7 +9,6 @@ import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.PodcastChannel;
|
import com.cappielloantonio.play.subsonic.models.PodcastChannel;
|
||||||
import com.cappielloantonio.play.subsonic.models.PodcastEpisode;
|
import com.cappielloantonio.play.subsonic.models.PodcastEpisode;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -19,18 +17,12 @@ import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
public class PodcastRepository {
|
public class PodcastRepository {
|
||||||
private static final String TAG = "SongRepository";
|
private static final String TAG = "PodcastRepository";
|
||||||
|
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public PodcastRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MutableLiveData<List<PodcastChannel>> getPodcastChannels(boolean includeEpisodes, String channelId) {
|
public MutableLiveData<List<PodcastChannel>> getPodcastChannels(boolean includeEpisodes, String channelId) {
|
||||||
MutableLiveData<List<PodcastChannel>> livePodcastChannel = new MutableLiveData<>();
|
MutableLiveData<List<PodcastChannel>> livePodcastChannel = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPodcastClient()
|
.getPodcastClient()
|
||||||
.getPodcasts(includeEpisodes, channelId)
|
.getPodcasts(includeEpisodes, channelId)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -53,7 +45,7 @@ public class PodcastRepository {
|
||||||
public MutableLiveData<List<PodcastEpisode>> getNewestPodcastEpisodes(int count) {
|
public MutableLiveData<List<PodcastEpisode>> getNewestPodcastEpisodes(int count) {
|
||||||
MutableLiveData<List<PodcastEpisode>> liveNewestPodcastEpisodes = new MutableLiveData<>();
|
MutableLiveData<List<PodcastEpisode>> liveNewestPodcastEpisodes = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPodcastClient()
|
.getPodcastClient()
|
||||||
.getNewestPodcasts(count)
|
.getNewestPodcasts(count)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -74,7 +66,7 @@ public class PodcastRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshPodcasts() {
|
public void refreshPodcasts() {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getPodcastClient()
|
.getPodcastClient()
|
||||||
.refreshPodcasts()
|
.refreshPodcasts()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
|
|
||||||
|
|
@ -18,12 +16,7 @@ import java.util.stream.Collectors;
|
||||||
public class QueueRepository {
|
public class QueueRepository {
|
||||||
private static final String TAG = "QueueRepository";
|
private static final String TAG = "QueueRepository";
|
||||||
|
|
||||||
private final QueueDao queueDao;
|
private final QueueDao queueDao = AppDatabase.getInstance().queueDao();
|
||||||
|
|
||||||
public QueueRepository(Application application) {
|
|
||||||
AppDatabase database = AppDatabase.getInstance(application);
|
|
||||||
queueDao = database.queueDao();
|
|
||||||
}
|
|
||||||
|
|
||||||
public LiveData<List<Queue>> getLiveQueue() {
|
public LiveData<List<Queue>> getLiveQueue() {
|
||||||
return queueDao.getAll();
|
return queueDao.getAll();
|
||||||
|
|
@ -205,11 +198,7 @@ public class QueueRepository {
|
||||||
|
|
||||||
if (mediaItem.mediaId.equals(lastMediaPlayed.getId())) {
|
if (mediaItem.mediaId.equals(lastMediaPlayed.getId())) {
|
||||||
|
|
||||||
if (System.currentTimeMillis() > lastMediaPlayed.getLastPlay() + lastMediaPlayed.getDuration() * 1000) {
|
isPlausible = System.currentTimeMillis() > lastMediaPlayed.getLastPlay() + lastMediaPlayed.getDuration() * 1000;
|
||||||
isPlausible = true;
|
|
||||||
} else {
|
|
||||||
isPlausible = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,17 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.interfaces.ScanCallback;
|
import com.cappielloantonio.play.interfaces.ScanCallback;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
|
|
||||||
public class ScanRepository {
|
public class ScanRepository {
|
||||||
private static final String TAG = "SongRepository";
|
|
||||||
|
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public ScanRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void startScan(ScanCallback callback) {
|
public void startScan(ScanCallback callback) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaLibraryScanningClient()
|
.getMediaLibraryScanningClient()
|
||||||
.startScan()
|
.startScan()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -41,7 +30,7 @@ public class ScanRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getScanStatus(ScanCallback callback) {
|
public void getScanStatus(ScanCallback callback) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaLibraryScanningClient()
|
.getMediaLibraryScanningClient()
|
||||||
.startScan()
|
.startScan()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
|
@ -14,7 +12,6 @@ import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
import com.cappielloantonio.play.subsonic.models.SearchResult3;
|
import com.cappielloantonio.play.subsonic.models.SearchResult3;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
|
@ -25,20 +22,12 @@ import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
public class SearchingRepository {
|
public class SearchingRepository {
|
||||||
private final RecentSearchDao recentSearchDao;
|
private final RecentSearchDao recentSearchDao = AppDatabase.getInstance().recentSearchDao();
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public SearchingRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
|
|
||||||
AppDatabase database = AppDatabase.getInstance(application);
|
|
||||||
recentSearchDao = database.recentSearchDao();
|
|
||||||
}
|
|
||||||
|
|
||||||
public MutableLiveData<SearchResult3> search(String query) {
|
public MutableLiveData<SearchResult3> search(String query) {
|
||||||
MutableLiveData<SearchResult3> result = new MutableLiveData<>();
|
MutableLiveData<SearchResult3> result = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getSearchingClient()
|
.getSearchingClient()
|
||||||
.search3(query, 20, 20, 20)
|
.search3(query, 20, 20, 20)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -59,7 +48,7 @@ public class SearchingRepository {
|
||||||
public MutableLiveData<List<String>> getSuggestions(String query) {
|
public MutableLiveData<List<String>> getSuggestions(String query) {
|
||||||
MutableLiveData<List<String>> suggestions = new MutableLiveData<>();
|
MutableLiveData<List<String>> suggestions = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getSearchingClient()
|
.getSearchingClient()
|
||||||
.search3(query, 5, 5, 5)
|
.search3(query, 5, 5, 5)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -68,19 +57,19 @@ public class SearchingRepository {
|
||||||
List<String> newSuggestions = new ArrayList();
|
List<String> newSuggestions = new ArrayList();
|
||||||
|
|
||||||
if (response.isSuccessful() && response.body() != null) {
|
if (response.isSuccessful() && response.body() != null) {
|
||||||
if(response.body().getSubsonicResponse().getSearchResult3().getArtists() != null) {
|
if (response.body().getSubsonicResponse().getSearchResult3().getArtists() != null) {
|
||||||
for (ArtistID3 artistID3 : response.body().getSubsonicResponse().getSearchResult3().getArtists()) {
|
for (ArtistID3 artistID3 : response.body().getSubsonicResponse().getSearchResult3().getArtists()) {
|
||||||
newSuggestions.add(artistID3.getName());
|
newSuggestions.add(artistID3.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(response.body().getSubsonicResponse().getSearchResult3().getAlbums() != null) {
|
if (response.body().getSubsonicResponse().getSearchResult3().getAlbums() != null) {
|
||||||
for (AlbumID3 albumID3 : response.body().getSubsonicResponse().getSearchResult3().getAlbums()) {
|
for (AlbumID3 albumID3 : response.body().getSubsonicResponse().getSearchResult3().getAlbums()) {
|
||||||
newSuggestions.add(albumID3.getName());
|
newSuggestions.add(albumID3.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(response.body().getSubsonicResponse().getSearchResult3().getSongs() != null) {
|
if (response.body().getSubsonicResponse().getSearchResult3().getSongs() != null) {
|
||||||
for (Child song : response.body().getSubsonicResponse().getSearchResult3().getSongs()) {
|
for (Child song : response.body().getSubsonicResponse().getSearchResult3().getSongs()) {
|
||||||
newSuggestions.add(song.getTitle());
|
newSuggestions.add(song.getTitle());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
|
|
||||||
import com.cappielloantonio.play.database.AppDatabase;
|
import com.cappielloantonio.play.database.AppDatabase;
|
||||||
|
|
@ -13,12 +11,7 @@ import java.util.List;
|
||||||
public class ServerRepository {
|
public class ServerRepository {
|
||||||
private static final String TAG = "QueueRepository";
|
private static final String TAG = "QueueRepository";
|
||||||
|
|
||||||
private final ServerDao serverDao;
|
private final ServerDao serverDao = AppDatabase.getInstance().serverDao();
|
||||||
|
|
||||||
public ServerRepository(Application application) {
|
|
||||||
AppDatabase database = AppDatabase.getInstance(application);
|
|
||||||
serverDao = database.serverDao();
|
|
||||||
}
|
|
||||||
|
|
||||||
public LiveData<List<Server>> getLiveServer() {
|
public LiveData<List<Server>> getLiveServer() {
|
||||||
return serverDao.getAll();
|
return serverDao.getAll();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
@ -11,13 +10,10 @@ import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import kotlin.collections.EmptyList;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
@ -25,16 +21,10 @@ import retrofit2.Response;
|
||||||
public class SongRepository {
|
public class SongRepository {
|
||||||
private static final String TAG = "SongRepository";
|
private static final String TAG = "SongRepository";
|
||||||
|
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public SongRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MutableLiveData<List<Child>> getStarredSongs(boolean random, int size) {
|
public MutableLiveData<List<Child>> getStarredSongs(boolean random, int size) {
|
||||||
MutableLiveData<List<Child>> starredSongs = new MutableLiveData<>(Collections.EMPTY_LIST);
|
MutableLiveData<List<Child>> starredSongs = new MutableLiveData<>(Collections.EMPTY_LIST);
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getStarred2()
|
.getStarred2()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -66,7 +56,7 @@ public class SongRepository {
|
||||||
public MutableLiveData<List<Child>> getInstantMix(Child song, int count) {
|
public MutableLiveData<List<Child>> getInstantMix(Child song, int count) {
|
||||||
MutableLiveData<List<Child>> instantMix = new MutableLiveData<>();
|
MutableLiveData<List<Child>> instantMix = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getSimilarSongs2(song.getId(), count)
|
.getSimilarSongs2(song.getId(), count)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -89,7 +79,7 @@ public class SongRepository {
|
||||||
public MutableLiveData<List<Child>> getRandomSample(int number, Integer fromYear, Integer toYear) {
|
public MutableLiveData<List<Child>> getRandomSample(int number, Integer fromYear, Integer toYear) {
|
||||||
MutableLiveData<List<Child>> randomSongsSample = new MutableLiveData<>();
|
MutableLiveData<List<Child>> randomSongsSample = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getRandomSongs(number, fromYear, toYear)
|
.getRandomSongs(number, fromYear, toYear)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -114,7 +104,7 @@ public class SongRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scrobble(String id) {
|
public void scrobble(String id) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.scrobble(id)
|
.scrobble(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -131,7 +121,7 @@ public class SongRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void star(String id) {
|
public void star(String id) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.star(id, null, null)
|
.star(id, null, null)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -148,7 +138,7 @@ public class SongRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unstar(String id) {
|
public void unstar(String id) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.unstar(id, null, null)
|
.unstar(id, null, null)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -165,7 +155,7 @@ public class SongRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRating(String id, int rating) {
|
public void setRating(String id, int rating) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaAnnotationClient()
|
.getMediaAnnotationClient()
|
||||||
.setRating(id, rating)
|
.setRating(id, rating)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -184,7 +174,7 @@ public class SongRepository {
|
||||||
public MutableLiveData<List<Child>> getSongsByGenre(String id) {
|
public MutableLiveData<List<Child>> getSongsByGenre(String id) {
|
||||||
MutableLiveData<List<Child>> songsByGenre = new MutableLiveData<>();
|
MutableLiveData<List<Child>> songsByGenre = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getSongsByGenre(id, 500, 0)
|
.getSongsByGenre(id, 500, 0)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -218,7 +208,7 @@ public class SongRepository {
|
||||||
MutableLiveData<List<Child>> songsByGenre = new MutableLiveData<>();
|
MutableLiveData<List<Child>> songsByGenre = new MutableLiveData<>();
|
||||||
|
|
||||||
for (String id : genresId)
|
for (String id : genresId)
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getSongsByGenre(id, 500, 0)
|
.getSongsByGenre(id, 500, 0)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -245,7 +235,7 @@ public class SongRepository {
|
||||||
public MutableLiveData<Child> getSong(String id) {
|
public MutableLiveData<Child> getSong(String id) {
|
||||||
MutableLiveData<Child> song = new MutableLiveData<>();
|
MutableLiveData<Child> song = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getSong(id)
|
.getSong(id)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -268,7 +258,7 @@ public class SongRepository {
|
||||||
public MutableLiveData<String> getSongLyrics(Child song) {
|
public MutableLiveData<String> getSongLyrics(Child song) {
|
||||||
MutableLiveData<String> lyrics = new MutableLiveData<>(null);
|
MutableLiveData<String> lyrics = new MutableLiveData<>(null);
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getMediaRetrievalClient()
|
.getMediaRetrievalClient()
|
||||||
.getLyrics(song.getArtist(), song.getTitle())
|
.getLyrics(song.getArtist(), song.getTitle())
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.repository;
|
package com.cappielloantonio.play.repository;
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
|
@ -9,23 +7,14 @@ import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.interfaces.SystemCallback;
|
import com.cappielloantonio.play.interfaces.SystemCallback;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
|
import com.cappielloantonio.play.subsonic.models.ResponseStatus;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
public class SystemRepository {
|
public class SystemRepository {
|
||||||
private static final String TAG = "SongRepository";
|
|
||||||
|
|
||||||
private final Application application;
|
|
||||||
|
|
||||||
public SystemRepository(Application application) {
|
|
||||||
this.application = application;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void checkUserCredential(SystemCallback callback) {
|
public void checkUserCredential(SystemCallback callback) {
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getSystemClient()
|
.getSystemClient()
|
||||||
.ping()
|
.ping()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
@ -57,7 +46,7 @@ public class SystemRepository {
|
||||||
public MutableLiveData<Boolean> ping() {
|
public MutableLiveData<Boolean> ping() {
|
||||||
MutableLiveData<Boolean> pingResult = new MutableLiveData<>();
|
MutableLiveData<Boolean> pingResult = new MutableLiveData<>();
|
||||||
|
|
||||||
App.getSubsonicClientInstance(application, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getSystemClient()
|
.getSystemClient()
|
||||||
.ping()
|
.ping()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ import androidx.media3.exoplayer.offline.DownloadManager;
|
||||||
import androidx.media3.exoplayer.offline.DownloadRequest;
|
import androidx.media3.exoplayer.offline.DownloadRequest;
|
||||||
import androidx.media3.exoplayer.offline.DownloadService;
|
import androidx.media3.exoplayer.offline.DownloadService;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
|
||||||
import com.cappielloantonio.play.repository.DownloadRepository;
|
import com.cappielloantonio.play.repository.DownloadRepository;
|
||||||
import com.cappielloantonio.play.util.DownloadUtil;
|
import com.cappielloantonio.play.util.DownloadUtil;
|
||||||
|
|
||||||
|
|
@ -110,7 +109,7 @@ public class DownloaderManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DownloadRepository getDownloadRepository() {
|
private static DownloadRepository getDownloadRepository() {
|
||||||
return new DownloadRepository(App.getInstance());
|
return new DownloadRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void downloadDatabase(com.cappielloantonio.play.model.Download download) {
|
private static void downloadDatabase(com.cappielloantonio.play.model.Download download) {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import android.content.Context;
|
||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.session.MediaBrowser;
|
import androidx.media3.session.MediaBrowser;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
|
||||||
import com.cappielloantonio.play.interfaces.MediaIndexCallback;
|
import com.cappielloantonio.play.interfaces.MediaIndexCallback;
|
||||||
import com.cappielloantonio.play.model.Chronology;
|
import com.cappielloantonio.play.model.Chronology;
|
||||||
import com.cappielloantonio.play.repository.ChronologyRepository;
|
import com.cappielloantonio.play.repository.ChronologyRepository;
|
||||||
|
|
@ -83,7 +82,7 @@ public class MediaManager {
|
||||||
try {
|
try {
|
||||||
if (mediaBrowserListenableFuture.isDone()) {
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
mediaBrowserListenableFuture.get().clearMediaItems();
|
mediaBrowserListenableFuture.get().clearMediaItems();
|
||||||
mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(context, media, true));
|
mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(media, true));
|
||||||
mediaBrowserListenableFuture.get().seekTo(getQueueRepository().getLastPlayedMediaIndex(), getQueueRepository().getLastPlayedMediaTimestamp());
|
mediaBrowserListenableFuture.get().seekTo(getQueueRepository().getLastPlayedMediaIndex(), getQueueRepository().getLastPlayedMediaTimestamp());
|
||||||
mediaBrowserListenableFuture.get().prepare();
|
mediaBrowserListenableFuture.get().prepare();
|
||||||
}
|
}
|
||||||
|
|
@ -170,7 +169,7 @@ public class MediaManager {
|
||||||
try {
|
try {
|
||||||
if (mediaBrowserListenableFuture.isDone()) {
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
mediaBrowserListenableFuture.get().clearMediaItems();
|
mediaBrowserListenableFuture.get().clearMediaItems();
|
||||||
mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(context, media, true));
|
mediaBrowserListenableFuture.get().setMediaItems(MappingUtil.mapMediaItems(media, true));
|
||||||
mediaBrowserListenableFuture.get().prepare();
|
mediaBrowserListenableFuture.get().prepare();
|
||||||
mediaBrowserListenableFuture.get().seekTo(startIndex, 0);
|
mediaBrowserListenableFuture.get().seekTo(startIndex, 0);
|
||||||
mediaBrowserListenableFuture.get().play();
|
mediaBrowserListenableFuture.get().play();
|
||||||
|
|
@ -189,7 +188,7 @@ public class MediaManager {
|
||||||
try {
|
try {
|
||||||
if (mediaBrowserListenableFuture.isDone()) {
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
mediaBrowserListenableFuture.get().clearMediaItems();
|
mediaBrowserListenableFuture.get().clearMediaItems();
|
||||||
mediaBrowserListenableFuture.get().setMediaItem(MappingUtil.mapMediaItem(context, media, true));
|
mediaBrowserListenableFuture.get().setMediaItem(MappingUtil.mapMediaItem(media, true));
|
||||||
mediaBrowserListenableFuture.get().prepare();
|
mediaBrowserListenableFuture.get().prepare();
|
||||||
mediaBrowserListenableFuture.get().play();
|
mediaBrowserListenableFuture.get().play();
|
||||||
enqueueDatabase(media, true, 0);
|
enqueueDatabase(media, true, 0);
|
||||||
|
|
@ -208,10 +207,10 @@ public class MediaManager {
|
||||||
if (mediaBrowserListenableFuture.isDone()) {
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) {
|
if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) {
|
||||||
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex());
|
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex());
|
||||||
mediaBrowserListenableFuture.get().addMediaItems(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItems(context, media, true));
|
mediaBrowserListenableFuture.get().addMediaItems(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItems(media, true));
|
||||||
} else {
|
} else {
|
||||||
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getMediaItemCount());
|
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getMediaItemCount());
|
||||||
mediaBrowserListenableFuture.get().addMediaItems(MappingUtil.mapMediaItems(context, media, true));
|
mediaBrowserListenableFuture.get().addMediaItems(MappingUtil.mapMediaItems(media, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (ExecutionException | InterruptedException e) {
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
|
@ -228,10 +227,10 @@ public class MediaManager {
|
||||||
if (mediaBrowserListenableFuture.isDone()) {
|
if (mediaBrowserListenableFuture.isDone()) {
|
||||||
if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) {
|
if (playImmediatelyAfter && mediaBrowserListenableFuture.get().getNextMediaItemIndex() != -1) {
|
||||||
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex());
|
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getNextMediaItemIndex());
|
||||||
mediaBrowserListenableFuture.get().addMediaItem(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItem(context, media, true));
|
mediaBrowserListenableFuture.get().addMediaItem(mediaBrowserListenableFuture.get().getNextMediaItemIndex(), MappingUtil.mapMediaItem(media, true));
|
||||||
} else {
|
} else {
|
||||||
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getMediaItemCount());
|
enqueueDatabase(media, false, mediaBrowserListenableFuture.get().getMediaItemCount());
|
||||||
mediaBrowserListenableFuture.get().addMediaItem(MappingUtil.mapMediaItem(context, media, true));
|
mediaBrowserListenableFuture.get().addMediaItem(MappingUtil.mapMediaItem(media, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (ExecutionException | InterruptedException e) {
|
} catch (ExecutionException | InterruptedException e) {
|
||||||
|
|
@ -311,15 +310,15 @@ public class MediaManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static QueueRepository getQueueRepository() {
|
private static QueueRepository getQueueRepository() {
|
||||||
return new QueueRepository(App.getInstance());
|
return new QueueRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SongRepository getSongRepository() {
|
private static SongRepository getSongRepository() {
|
||||||
return new SongRepository(App.getInstance());
|
return new SongRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ChronologyRepository getChronologyRepository() {
|
private static ChronologyRepository getChronologyRepository() {
|
||||||
return new ChronologyRepository(App.getInstance());
|
return new ChronologyRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void enqueueDatabase(List<Child> media, boolean reset, int afterIndex) {
|
private static void enqueueDatabase(List<Child> media, boolean reset, int afterIndex) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package com.cappielloantonio.play.subsonic;
|
package com.cappielloantonio.play.subsonic;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.cappielloantonio.play.subsonic.api.albumsonglist.AlbumSongListClient;
|
import com.cappielloantonio.play.subsonic.api.albumsonglist.AlbumSongListClient;
|
||||||
import com.cappielloantonio.play.subsonic.api.browsing.BrowsingClient;
|
import com.cappielloantonio.play.subsonic.api.browsing.BrowsingClient;
|
||||||
import com.cappielloantonio.play.subsonic.api.mediaannotation.MediaAnnotationClient;
|
import com.cappielloantonio.play.subsonic.api.mediaannotation.MediaAnnotationClient;
|
||||||
|
|
@ -19,8 +17,6 @@ import java.util.Map;
|
||||||
public class Subsonic {
|
public class Subsonic {
|
||||||
private static final Version API_MAX_VERSION = Version.of("1.15.0");
|
private static final Version API_MAX_VERSION = Version.of("1.15.0");
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
|
|
||||||
private final Version apiVersion = API_MAX_VERSION;
|
private final Version apiVersion = API_MAX_VERSION;
|
||||||
private final SubsonicPreferences preferences;
|
private final SubsonicPreferences preferences;
|
||||||
|
|
||||||
|
|
@ -34,8 +30,7 @@ public class Subsonic {
|
||||||
private PodcastClient podcastClient;
|
private PodcastClient podcastClient;
|
||||||
private MediaLibraryScanningClient mediaLibraryScanningClient;
|
private MediaLibraryScanningClient mediaLibraryScanningClient;
|
||||||
|
|
||||||
public Subsonic(Context context, SubsonicPreferences preferences) {
|
public Subsonic(SubsonicPreferences preferences) {
|
||||||
this.context = context;
|
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,63 +40,63 @@ public class Subsonic {
|
||||||
|
|
||||||
public SystemClient getSystemClient() {
|
public SystemClient getSystemClient() {
|
||||||
if (systemClient == null) {
|
if (systemClient == null) {
|
||||||
systemClient = new SystemClient(context, this);
|
systemClient = new SystemClient(this);
|
||||||
}
|
}
|
||||||
return systemClient;
|
return systemClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BrowsingClient getBrowsingClient() {
|
public BrowsingClient getBrowsingClient() {
|
||||||
if (browsingClient == null) {
|
if (browsingClient == null) {
|
||||||
browsingClient = new BrowsingClient(context, this);
|
browsingClient = new BrowsingClient(this);
|
||||||
}
|
}
|
||||||
return browsingClient;
|
return browsingClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MediaRetrievalClient getMediaRetrievalClient() {
|
public MediaRetrievalClient getMediaRetrievalClient() {
|
||||||
if (mediaRetrievalClient == null) {
|
if (mediaRetrievalClient == null) {
|
||||||
mediaRetrievalClient = new MediaRetrievalClient(context, this);
|
mediaRetrievalClient = new MediaRetrievalClient(this);
|
||||||
}
|
}
|
||||||
return mediaRetrievalClient;
|
return mediaRetrievalClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlaylistClient getPlaylistClient() {
|
public PlaylistClient getPlaylistClient() {
|
||||||
if (playlistClient == null) {
|
if (playlistClient == null) {
|
||||||
playlistClient = new PlaylistClient(context, this);
|
playlistClient = new PlaylistClient(this);
|
||||||
}
|
}
|
||||||
return playlistClient;
|
return playlistClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SearchingClient getSearchingClient() {
|
public SearchingClient getSearchingClient() {
|
||||||
if (searchingClient == null) {
|
if (searchingClient == null) {
|
||||||
searchingClient = new SearchingClient(context, this);
|
searchingClient = new SearchingClient(this);
|
||||||
}
|
}
|
||||||
return searchingClient;
|
return searchingClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AlbumSongListClient getAlbumSongListClient() {
|
public AlbumSongListClient getAlbumSongListClient() {
|
||||||
if (albumSongListClient == null) {
|
if (albumSongListClient == null) {
|
||||||
albumSongListClient = new AlbumSongListClient(context, this);
|
albumSongListClient = new AlbumSongListClient(this);
|
||||||
}
|
}
|
||||||
return albumSongListClient;
|
return albumSongListClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MediaAnnotationClient getMediaAnnotationClient() {
|
public MediaAnnotationClient getMediaAnnotationClient() {
|
||||||
if (mediaAnnotationClient == null) {
|
if (mediaAnnotationClient == null) {
|
||||||
mediaAnnotationClient = new MediaAnnotationClient(context, this);
|
mediaAnnotationClient = new MediaAnnotationClient(this);
|
||||||
}
|
}
|
||||||
return mediaAnnotationClient;
|
return mediaAnnotationClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PodcastClient getPodcastClient() {
|
public PodcastClient getPodcastClient() {
|
||||||
if (podcastClient == null) {
|
if (podcastClient == null) {
|
||||||
podcastClient = new PodcastClient(context, this);
|
podcastClient = new PodcastClient(this);
|
||||||
}
|
}
|
||||||
return podcastClient;
|
return podcastClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MediaLibraryScanningClient getMediaLibraryScanningClient() {
|
public MediaLibraryScanningClient getMediaLibraryScanningClient() {
|
||||||
if (mediaLibraryScanningClient == null) {
|
if (mediaLibraryScanningClient == null) {
|
||||||
mediaLibraryScanningClient = new MediaLibraryScanningClient(context, this);
|
mediaLibraryScanningClient = new MediaLibraryScanningClient(this);
|
||||||
}
|
}
|
||||||
return mediaLibraryScanningClient;
|
return mediaLibraryScanningClient;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.albumsonglist;
|
package com.cappielloantonio.play.subsonic.api.albumsonglist;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class AlbumSongListClient {
|
public class AlbumSongListClient {
|
||||||
private static final String TAG = "BrowsingClient";
|
private static final String TAG = "BrowsingClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final AlbumSongListService albumSongListService;
|
private final AlbumSongListService albumSongListService;
|
||||||
|
|
||||||
public AlbumSongListClient(Context context, Subsonic subsonic) {
|
public AlbumSongListClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -74,7 +71,7 @@ public class AlbumSongListClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 60, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(60, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -101,6 +98,6 @@ public class AlbumSongListClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return new Cache(context.getCacheDir(), cacheSize);
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.browsing;
|
package com.cappielloantonio.play.subsonic.api.browsing;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class BrowsingClient {
|
public class BrowsingClient {
|
||||||
private static final String TAG = "BrowsingClient";
|
private static final String TAG = "BrowsingClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final BrowsingService browsingService;
|
private final BrowsingService browsingService;
|
||||||
|
|
||||||
public BrowsingClient(Context context, Subsonic subsonic) {
|
public BrowsingClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -124,7 +121,7 @@ public class BrowsingClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 60, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(60, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -147,6 +144,6 @@ public class BrowsingClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.mediaannotation;
|
package com.cappielloantonio.play.subsonic.api.mediaannotation;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class MediaAnnotationClient {
|
public class MediaAnnotationClient {
|
||||||
private static final String TAG = "BrowsingClient";
|
private static final String TAG = "BrowsingClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final MediaAnnotationService mediaAnnotationService;
|
private final MediaAnnotationService mediaAnnotationService;
|
||||||
|
|
||||||
public MediaAnnotationClient(Context context, Subsonic subsonic) {
|
public MediaAnnotationClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -59,7 +56,7 @@ public class MediaAnnotationClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 0, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(0, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -81,6 +78,6 @@ public class MediaAnnotationClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.medialibraryscanning;
|
package com.cappielloantonio.play.subsonic.api.medialibraryscanning;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class MediaLibraryScanningClient {
|
public class MediaLibraryScanningClient {
|
||||||
private static final String TAG = "SystemClient";
|
private static final String TAG = "SystemClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final MediaLibraryScanningService mediaLibraryScanningService;
|
private final MediaLibraryScanningService mediaLibraryScanningService;
|
||||||
|
|
||||||
public MediaLibraryScanningClient(Context context, Subsonic subsonic) {
|
public MediaLibraryScanningClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -49,7 +46,7 @@ public class MediaLibraryScanningClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 0, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(0, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -71,6 +68,6 @@ public class MediaLibraryScanningClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.mediaretrieval;
|
package com.cappielloantonio.play.subsonic.api.mediaretrieval;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class MediaRetrievalClient {
|
public class MediaRetrievalClient {
|
||||||
private static final String TAG = "BrowsingClient";
|
private static final String TAG = "BrowsingClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final MediaRetrievalService mediaRetrievalService;
|
private final MediaRetrievalService mediaRetrievalService;
|
||||||
|
|
||||||
public MediaRetrievalClient(Context context, Subsonic subsonic) {
|
public MediaRetrievalClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -54,7 +51,7 @@ public class MediaRetrievalClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 0, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(0, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -77,6 +74,6 @@ public class MediaRetrievalClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.playlist;
|
package com.cappielloantonio.play.subsonic.api.playlist;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -22,12 +21,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class PlaylistClient {
|
public class PlaylistClient {
|
||||||
private static final String TAG = "BrowsingClient";
|
private static final String TAG = "BrowsingClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final PlaylistService playlistService;
|
private final PlaylistService playlistService;
|
||||||
|
|
||||||
public PlaylistClient(Context context, Subsonic subsonic) {
|
public PlaylistClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -65,7 +62,7 @@ public class PlaylistClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 0, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(0, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -87,6 +84,6 @@ public class PlaylistClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.podcast;
|
package com.cappielloantonio.play.subsonic.api.podcast;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class PodcastClient {
|
public class PodcastClient {
|
||||||
private static final String TAG = "SystemClient";
|
private static final String TAG = "SystemClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final PodcastService podcastService;
|
private final PodcastService podcastService;
|
||||||
|
|
||||||
public PodcastClient(Context context, Subsonic subsonic) {
|
public PodcastClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -54,7 +51,7 @@ public class PodcastClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 60, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(60, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -77,6 +74,6 @@ public class PodcastClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.searching;
|
package com.cappielloantonio.play.subsonic.api.searching;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class SearchingClient {
|
public class SearchingClient {
|
||||||
private static final String TAG = "BrowsingClient";
|
private static final String TAG = "BrowsingClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final SearchingService searchingService;
|
private final SearchingService searchingService;
|
||||||
|
|
||||||
public SearchingClient(Context context, Subsonic subsonic) {
|
public SearchingClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -49,7 +46,7 @@ public class SearchingClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 60, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(60, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -72,6 +69,6 @@ public class SearchingClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package com.cappielloantonio.play.subsonic.api.system;
|
package com.cappielloantonio.play.subsonic.api.system;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.Subsonic;
|
import com.cappielloantonio.play.subsonic.Subsonic;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
import com.cappielloantonio.play.subsonic.utils.CacheUtil;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
|
|
@ -21,12 +20,10 @@ import retrofit2.converter.gson.GsonConverterFactory;
|
||||||
public class SystemClient {
|
public class SystemClient {
|
||||||
private static final String TAG = "SystemClient";
|
private static final String TAG = "SystemClient";
|
||||||
|
|
||||||
private final Context context;
|
|
||||||
private final Subsonic subsonic;
|
private final Subsonic subsonic;
|
||||||
private final SystemService systemService;
|
private final SystemService systemService;
|
||||||
|
|
||||||
public SystemClient(Context context, Subsonic subsonic) {
|
public SystemClient(Subsonic subsonic) {
|
||||||
this.context = context;
|
|
||||||
this.subsonic = subsonic;
|
this.subsonic = subsonic;
|
||||||
|
|
||||||
Retrofit retrofit = new Retrofit.Builder()
|
Retrofit retrofit = new Retrofit.Builder()
|
||||||
|
|
@ -49,7 +46,7 @@ public class SystemClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
private OkHttpClient getOkHttpClient() {
|
private OkHttpClient getOkHttpClient() {
|
||||||
CacheUtil cacheUtil = new CacheUtil(context, 0, 60 * 60 * 24 * 30);
|
CacheUtil cacheUtil = new CacheUtil(0, 60 * 60 * 24 * 30);
|
||||||
|
|
||||||
return new OkHttpClient.Builder()
|
return new OkHttpClient.Builder()
|
||||||
.callTimeout(2, TimeUnit.MINUTES)
|
.callTimeout(2, TimeUnit.MINUTES)
|
||||||
|
|
@ -72,6 +69,6 @@ public class SystemClient {
|
||||||
|
|
||||||
private Cache getCache() {
|
private Cache getCache() {
|
||||||
int cacheSize = 10 * 1024 * 1024;
|
int cacheSize = 10 * 1024 * 1024;
|
||||||
return context != null ? new Cache(context.getCacheDir(), cacheSize) : null;
|
return new Cache(App.getContext().getCacheDir(), cacheSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,16 +4,16 @@ import android.content.Context;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
|
|
||||||
import okhttp3.Interceptor;
|
import okhttp3.Interceptor;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
|
|
||||||
public class CacheUtil {
|
public class CacheUtil {
|
||||||
private final Context context;
|
|
||||||
private int maxAge; // 60 seconds
|
private int maxAge; // 60 seconds
|
||||||
private int maxStale; // 60 * 60 * 24 * 30 = 30 days (60 seconds * 60 minutes * 24 hours * 30 days)
|
private int maxStale; // 60 * 60 * 24 * 30 = 30 days (60 seconds * 60 minutes * 24 hours * 30 days)
|
||||||
|
|
||||||
public CacheUtil(Context context, int maxAge, int maxStale) {
|
public CacheUtil(int maxAge, int maxStale) {
|
||||||
this.context = context;
|
|
||||||
this.maxAge = maxAge;
|
this.maxAge = maxAge;
|
||||||
this.maxStale = maxStale;
|
this.maxStale = maxStale;
|
||||||
}
|
}
|
||||||
|
|
@ -38,7 +38,7 @@ public class CacheUtil {
|
||||||
};
|
};
|
||||||
|
|
||||||
private boolean isConnected() {
|
private boolean isConnected() {
|
||||||
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
ConnectivityManager connectivityManager = (ConnectivityManager) App.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
|
NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
|
||||||
return (netInfo != null && netInfo.isConnected());
|
return (netInfo != null && netInfo.isConnected());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ public class MainActivity extends BaseActivity {
|
||||||
|
|
||||||
ConnectivityStatusBroadcastReceiver connectivityStatusBroadcastReceiver;
|
ConnectivityStatusBroadcastReceiver connectivityStatusBroadcastReceiver;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ public class PlaylistChooserDialog extends DialogFragment implements ClickCallba
|
||||||
bind.playlistDialogRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.playlistDialogRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.playlistDialogRecyclerView.setHasFixedSize(true);
|
bind.playlistDialogRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
playlistDialogHorizontalAdapter = new PlaylistDialogHorizontalAdapter(requireContext(), this);
|
playlistDialogHorizontalAdapter = new PlaylistDialogHorizontalAdapter(this);
|
||||||
bind.playlistDialogRecyclerView.setAdapter(playlistDialogHorizontalAdapter);
|
bind.playlistDialogRecyclerView.setAdapter(playlistDialogHorizontalAdapter);
|
||||||
|
|
||||||
playlistChooserViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> {
|
playlistChooserViewModel.getPlaylistList(requireActivity()).observe(requireActivity(), playlists -> {
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ public class PlaylistEditorDialog extends DialogFragment {
|
||||||
bind.playlistSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.playlistSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.playlistSongRecyclerView.setHasFixedSize(true);
|
bind.playlistSongRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
playlistDialogSongHorizontalAdapter = new PlaylistDialogSongHorizontalAdapter(requireContext());
|
playlistDialogSongHorizontalAdapter = new PlaylistDialogSongHorizontalAdapter();
|
||||||
bind.playlistSongRecyclerView.setAdapter(playlistDialogSongHorizontalAdapter);
|
bind.playlistSongRecyclerView.setAdapter(playlistDialogSongHorizontalAdapter);
|
||||||
|
|
||||||
playlistEditorViewModel.getPlaylistSongLiveList().observe(requireActivity(), songs -> playlistDialogSongHorizontalAdapter.setItems(songs));
|
playlistEditorViewModel.getPlaylistSongLiveList().observe(requireActivity(), songs -> playlistDialogSongHorizontalAdapter.setItems(songs));
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ public class StarredSyncDialog extends DialogFragment {
|
||||||
starredSyncViewModel.getStarredTracks(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
starredSyncViewModel.getStarredTracks(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs != null) {
|
if (songs != null) {
|
||||||
DownloadUtil.getDownloadTracker(context).download(
|
DownloadUtil.getDownloadTracker(context).download(
|
||||||
MappingUtil.mapMediaItems(context, songs, false),
|
MappingUtil.mapMediaItems(songs, false),
|
||||||
songs.stream().map(Download::new).collect(Collectors.toList())
|
songs.stream().map(Download::new).collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback {
|
||||||
|
|
||||||
private void initData() {
|
private void initData() {
|
||||||
albumCatalogueViewModel = new ViewModelProvider(requireActivity()).get(AlbumCatalogueViewModel.class);
|
albumCatalogueViewModel = new ViewModelProvider(requireActivity()).get(AlbumCatalogueViewModel.class);
|
||||||
albumCatalogueViewModel.loadAlbums(requireContext(), 500);
|
albumCatalogueViewModel.loadAlbums(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAppBar() {
|
private void initAppBar() {
|
||||||
|
|
@ -102,7 +102,7 @@ public class AlbumCatalogueFragment extends Fragment implements ClickCallback {
|
||||||
bind.albumCatalogueRecyclerView.addItemDecoration(new GridItemDecoration(2, 20, false));
|
bind.albumCatalogueRecyclerView.addItemDecoration(new GridItemDecoration(2, 20, false));
|
||||||
bind.albumCatalogueRecyclerView.setHasFixedSize(true);
|
bind.albumCatalogueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
albumAdapter = new AlbumCatalogueAdapter(requireContext(), this);
|
albumAdapter = new AlbumCatalogueAdapter(this);
|
||||||
albumAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
|
albumAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
|
||||||
bind.albumCatalogueRecyclerView.setAdapter(albumAdapter);
|
bind.albumCatalogueRecyclerView.setAdapter(albumAdapter);
|
||||||
albumCatalogueViewModel.getAlbumList().observe(getViewLifecycleOwner(), albums -> albumAdapter.setItems(albums));
|
albumCatalogueViewModel.getAlbumList().observe(getViewLifecycleOwner(), albums -> albumAdapter.setItems(albums));
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,6 @@ public class AlbumListPageFragment extends Fragment implements ClickCallback {
|
||||||
bind.albumListRecyclerView.setHasFixedSize(true);
|
bind.albumListRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
albumHorizontalAdapter = new AlbumHorizontalAdapter(
|
albumHorizontalAdapter = new AlbumHorizontalAdapter(
|
||||||
requireContext(),
|
|
||||||
this,
|
this,
|
||||||
(albumListPageViewModel.title.equals(Album.DOWNLOADED) || albumListPageViewModel.title.equals(Album.FROM_ARTIST))
|
(albumListPageViewModel.title.equals(Album.DOWNLOADED) || albumListPageViewModel.title.equals(Album.FROM_ARTIST))
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ public class AlbumPageFragment extends Fragment implements ClickCallback {
|
||||||
albumPageViewModel.getAlbumSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
albumPageViewModel.getAlbumSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (isVisible() && getActivity() != null) {
|
if (isVisible() && getActivity() != null) {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItems(requireContext(), songs, false),
|
MappingUtil.mapMediaItems(songs, false),
|
||||||
songs.stream().map(Download::new).collect(Collectors.toList())
|
songs.stream().map(Download::new).collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -186,7 +186,7 @@ public class AlbumPageFragment extends Fragment implements ClickCallback {
|
||||||
bind.songRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.songRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.songRecyclerView.setHasFixedSize(true);
|
bind.songRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
songHorizontalAdapter = new SongHorizontalAdapter(requireContext(), this, false);
|
songHorizontalAdapter = new SongHorizontalAdapter(this, false);
|
||||||
bind.songRecyclerView.setAdapter(songHorizontalAdapter);
|
bind.songRecyclerView.setAdapter(songHorizontalAdapter);
|
||||||
|
|
||||||
albumPageViewModel.getAlbumSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs));
|
albumPageViewModel.getAlbumSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs));
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ public class ArtistCatalogueFragment extends Fragment implements ClickCallback {
|
||||||
|
|
||||||
private void initData() {
|
private void initData() {
|
||||||
artistCatalogueViewModel = new ViewModelProvider(requireActivity()).get(ArtistCatalogueViewModel.class);
|
artistCatalogueViewModel = new ViewModelProvider(requireActivity()).get(ArtistCatalogueViewModel.class);
|
||||||
artistCatalogueViewModel.loadArtists(requireContext());
|
artistCatalogueViewModel.loadArtists();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAppBar() {
|
private void initAppBar() {
|
||||||
|
|
@ -104,7 +104,7 @@ public class ArtistCatalogueFragment extends Fragment implements ClickCallback {
|
||||||
bind.artistCatalogueRecyclerView.addItemDecoration(new GridItemDecoration(2, 20, false));
|
bind.artistCatalogueRecyclerView.addItemDecoration(new GridItemDecoration(2, 20, false));
|
||||||
bind.artistCatalogueRecyclerView.setHasFixedSize(true);
|
bind.artistCatalogueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
artistAdapter = new ArtistCatalogueAdapter(requireContext(), this);
|
artistAdapter = new ArtistCatalogueAdapter(this);
|
||||||
artistAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
|
artistAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
|
||||||
bind.artistCatalogueRecyclerView.setAdapter(artistAdapter);
|
bind.artistCatalogueRecyclerView.setAdapter(artistAdapter);
|
||||||
artistCatalogueViewModel.getArtistList().observe(getViewLifecycleOwner(), artistList -> artistAdapter.setItems(artistList));
|
artistCatalogueViewModel.getArtistList().observe(getViewLifecycleOwner(), artistList -> artistAdapter.setItems(artistList));
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ public class ArtistListPageFragment extends Fragment implements ClickCallback {
|
||||||
bind.artistListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.artistListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.artistListRecyclerView.setHasFixedSize(true);
|
bind.artistListRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
artistHorizontalAdapter = new ArtistHorizontalAdapter(requireContext(), this);
|
artistHorizontalAdapter = new ArtistHorizontalAdapter(this);
|
||||||
bind.artistListRecyclerView.setAdapter(artistHorizontalAdapter);
|
bind.artistListRecyclerView.setAdapter(artistHorizontalAdapter);
|
||||||
artistListPageViewModel.getArtistList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> artistHorizontalAdapter.setItems(artists));
|
artistListPageViewModel.getArtistList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> artistHorizontalAdapter.setItems(artists));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import androidx.media3.session.SessionToken;
|
||||||
import androidx.navigation.Navigation;
|
import androidx.navigation.Navigation;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
import com.cappielloantonio.play.App;
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.adapter.AlbumArtistPageOrSimilarAdapter;
|
import com.cappielloantonio.play.adapter.AlbumArtistPageOrSimilarAdapter;
|
||||||
import com.cappielloantonio.play.adapter.ArtistSimilarAdapter;
|
import com.cappielloantonio.play.adapter.ArtistSimilarAdapter;
|
||||||
|
|
@ -139,7 +138,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback {
|
||||||
// TODO Utilizzare il viewmodel come tramite ed evitare le chiamate dirette
|
// TODO Utilizzare il viewmodel come tramite ed evitare le chiamate dirette
|
||||||
private void initPlayButtons() {
|
private void initPlayButtons() {
|
||||||
bind.artistPageShuffleButton.setOnClickListener(v -> {
|
bind.artistPageShuffleButton.setOnClickListener(v -> {
|
||||||
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
ArtistRepository artistRepository = new ArtistRepository();
|
||||||
|
|
||||||
artistRepository.getArtistRandomSong(getViewLifecycleOwner(), artistPageViewModel.getArtist(), 20).observe(getViewLifecycleOwner(), songs -> {
|
artistRepository.getArtistRandomSong(getViewLifecycleOwner(), artistPageViewModel.getArtist(), 20).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs.size() > 0) {
|
if (songs.size() > 0) {
|
||||||
|
|
@ -152,7 +151,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback {
|
||||||
});
|
});
|
||||||
|
|
||||||
bind.artistPageRadioButton.setOnClickListener(v -> {
|
bind.artistPageRadioButton.setOnClickListener(v -> {
|
||||||
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
ArtistRepository artistRepository = new ArtistRepository();
|
||||||
|
|
||||||
artistRepository.getInstantMix(artistPageViewModel.getArtist(), 20).observe(getViewLifecycleOwner(), songs -> {
|
artistRepository.getInstantMix(artistPageViewModel.getArtist(), 20).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs.size() > 0) {
|
if (songs.size() > 0) {
|
||||||
|
|
@ -168,7 +167,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback {
|
||||||
private void initTopSongsView() {
|
private void initTopSongsView() {
|
||||||
bind.mostStreamedSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.mostStreamedSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
|
|
||||||
songHorizontalAdapter = new SongHorizontalAdapter(requireContext(), this, true);
|
songHorizontalAdapter = new SongHorizontalAdapter(this, true);
|
||||||
bind.mostStreamedSongRecyclerView.setAdapter(songHorizontalAdapter);
|
bind.mostStreamedSongRecyclerView.setAdapter(songHorizontalAdapter);
|
||||||
artistPageViewModel.getArtistTopSongList(10).observe(getViewLifecycleOwner(), songs -> {
|
artistPageViewModel.getArtistTopSongList(10).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (bind != null)
|
if (bind != null)
|
||||||
|
|
@ -180,7 +179,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback {
|
||||||
private void initAlbumsView() {
|
private void initAlbumsView() {
|
||||||
bind.albumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.albumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
|
|
||||||
albumArtistPageOrSimilarAdapter = new AlbumArtistPageOrSimilarAdapter(requireContext(), this);
|
albumArtistPageOrSimilarAdapter = new AlbumArtistPageOrSimilarAdapter(this);
|
||||||
bind.albumsRecyclerView.setAdapter(albumArtistPageOrSimilarAdapter);
|
bind.albumsRecyclerView.setAdapter(albumArtistPageOrSimilarAdapter);
|
||||||
artistPageViewModel.getAlbumList().observe(getViewLifecycleOwner(), albums -> {
|
artistPageViewModel.getAlbumList().observe(getViewLifecycleOwner(), albums -> {
|
||||||
if (bind != null)
|
if (bind != null)
|
||||||
|
|
@ -196,7 +195,7 @@ public class ArtistPageFragment extends Fragment implements ClickCallback {
|
||||||
bind.similarArtistsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.similarArtistsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.similarArtistsRecyclerView.setHasFixedSize(true);
|
bind.similarArtistsRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
artistSimilarAdapter = new ArtistSimilarAdapter(requireContext(), this);
|
artistSimilarAdapter = new ArtistSimilarAdapter(this);
|
||||||
bind.similarArtistsRecyclerView.setAdapter(artistSimilarAdapter);
|
bind.similarArtistsRecyclerView.setAdapter(artistSimilarAdapter);
|
||||||
artistPageViewModel.getArtistInfo(artistPageViewModel.getArtist().getId()).observe(getViewLifecycleOwner(), artist -> {
|
artistPageViewModel.getArtistInfo(artistPageViewModel.getArtist().getId()).observe(getViewLifecycleOwner(), artist -> {
|
||||||
if (bind != null)
|
if (bind != null)
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ public class DownloadFragment extends Fragment implements ClickCallback {
|
||||||
private void initDownloadedSongView() {
|
private void initDownloadedSongView() {
|
||||||
bind.downloadedTracksRecyclerView.setHasFixedSize(true);
|
bind.downloadedTracksRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
downloadHorizontalAdapter = new DownloadHorizontalAdapter(requireContext(), this);
|
downloadHorizontalAdapter = new DownloadHorizontalAdapter(this);
|
||||||
bind.downloadedTracksRecyclerView.setAdapter(downloadHorizontalAdapter);
|
bind.downloadedTracksRecyclerView.setAdapter(downloadHorizontalAdapter);
|
||||||
downloadViewModel.getDownloadedTracks(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
downloadViewModel.getDownloadedTracks(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs == null || songs.isEmpty()) {
|
if (songs == null || songs.isEmpty()) {
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ public class GenreCatalogueFragment extends Fragment implements ClickCallback {
|
||||||
bind.genreCatalogueRecyclerView.addItemDecoration(new GridItemDecoration(2, 16, false));
|
bind.genreCatalogueRecyclerView.addItemDecoration(new GridItemDecoration(2, 16, false));
|
||||||
bind.genreCatalogueRecyclerView.setHasFixedSize(true);
|
bind.genreCatalogueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
genreCatalogueAdapter = new GenreCatalogueAdapter(requireContext(), this);
|
genreCatalogueAdapter = new GenreCatalogueAdapter(this);
|
||||||
genreCatalogueAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
|
genreCatalogueAdapter.setStateRestorationPolicy(RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY);
|
||||||
bind.genreCatalogueRecyclerView.setAdapter(genreCatalogueAdapter);
|
bind.genreCatalogueRecyclerView.setAdapter(genreCatalogueAdapter);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -264,7 +264,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
private void initDiscoverSongSlideView() {
|
private void initDiscoverSongSlideView() {
|
||||||
bind.discoverSongViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
bind.discoverSongViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
||||||
|
|
||||||
discoverSongAdapter = new DiscoverSongAdapter(requireContext(), this);
|
discoverSongAdapter = new DiscoverSongAdapter(this);
|
||||||
bind.discoverSongViewPager.setAdapter(discoverSongAdapter);
|
bind.discoverSongViewPager.setAdapter(discoverSongAdapter);
|
||||||
bind.discoverSongViewPager.setOffscreenPageLimit(1);
|
bind.discoverSongViewPager.setOffscreenPageLimit(1);
|
||||||
homeViewModel.getDiscoverSongSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
homeViewModel.getDiscoverSongSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
|
|
@ -289,7 +289,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.similarTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.similarTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.similarTracksRecyclerView.setHasFixedSize(true);
|
bind.similarTracksRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
similarMusicAdapter = new SimilarTrackAdapter(requireContext(), this);
|
similarMusicAdapter = new SimilarTrackAdapter(this);
|
||||||
bind.similarTracksRecyclerView.setAdapter(similarMusicAdapter);
|
bind.similarTracksRecyclerView.setAdapter(similarMusicAdapter);
|
||||||
homeViewModel.getStarredTracksSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
homeViewModel.getStarredTracksSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs == null) {
|
if (songs == null) {
|
||||||
|
|
@ -314,7 +314,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.radioArtistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.radioArtistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.radioArtistRecyclerView.setHasFixedSize(true);
|
bind.radioArtistRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
radioArtistAdapter = new ArtistAdapter(requireContext(), this, true, false);
|
radioArtistAdapter = new ArtistAdapter(this, true, false);
|
||||||
bind.radioArtistRecyclerView.setAdapter(radioArtistAdapter);
|
bind.radioArtistRecyclerView.setAdapter(radioArtistAdapter);
|
||||||
homeViewModel.getStarredArtistsSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
homeViewModel.getStarredArtistsSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
||||||
if (artists == null) {
|
if (artists == null) {
|
||||||
|
|
@ -339,7 +339,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.bestOfArtistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.bestOfArtistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.bestOfArtistRecyclerView.setHasFixedSize(true);
|
bind.bestOfArtistRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
bestOfArtistAdapter = new ArtistAdapter(requireContext(), this, false, true);
|
bestOfArtistAdapter = new ArtistAdapter(this, false, true);
|
||||||
bind.bestOfArtistRecyclerView.setAdapter(bestOfArtistAdapter);
|
bind.bestOfArtistRecyclerView.setAdapter(bestOfArtistAdapter);
|
||||||
homeViewModel.getBestOfArtists(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
homeViewModel.getBestOfArtists(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
||||||
if (artists == null) {
|
if (artists == null) {
|
||||||
|
|
@ -363,7 +363,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
private void initStarredTracksView() {
|
private void initStarredTracksView() {
|
||||||
bind.starredTracksRecyclerView.setHasFixedSize(true);
|
bind.starredTracksRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
starredSongAdapter = new SongHorizontalAdapter(requireContext(), this, true);
|
starredSongAdapter = new SongHorizontalAdapter(this, true);
|
||||||
bind.starredTracksRecyclerView.setAdapter(starredSongAdapter);
|
bind.starredTracksRecyclerView.setAdapter(starredSongAdapter);
|
||||||
homeViewModel.getStarredTracks(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
homeViewModel.getStarredTracks(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs == null) {
|
if (songs == null) {
|
||||||
|
|
@ -398,7 +398,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
private void initStarredAlbumsView() {
|
private void initStarredAlbumsView() {
|
||||||
bind.starredAlbumsRecyclerView.setHasFixedSize(true);
|
bind.starredAlbumsRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
starredAlbumAdapter = new AlbumHorizontalAdapter(requireContext(), this, false);
|
starredAlbumAdapter = new AlbumHorizontalAdapter(this, false);
|
||||||
bind.starredAlbumsRecyclerView.setAdapter(starredAlbumAdapter);
|
bind.starredAlbumsRecyclerView.setAdapter(starredAlbumAdapter);
|
||||||
homeViewModel.getStarredAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
homeViewModel.getStarredAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
||||||
if (albums == null) {
|
if (albums == null) {
|
||||||
|
|
@ -433,7 +433,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
private void initStarredArtistsView() {
|
private void initStarredArtistsView() {
|
||||||
bind.starredArtistsRecyclerView.setHasFixedSize(true);
|
bind.starredArtistsRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
starredArtistAdapter = new ArtistHorizontalAdapter(requireContext(), this);
|
starredArtistAdapter = new ArtistHorizontalAdapter(this);
|
||||||
bind.starredArtistsRecyclerView.setAdapter(starredArtistAdapter);
|
bind.starredArtistsRecyclerView.setAdapter(starredArtistAdapter);
|
||||||
homeViewModel.getStarredArtists(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
homeViewModel.getStarredArtists(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
||||||
if (artists == null) {
|
if (artists == null) {
|
||||||
|
|
@ -468,7 +468,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
private void initNewReleasesView() {
|
private void initNewReleasesView() {
|
||||||
bind.newReleasesRecyclerView.setHasFixedSize(true);
|
bind.newReleasesRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
newReleasesAlbumAdapter = new AlbumHorizontalAdapter(requireContext(), this, false);
|
newReleasesAlbumAdapter = new AlbumHorizontalAdapter(this, false);
|
||||||
bind.newReleasesRecyclerView.setAdapter(newReleasesAlbumAdapter);
|
bind.newReleasesRecyclerView.setAdapter(newReleasesAlbumAdapter);
|
||||||
homeViewModel.getRecentlyReleasedAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
homeViewModel.getRecentlyReleasedAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
||||||
if (albums == null) {
|
if (albums == null) {
|
||||||
|
|
@ -504,7 +504,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.yearsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.yearsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.yearsRecyclerView.setHasFixedSize(true);
|
bind.yearsRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
yearAdapter = new YearAdapter(requireContext(), this);
|
yearAdapter = new YearAdapter(this);
|
||||||
bind.yearsRecyclerView.setAdapter(yearAdapter);
|
bind.yearsRecyclerView.setAdapter(yearAdapter);
|
||||||
homeViewModel.getYearList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), years -> {
|
homeViewModel.getYearList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), years -> {
|
||||||
if (years == null) {
|
if (years == null) {
|
||||||
|
|
@ -529,7 +529,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.mostPlayedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.mostPlayedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.mostPlayedAlbumsRecyclerView.setHasFixedSize(true);
|
bind.mostPlayedAlbumsRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
mostPlayedAlbumAdapter = new AlbumAdapter(requireContext(), this);
|
mostPlayedAlbumAdapter = new AlbumAdapter(this);
|
||||||
bind.mostPlayedAlbumsRecyclerView.setAdapter(mostPlayedAlbumAdapter);
|
bind.mostPlayedAlbumsRecyclerView.setAdapter(mostPlayedAlbumAdapter);
|
||||||
homeViewModel.getMostPlayedAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
homeViewModel.getMostPlayedAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
||||||
if (albums == null) {
|
if (albums == null) {
|
||||||
|
|
@ -555,7 +555,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.recentlyPlayedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.recentlyPlayedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.recentlyPlayedAlbumsRecyclerView.setHasFixedSize(true);
|
bind.recentlyPlayedAlbumsRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
recentlyPlayedAlbumAdapter = new AlbumAdapter(requireContext(), this);
|
recentlyPlayedAlbumAdapter = new AlbumAdapter(this);
|
||||||
bind.recentlyPlayedAlbumsRecyclerView.setAdapter(recentlyPlayedAlbumAdapter);
|
bind.recentlyPlayedAlbumsRecyclerView.setAdapter(recentlyPlayedAlbumAdapter);
|
||||||
homeViewModel.getRecentlyPlayedAlbumList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
homeViewModel.getRecentlyPlayedAlbumList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
||||||
if (albums == null) {
|
if (albums == null) {
|
||||||
|
|
@ -580,7 +580,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.recentlyAddedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.recentlyAddedAlbumsRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.recentlyAddedAlbumsRecyclerView.setHasFixedSize(true);
|
bind.recentlyAddedAlbumsRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
recentlyAddedAlbumAdapter = new AlbumAdapter(requireContext(), this);
|
recentlyAddedAlbumAdapter = new AlbumAdapter(this);
|
||||||
bind.recentlyAddedAlbumsRecyclerView.setAdapter(recentlyAddedAlbumAdapter);
|
bind.recentlyAddedAlbumsRecyclerView.setAdapter(recentlyAddedAlbumAdapter);
|
||||||
homeViewModel.getMostRecentlyAddedAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
homeViewModel.getMostRecentlyAddedAlbums(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
||||||
if (albums == null) {
|
if (albums == null) {
|
||||||
|
|
@ -618,7 +618,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
genericPlaylistTitleTextView.setText(MusicUtil.getReadableString(playlist.getName()));
|
genericPlaylistTitleTextView.setText(MusicUtil.getReadableString(playlist.getName()));
|
||||||
genericPlaylistRecyclerView.setHasFixedSize(true);
|
genericPlaylistRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
SongHorizontalAdapter trackAdapter = new SongHorizontalAdapter(requireContext(), this, true);
|
SongHorizontalAdapter trackAdapter = new SongHorizontalAdapter(this, true);
|
||||||
genericPlaylistRecyclerView.setAdapter(trackAdapter);
|
genericPlaylistRecyclerView.setAdapter(trackAdapter);
|
||||||
|
|
||||||
homeViewModel.getPlaylistSongLiveList(playlist.getId()).observe(getViewLifecycleOwner(), songs -> {
|
homeViewModel.getPlaylistSongLiveList(playlist.getId()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
|
|
@ -660,7 +660,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
private void initNewestPodcastsView() {
|
private void initNewestPodcastsView() {
|
||||||
bind.newestPodcastsViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
bind.newestPodcastsViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
|
||||||
|
|
||||||
podcastEpisodeAdapter = new PodcastEpisodeAdapter(requireContext(), this);
|
podcastEpisodeAdapter = new PodcastEpisodeAdapter(this);
|
||||||
bind.newestPodcastsViewPager.setAdapter(podcastEpisodeAdapter);
|
bind.newestPodcastsViewPager.setAdapter(podcastEpisodeAdapter);
|
||||||
bind.newestPodcastsViewPager.setOffscreenPageLimit(1);
|
bind.newestPodcastsViewPager.setOffscreenPageLimit(1);
|
||||||
homeViewModel.getNewestPodcastEpisodes(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), podcastEpisodes -> {
|
homeViewModel.getNewestPodcastEpisodes(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), podcastEpisodes -> {
|
||||||
|
|
@ -682,7 +682,7 @@ public class HomeFragment extends Fragment implements ClickCallback {
|
||||||
bind.gridTracksRecyclerView.addItemDecoration(new GridItemDecoration(3, 8, false));
|
bind.gridTracksRecyclerView.addItemDecoration(new GridItemDecoration(3, 8, false));
|
||||||
bind.gridTracksRecyclerView.setHasFixedSize(true);
|
bind.gridTracksRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
gridTrackAdapter = new GridTrackAdapter(requireContext(), this);
|
gridTrackAdapter = new GridTrackAdapter(this);
|
||||||
bind.gridTracksRecyclerView.setAdapter(gridTrackAdapter);
|
bind.gridTracksRecyclerView.setAdapter(gridTrackAdapter);
|
||||||
|
|
||||||
homeViewModel.getGridSongSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), chronologies -> {
|
homeViewModel.getGridSongSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), chronologies -> {
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ public class LibraryFragment extends Fragment implements ClickCallback {
|
||||||
bind.albumRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.albumRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.albumRecyclerView.setHasFixedSize(true);
|
bind.albumRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
albumAdapter = new AlbumAdapter(requireContext(), this);
|
albumAdapter = new AlbumAdapter(this);
|
||||||
bind.albumRecyclerView.setAdapter(albumAdapter);
|
bind.albumRecyclerView.setAdapter(albumAdapter);
|
||||||
libraryViewModel.getAlbumSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
libraryViewModel.getAlbumSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), albums -> {
|
||||||
if (albums == null) {
|
if (albums == null) {
|
||||||
|
|
@ -169,7 +169,7 @@ public class LibraryFragment extends Fragment implements ClickCallback {
|
||||||
bind.artistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.artistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.artistRecyclerView.setHasFixedSize(true);
|
bind.artistRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
artistAdapter = new ArtistAdapter(requireContext(), this, false, false);
|
artistAdapter = new ArtistAdapter(this, false, false);
|
||||||
bind.artistRecyclerView.setAdapter(artistAdapter);
|
bind.artistRecyclerView.setAdapter(artistAdapter);
|
||||||
libraryViewModel.getArtistSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
libraryViewModel.getArtistSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), artists -> {
|
||||||
if (artists == null) {
|
if (artists == null) {
|
||||||
|
|
@ -194,7 +194,7 @@ public class LibraryFragment extends Fragment implements ClickCallback {
|
||||||
bind.genreRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 3, GridLayoutManager.HORIZONTAL, false));
|
bind.genreRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 3, GridLayoutManager.HORIZONTAL, false));
|
||||||
bind.genreRecyclerView.setHasFixedSize(true);
|
bind.genreRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
genreAdapter = new GenreAdapter(requireContext(), this);
|
genreAdapter = new GenreAdapter(this);
|
||||||
bind.genreRecyclerView.setAdapter(genreAdapter);
|
bind.genreRecyclerView.setAdapter(genreAdapter);
|
||||||
|
|
||||||
libraryViewModel.getGenreSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), genres -> {
|
libraryViewModel.getGenreSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), genres -> {
|
||||||
|
|
@ -219,7 +219,7 @@ public class LibraryFragment extends Fragment implements ClickCallback {
|
||||||
bind.playlistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.playlistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.playlistRecyclerView.setHasFixedSize(true);
|
bind.playlistRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
playlistHorizontalAdapter = new PlaylistHorizontalAdapter(requireContext(), this);
|
playlistHorizontalAdapter = new PlaylistHorizontalAdapter(this);
|
||||||
bind.playlistRecyclerView.setAdapter(playlistHorizontalAdapter);
|
bind.playlistRecyclerView.setAdapter(playlistHorizontalAdapter);
|
||||||
libraryViewModel.getPlaylistSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), playlists -> {
|
libraryViewModel.getPlaylistSample(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), playlists -> {
|
||||||
if (playlists == null) {
|
if (playlists == null) {
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ public class LoginFragment extends Fragment implements ClickCallback {
|
||||||
bind.serverListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.serverListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.serverListRecyclerView.setHasFixedSize(true);
|
bind.serverListRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
serverAdapter = new ServerAdapter(requireContext(), this);
|
serverAdapter = new ServerAdapter(this);
|
||||||
bind.serverListRecyclerView.setAdapter(serverAdapter);
|
bind.serverListRecyclerView.setAdapter(serverAdapter);
|
||||||
loginViewModel.getServerList().observe(getViewLifecycleOwner(), servers -> {
|
loginViewModel.getServerList().observe(getViewLifecycleOwner(), servers -> {
|
||||||
if (servers.size() > 0) {
|
if (servers.size() > 0) {
|
||||||
|
|
@ -119,7 +119,7 @@ public class LoginFragment extends Fragment implements ClickCallback {
|
||||||
Server server = bundle.getParcelable("server_object");
|
Server server = bundle.getParcelable("server_object");
|
||||||
saveServerPreference(server.getServerId(), server.getAddress(), server.getUsername(), server.getPassword(), server.isLowSecurity());
|
saveServerPreference(server.getServerId(), server.getAddress(), server.getUsername(), server.getPassword(), server.isLowSecurity());
|
||||||
|
|
||||||
SystemRepository systemRepository = new SystemRepository(App.getInstance());
|
SystemRepository systemRepository = new SystemRepository();
|
||||||
systemRepository.checkUserCredential(new SystemCallback() {
|
systemRepository.checkUserCredential(new SystemCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
|
|
@ -148,7 +148,7 @@ public class LoginFragment extends Fragment implements ClickCallback {
|
||||||
Preferences.setPassword(password);
|
Preferences.setPassword(password);
|
||||||
Preferences.setLowSecurity(isLowSecurity);
|
Preferences.setLowSecurity(isLowSecurity);
|
||||||
|
|
||||||
App.getSubsonicClientInstance(requireContext(), true);
|
App.getSubsonicClientInstance(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetServerPreference() {
|
private void resetServerPreference() {
|
||||||
|
|
@ -160,6 +160,6 @@ public class LoginFragment extends Fragment implements ClickCallback {
|
||||||
Preferences.setSalt(null);
|
Preferences.setSalt(null);
|
||||||
Preferences.setLowSecurity(false);
|
Preferences.setLowSecurity(false);
|
||||||
|
|
||||||
App.getSubsonicClientInstance(requireContext(), true);
|
App.getSubsonicClientInstance(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.databinding.InnerFragmentPlayerControllerBinding;
|
import com.cappielloantonio.play.databinding.InnerFragmentPlayerControllerBinding;
|
||||||
import com.cappielloantonio.play.model.Media;
|
import com.cappielloantonio.play.model.Media;
|
||||||
import com.cappielloantonio.play.service.MediaService;
|
import com.cappielloantonio.play.service.MediaService;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
|
||||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||||
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
||||||
import com.cappielloantonio.play.ui.fragment.pager.PlayerControllerHorizontalPager;
|
import com.cappielloantonio.play.ui.fragment.pager.PlayerControllerHorizontalPager;
|
||||||
|
|
@ -170,8 +169,8 @@ public class PlayerControllerFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String transcodingExtension = MusicUtil.getTranscodingFormatPreference(requireContext());
|
String transcodingExtension = MusicUtil.getTranscodingFormatPreference();
|
||||||
String transcodingBitrate = Integer.parseInt(MusicUtil.getBitratePreference(requireContext())) != 0 ? Integer.parseInt(MusicUtil.getBitratePreference(requireContext())) + "kbps" : "Original";
|
String transcodingBitrate = Integer.parseInt(MusicUtil.getBitratePreference()) != 0 ? Integer.parseInt(MusicUtil.getBitratePreference()) + "kbps" : "Original";
|
||||||
|
|
||||||
if (transcodingExtension.equals("raw") && transcodingBitrate.equals("Original")) {
|
if (transcodingExtension.equals("raw") && transcodingBitrate.equals("Original")) {
|
||||||
playerMediaTranscodingIcon.setVisibility(View.GONE);
|
playerMediaTranscodingIcon.setVisibility(View.GONE);
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ public class PlayerCoverFragment extends Fragment {
|
||||||
if (song != null && bind != null) {
|
if (song != null && bind != null) {
|
||||||
bind.innerButtonTopLeft.setOnClickListener(view -> {
|
bind.innerButtonTopLeft.setOnClickListener(view -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItem(requireContext(), song, false),
|
MappingUtil.mapMediaItem(song, false),
|
||||||
new Download(song)
|
new Download(song)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ public class PlayerQueueFragment extends Fragment implements ClickCallback {
|
||||||
bind.playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.playerQueueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.playerQueueRecyclerView.setHasFixedSize(true);
|
bind.playerQueueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
playerSongQueueAdapter = new PlayerSongQueueAdapter(requireContext(), this);
|
playerSongQueueAdapter = new PlayerSongQueueAdapter(this);
|
||||||
bind.playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
bind.playerQueueRecyclerView.setAdapter(playerSongQueueAdapter);
|
||||||
playerBottomSheetViewModel.getQueueSong().observe(getViewLifecycleOwner(), queue -> {
|
playerBottomSheetViewModel.getQueueSong().observe(getViewLifecycleOwner(), queue -> {
|
||||||
if (queue != null) {
|
if (queue != null) {
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ public class PlaylistCatalogueFragment extends Fragment implements ClickCallback
|
||||||
bind.playlistCatalogueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.playlistCatalogueRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.playlistCatalogueRecyclerView.setHasFixedSize(true);
|
bind.playlistCatalogueRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
playlistHorizontalAdapter = new PlaylistHorizontalAdapter(requireContext(), this);
|
playlistHorizontalAdapter = new PlaylistHorizontalAdapter(this);
|
||||||
bind.playlistCatalogueRecyclerView.setAdapter(playlistHorizontalAdapter);
|
bind.playlistCatalogueRecyclerView.setAdapter(playlistHorizontalAdapter);
|
||||||
|
|
||||||
if (getActivity() != null) {
|
if (getActivity() != null) {
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ public class PlaylistPageFragment extends Fragment implements ClickCallback {
|
||||||
playlistPageViewModel.getPlaylistSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
playlistPageViewModel.getPlaylistSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (isVisible() && getActivity() != null) {
|
if (isVisible() && getActivity() != null) {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItems(requireContext(), songs, false),
|
MappingUtil.mapMediaItems(songs, false),
|
||||||
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());
|
||||||
|
|
@ -220,7 +220,7 @@ public class PlaylistPageFragment extends Fragment implements ClickCallback {
|
||||||
bind.songRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.songRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.songRecyclerView.setHasFixedSize(true);
|
bind.songRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
songHorizontalAdapter = new SongHorizontalAdapter(requireContext(), this, true);
|
songHorizontalAdapter = new SongHorizontalAdapter(this, true);
|
||||||
bind.songRecyclerView.setAdapter(songHorizontalAdapter);
|
bind.songRecyclerView.setAdapter(songHorizontalAdapter);
|
||||||
|
|
||||||
playlistPageViewModel.getPlaylistSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs));
|
playlistPageViewModel.getPlaylistSongLiveList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs));
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ public class SearchFragment extends Fragment implements ClickCallback {
|
||||||
bind.searchResultArtistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.searchResultArtistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.searchResultArtistRecyclerView.setHasFixedSize(true);
|
bind.searchResultArtistRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
artistAdapter = new ArtistAdapter(requireContext(), this, false, false);
|
artistAdapter = new ArtistAdapter(this, false, false);
|
||||||
bind.searchResultArtistRecyclerView.setAdapter(artistAdapter);
|
bind.searchResultArtistRecyclerView.setAdapter(artistAdapter);
|
||||||
|
|
||||||
CustomLinearSnapHelper artistSnapHelper = new CustomLinearSnapHelper();
|
CustomLinearSnapHelper artistSnapHelper = new CustomLinearSnapHelper();
|
||||||
|
|
@ -102,7 +102,7 @@ public class SearchFragment extends Fragment implements ClickCallback {
|
||||||
bind.searchResultAlbumRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
bind.searchResultAlbumRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
|
||||||
bind.searchResultAlbumRecyclerView.setHasFixedSize(true);
|
bind.searchResultAlbumRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
albumAdapter = new AlbumAdapter(requireContext(), this);
|
albumAdapter = new AlbumAdapter(this);
|
||||||
bind.searchResultAlbumRecyclerView.setAdapter(albumAdapter);
|
bind.searchResultAlbumRecyclerView.setAdapter(albumAdapter);
|
||||||
|
|
||||||
CustomLinearSnapHelper albumSnapHelper = new CustomLinearSnapHelper();
|
CustomLinearSnapHelper albumSnapHelper = new CustomLinearSnapHelper();
|
||||||
|
|
@ -112,7 +112,7 @@ public class SearchFragment extends Fragment implements ClickCallback {
|
||||||
bind.searchResultTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.searchResultTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.searchResultTracksRecyclerView.setHasFixedSize(true);
|
bind.searchResultTracksRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
songHorizontalAdapter = new SongHorizontalAdapter(requireContext(), this, true);
|
songHorizontalAdapter = new SongHorizontalAdapter(this, true);
|
||||||
bind.searchResultTracksRecyclerView.setAdapter(songHorizontalAdapter);
|
bind.searchResultTracksRecyclerView.setAdapter(songHorizontalAdapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ public class SongListPageFragment extends Fragment implements ClickCallback {
|
||||||
bind.songListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
bind.songListRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||||
bind.songListRecyclerView.setHasFixedSize(true);
|
bind.songListRecyclerView.setHasFixedSize(true);
|
||||||
|
|
||||||
songHorizontalAdapter = new SongHorizontalAdapter(requireContext(), this, true);
|
songHorizontalAdapter = new SongHorizontalAdapter(this, true);
|
||||||
bind.songListRecyclerView.setAdapter(songHorizontalAdapter);
|
bind.songListRecyclerView.setAdapter(songHorizontalAdapter);
|
||||||
songListPageViewModel.getSongList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs));
|
songListPageViewModel.getSongList(getViewLifecycleOwner()).observe(getViewLifecycleOwner(), songs -> songHorizontalAdapter.setItems(songs));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import androidx.navigation.fragment.NavHostFragment;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.App;
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||||
|
|
@ -102,7 +101,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
TextView playRadio = view.findViewById(R.id.play_radio_text_view);
|
TextView playRadio = view.findViewById(R.id.play_radio_text_view);
|
||||||
playRadio.setOnClickListener(v -> {
|
playRadio.setOnClickListener(v -> {
|
||||||
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
|
AlbumRepository albumRepository = new AlbumRepository();
|
||||||
albumRepository.getInstantMix(album, 20, new MediaCallback() {
|
albumRepository.getInstantMix(album, 20, new MediaCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
|
|
@ -123,7 +122,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
|
|
||||||
TextView playRandom = view.findViewById(R.id.play_random_text_view);
|
TextView playRandom = view.findViewById(R.id.play_random_text_view);
|
||||||
playRandom.setOnClickListener(v -> {
|
playRandom.setOnClickListener(v -> {
|
||||||
AlbumRepository albumRepository = new AlbumRepository(App.getInstance());
|
AlbumRepository albumRepository = new AlbumRepository();
|
||||||
albumRepository.getAlbumTracks(album.getId()).observe(getViewLifecycleOwner(), songs -> {
|
albumRepository.getAlbumTracks(album.getId()).observe(getViewLifecycleOwner(), songs -> {
|
||||||
Collections.shuffle(songs);
|
Collections.shuffle(songs);
|
||||||
|
|
||||||
|
|
@ -154,7 +153,7 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
TextView removeAll = view.findViewById(R.id.remove_all_text_view);
|
TextView removeAll = view.findViewById(R.id.remove_all_text_view);
|
||||||
|
|
||||||
albumBottomSheetViewModel.getAlbumTracks().observe(getViewLifecycleOwner(), songs -> {
|
albumBottomSheetViewModel.getAlbumTracks().observe(getViewLifecycleOwner(), songs -> {
|
||||||
List<MediaItem> mediaItems = MappingUtil.mapMediaItems(requireContext(), songs, false);
|
List<MediaItem> mediaItems = MappingUtil.mapMediaItems(songs, false);
|
||||||
List<Download> downloads = songs.stream().map(Download::new).collect(Collectors.toList());
|
List<Download> downloads = songs.stream().map(Download::new).collect(Collectors.toList());
|
||||||
|
|
||||||
downloadAll.setOnClickListener(v -> {
|
downloadAll.setOnClickListener(v -> {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import androidx.media3.session.SessionToken;
|
||||||
|
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
import com.cappielloantonio.play.App;
|
|
||||||
import com.cappielloantonio.play.R;
|
import com.cappielloantonio.play.R;
|
||||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||||
import com.cappielloantonio.play.repository.ArtistRepository;
|
import com.cappielloantonio.play.repository.ArtistRepository;
|
||||||
|
|
@ -90,7 +89,7 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
|
||||||
|
|
||||||
TextView playRadio = view.findViewById(R.id.play_radio_text_view);
|
TextView playRadio = view.findViewById(R.id.play_radio_text_view);
|
||||||
playRadio.setOnClickListener(v -> {
|
playRadio.setOnClickListener(v -> {
|
||||||
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
ArtistRepository artistRepository = new ArtistRepository();
|
||||||
|
|
||||||
artistRepository.getInstantMix(artist, 20).observe(getViewLifecycleOwner(), songs -> {
|
artistRepository.getInstantMix(artist, 20).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs.size() > 0) {
|
if (songs.size() > 0) {
|
||||||
|
|
@ -104,7 +103,7 @@ public class ArtistBottomSheetDialog extends BottomSheetDialogFragment implement
|
||||||
|
|
||||||
TextView playRandom = view.findViewById(R.id.play_random_text_view);
|
TextView playRandom = view.findViewById(R.id.play_random_text_view);
|
||||||
playRandom.setOnClickListener(v -> {
|
playRandom.setOnClickListener(v -> {
|
||||||
ArtistRepository artistRepository = new ArtistRepository(App.getInstance());
|
ArtistRepository artistRepository = new ArtistRepository();
|
||||||
artistRepository.getArtistRandomSong(getViewLifecycleOwner(), artist, 20).observe(getViewLifecycleOwner(), songs -> {
|
artistRepository.getArtistRandomSong(getViewLifecycleOwner(), artist, 20).observe(getViewLifecycleOwner(), songs -> {
|
||||||
if (songs.size() > 0) {
|
if (songs.size() > 0) {
|
||||||
MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), songs, 0);
|
MediaManager.startQueue(mediaBrowserListenableFuture, requireContext(), songs, 0);
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ public class PodcastBottomSheetDialog extends BottomSheetDialogFragment implemen
|
||||||
download.setOnClickListener(v -> {
|
download.setOnClickListener(v -> {
|
||||||
// TODO
|
// TODO
|
||||||
/* DownloadUtil.getDownloadTracker(requireContext()).download(
|
/* DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItem(requireContext(), podcast, false),
|
MappingUtil.mapMediaItem(podcast, false),
|
||||||
MappingUtil.mapDownload(podcast, null, null)
|
MappingUtil.mapDownload(podcast, null, null)
|
||||||
); */
|
); */
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
|
|
@ -109,7 +109,7 @@ public class PodcastBottomSheetDialog extends BottomSheetDialogFragment implemen
|
||||||
remove.setOnClickListener(v -> {
|
remove.setOnClickListener(v -> {
|
||||||
// TODO
|
// TODO
|
||||||
/* DownloadUtil.getDownloadTracker(requireContext()).remove(
|
/* DownloadUtil.getDownloadTracker(requireContext()).remove(
|
||||||
MappingUtil.mapMediaItem(requireContext(), podcast, false),
|
MappingUtil.mapMediaItem(podcast, false),
|
||||||
MappingUtil.mapDownload(podcast, null, null)
|
MappingUtil.mapDownload(podcast, null, null)
|
||||||
); */
|
); */
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
|
|
@ -135,7 +135,7 @@ public class PodcastBottomSheetDialog extends BottomSheetDialogFragment implemen
|
||||||
|
|
||||||
private void initDownloadUI(TextView download, TextView remove) {
|
private void initDownloadUI(TextView download, TextView remove) {
|
||||||
// TODO
|
// TODO
|
||||||
/* if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(MappingUtil.mapMediaItem(requireContext(), podcast, false))) {
|
/* if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(MappingUtil.mapMediaItem(podcast, false))) {
|
||||||
download.setVisibility(View.GONE);
|
download.setVisibility(View.GONE);
|
||||||
remove.setVisibility(View.VISIBLE);
|
remove.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
if (songs.size() > 0) {
|
if (songs.size() > 0) {
|
||||||
MediaManager.enqueue(mediaBrowserListenableFuture, requireContext(), (List<Child>) songs, true);
|
MediaManager.enqueue(mediaBrowserListenableFuture, requireContext(), songs, true);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -155,7 +155,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
TextView download = view.findViewById(R.id.download_text_view);
|
TextView download = view.findViewById(R.id.download_text_view);
|
||||||
download.setOnClickListener(v -> {
|
download.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).download(
|
DownloadUtil.getDownloadTracker(requireContext()).download(
|
||||||
MappingUtil.mapMediaItem(requireContext(), song, false),
|
MappingUtil.mapMediaItem(song, false),
|
||||||
new Download(song)
|
new Download(song)
|
||||||
);
|
);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
|
|
@ -164,7 +164,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
TextView remove = view.findViewById(R.id.remove_text_view);
|
TextView remove = view.findViewById(R.id.remove_text_view);
|
||||||
remove.setOnClickListener(v -> {
|
remove.setOnClickListener(v -> {
|
||||||
DownloadUtil.getDownloadTracker(requireContext()).remove(
|
DownloadUtil.getDownloadTracker(requireContext()).remove(
|
||||||
MappingUtil.mapMediaItem(requireContext(), song, false),
|
MappingUtil.mapMediaItem(song, false),
|
||||||
new Download(song)
|
new Download(song)
|
||||||
);
|
);
|
||||||
dismissBottomSheet();
|
dismissBottomSheet();
|
||||||
|
|
@ -219,7 +219,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initDownloadUI(TextView download, TextView remove) {
|
private void initDownloadUI(TextView download, TextView remove) {
|
||||||
if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(MappingUtil.mapMediaItem(requireContext(), song, false))) {
|
if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(MappingUtil.mapMediaItem(song, false))) {
|
||||||
download.setVisibility(View.GONE);
|
download.setVisibility(View.GONE);
|
||||||
remove.setVisibility(View.VISIBLE);
|
remove.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ public final class DownloadUtil {
|
||||||
|
|
||||||
public static final String DOWNLOAD_NOTIFICATION_CHANNEL_ID = "download_channel";
|
public static final String DOWNLOAD_NOTIFICATION_CHANNEL_ID = "download_channel";
|
||||||
|
|
||||||
private static final String TAG = "DemoUtil";
|
|
||||||
private static final String DOWNLOAD_CONTENT_DIRECTORY = "downloads";
|
private static final String DOWNLOAD_CONTENT_DIRECTORY = "downloads";
|
||||||
|
|
||||||
private static DataSource.Factory dataSourceFactory;
|
private static DataSource.Factory dataSourceFactory;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package com.cappielloantonio.play.util;
|
package com.cappielloantonio.play.util;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
|
|
@ -10,6 +9,7 @@ import androidx.media3.common.MediaMetadata;
|
||||||
import androidx.media3.common.MimeTypes;
|
import androidx.media3.common.MimeTypes;
|
||||||
import androidx.media3.common.util.UnstableApi;
|
import androidx.media3.common.util.UnstableApi;
|
||||||
|
|
||||||
|
import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -17,18 +17,18 @@ import java.util.List;
|
||||||
|
|
||||||
@OptIn(markerClass = UnstableApi.class)
|
@OptIn(markerClass = UnstableApi.class)
|
||||||
public class MappingUtil {
|
public class MappingUtil {
|
||||||
public static ArrayList<MediaItem> mapMediaItems(Context context, List<Child> items, boolean stream) {
|
public static ArrayList<MediaItem> mapMediaItems(List<Child> items, boolean stream) {
|
||||||
ArrayList<MediaItem> mediaItems = new ArrayList();
|
ArrayList<MediaItem> mediaItems = new ArrayList();
|
||||||
|
|
||||||
for (int i = 0; i < items.size(); i++) {
|
for (int i = 0; i < items.size(); i++) {
|
||||||
mediaItems.add(mapMediaItem(context, items.get(i), stream));
|
mediaItems.add(mapMediaItem(items.get(i), stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
return mediaItems;
|
return mediaItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MediaItem mapMediaItem(Context context, Child media, boolean stream) {
|
public static MediaItem mapMediaItem(Child media, boolean stream) {
|
||||||
boolean isDownloaded = DownloadUtil.getDownloadTracker(context).isDownloaded(MusicUtil.getDownloadUri(media.getId()));
|
boolean isDownloaded = DownloadUtil.getDownloadTracker(App.getContext()).isDownloaded(MusicUtil.getDownloadUri(media.getId()));
|
||||||
|
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString("id", media.getId());
|
bundle.putString("id", media.getId());
|
||||||
|
|
@ -78,18 +78,18 @@ public class MappingUtil {
|
||||||
)
|
)
|
||||||
.setRequestMetadata(
|
.setRequestMetadata(
|
||||||
new MediaItem.RequestMetadata.Builder()
|
new MediaItem.RequestMetadata.Builder()
|
||||||
.setMediaUri(getUri(context, media, stream && !isDownloaded))
|
.setMediaUri(getUri(media, stream && !isDownloaded))
|
||||||
.setExtras(bundle)
|
.setExtras(bundle)
|
||||||
.build()
|
.build()
|
||||||
)
|
)
|
||||||
.setMimeType(MimeTypes.BASE_TYPE_AUDIO)
|
.setMimeType(MimeTypes.BASE_TYPE_AUDIO)
|
||||||
.setUri(getUri(context, media, stream && !isDownloaded))
|
.setUri(getUri(media, stream && !isDownloaded))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Uri getUri(Context context, Child media, boolean stream) {
|
private static Uri getUri(Child media, boolean stream) {
|
||||||
if (stream) {
|
if (stream) {
|
||||||
return MusicUtil.getStreamUri(context, media.getId());
|
return MusicUtil.getStreamUri(media.getId());
|
||||||
} else {
|
} else {
|
||||||
return MusicUtil.getDownloadUri(media.getId());
|
return MusicUtil.getDownloadUri(media.getId());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,12 @@ import java.util.stream.Collectors;
|
||||||
public class MusicUtil {
|
public class MusicUtil {
|
||||||
private static final String TAG = "MusicUtil";
|
private static final String TAG = "MusicUtil";
|
||||||
|
|
||||||
public static Uri getStreamUri(Context context, String id) {
|
public static Uri getStreamUri(String id) {
|
||||||
Map<String, String> params = App.getSubsonicClientInstance(App.getInstance(), false).getParams();
|
Map<String, String> params = App.getSubsonicClientInstance(false).getParams();
|
||||||
|
|
||||||
StringBuilder uri = new StringBuilder();
|
StringBuilder uri = new StringBuilder();
|
||||||
|
|
||||||
uri.append(App.getSubsonicClientInstance(App.getInstance(), false).getUrl());
|
uri.append(App.getSubsonicClientInstance(false).getUrl());
|
||||||
uri.append("stream");
|
uri.append("stream");
|
||||||
|
|
||||||
if (params.containsKey("u") && params.get("u") != null)
|
if (params.containsKey("u") && params.get("u") != null)
|
||||||
|
|
@ -42,19 +42,19 @@ public class MusicUtil {
|
||||||
if (params.containsKey("c") && params.get("c") != null)
|
if (params.containsKey("c") && params.get("c") != null)
|
||||||
uri.append("&c=").append(params.get("c"));
|
uri.append("&c=").append(params.get("c"));
|
||||||
|
|
||||||
uri.append("&maxBitRate=").append(getBitratePreference(context));
|
uri.append("&maxBitRate=").append(getBitratePreference());
|
||||||
uri.append("&format=").append(getTranscodingFormatPreference(context));
|
uri.append("&format=").append(getTranscodingFormatPreference());
|
||||||
uri.append("&id=").append(id);
|
uri.append("&id=").append(id);
|
||||||
|
|
||||||
return Uri.parse(uri.toString());
|
return Uri.parse(uri.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Uri getDownloadUri(String id) {
|
public static Uri getDownloadUri(String id) {
|
||||||
Map<String, String> params = App.getSubsonicClientInstance(App.getInstance(), false).getParams();
|
Map<String, String> params = App.getSubsonicClientInstance(false).getParams();
|
||||||
|
|
||||||
StringBuilder uri = new StringBuilder();
|
StringBuilder uri = new StringBuilder();
|
||||||
|
|
||||||
uri.append(App.getSubsonicClientInstance(App.getInstance(), false).getUrl());
|
uri.append(App.getSubsonicClientInstance(false).getUrl());
|
||||||
uri.append("download");
|
uri.append("download");
|
||||||
|
|
||||||
if (params.containsKey("u") && params.get("u") != null)
|
if (params.containsKey("u") && params.get("u") != null)
|
||||||
|
|
@ -185,10 +185,10 @@ public class MusicUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getBitratePreference(Context context) {
|
public static String getBitratePreference() {
|
||||||
Network network = getConnectivityManager(context).getActiveNetwork();
|
Network network = getConnectivityManager().getActiveNetwork();
|
||||||
NetworkCapabilities networkCapabilities = getConnectivityManager(context).getNetworkCapabilities(network);
|
NetworkCapabilities networkCapabilities = getConnectivityManager().getNetworkCapabilities(network);
|
||||||
String audioTranscodeFormat = getTranscodingFormatPreference(context);
|
String audioTranscodeFormat = getTranscodingFormatPreference();
|
||||||
|
|
||||||
if (audioTranscodeFormat.equals("raw") || network == null || networkCapabilities == null)
|
if (audioTranscodeFormat.equals("raw") || network == null || networkCapabilities == null)
|
||||||
return "0";
|
return "0";
|
||||||
|
|
@ -202,9 +202,9 @@ public class MusicUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getTranscodingFormatPreference(Context context) {
|
public static String getTranscodingFormatPreference() {
|
||||||
Network network = getConnectivityManager(context).getActiveNetwork();
|
Network network = getConnectivityManager().getActiveNetwork();
|
||||||
NetworkCapabilities networkCapabilities = getConnectivityManager(context).getNetworkCapabilities(network);
|
NetworkCapabilities networkCapabilities = getConnectivityManager().getNetworkCapabilities(network);
|
||||||
|
|
||||||
if (network == null || networkCapabilities == null) return "raw";
|
if (network == null || networkCapabilities == null) return "raw";
|
||||||
|
|
||||||
|
|
@ -217,7 +217,7 @@ public class MusicUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ConnectivityManager getConnectivityManager(Context context) {
|
private static ConnectivityManager getConnectivityManager() {
|
||||||
return (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
return (ConnectivityManager) App.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@ public class AlbumBottomSheetViewModel extends AndroidViewModel {
|
||||||
public AlbumBottomSheetViewModel(@NonNull Application application) {
|
public AlbumBottomSheetViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
albumRepository = new AlbumRepository(application);
|
albumRepository = new AlbumRepository();
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AlbumID3 getAlbum() {
|
public AlbumID3 getAlbum() {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.cappielloantonio.play.viewmodel;
|
package com.cappielloantonio.play.viewmodel;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.AndroidViewModel;
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
|
@ -12,7 +11,6 @@ import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -33,8 +31,8 @@ public class AlbumCatalogueViewModel extends AndroidViewModel {
|
||||||
return albumList;
|
return albumList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadAlbums(Context context, int size) {
|
public void loadAlbums(int size) {
|
||||||
retrieveAlbums(context, new MediaCallback() {
|
retrieveAlbums(new MediaCallback() {
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception exception) {
|
public void onError(Exception exception) {
|
||||||
}
|
}
|
||||||
|
|
@ -49,15 +47,15 @@ public class AlbumCatalogueViewModel extends AndroidViewModel {
|
||||||
albumList.setValue(liveAlbum);
|
albumList.setValue(liveAlbum);
|
||||||
|
|
||||||
if (media.size() == size) {
|
if (media.size() == size) {
|
||||||
loadAlbums(context, size);
|
loadAlbums(size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, size, size * page++);
|
}, size, size * page++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void retrieveAlbums(Context context, MediaCallback callback, int size, int offset) {
|
private void retrieveAlbums(MediaCallback callback, int size, int offset) {
|
||||||
App.getSubsonicClientInstance(context, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getAlbumSongListClient()
|
.getAlbumSongListClient()
|
||||||
.getAlbumList2("alphabeticalByName", size, offset, null, null)
|
.getAlbumList2("alphabeticalByName", size, offset, null, null)
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,8 @@ public class AlbumListPageViewModel extends AndroidViewModel {
|
||||||
public AlbumListPageViewModel(@NonNull Application application) {
|
public AlbumListPageViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
albumRepository = new AlbumRepository(application);
|
albumRepository = new AlbumRepository();
|
||||||
downloadRepository = new DownloadRepository(application);
|
downloadRepository = new DownloadRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<AlbumID3>> getAlbumList(LifecycleOwner owner) {
|
public LiveData<List<AlbumID3>> getAlbumList(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,9 @@ public class AlbumPageViewModel extends AndroidViewModel {
|
||||||
public AlbumPageViewModel(@NonNull Application application) {
|
public AlbumPageViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
albumRepository = new AlbumRepository(application);
|
albumRepository = new AlbumRepository();
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository();
|
||||||
downloadRepository = new DownloadRepository(application);
|
downloadRepository = new DownloadRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Child>> getAlbumSongLiveList(LifecycleOwner owner) {
|
public LiveData<List<Child>> getAlbumSongLiveList(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public class ArtistBottomSheetViewModel extends AndroidViewModel {
|
||||||
public ArtistBottomSheetViewModel(@NonNull Application application) {
|
public ArtistBottomSheetViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
albumRepository = new AlbumRepository(application);
|
albumRepository = new AlbumRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArtistID3 getArtist() {
|
public ArtistID3 getArtist() {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.cappielloantonio.play.viewmodel;
|
package com.cappielloantonio.play.viewmodel;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.AndroidViewModel;
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
|
@ -12,7 +11,6 @@ import com.cappielloantonio.play.App;
|
||||||
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
import com.cappielloantonio.play.subsonic.base.ApiResponse;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.IndexID3;
|
import com.cappielloantonio.play.subsonic.models.IndexID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.SubsonicResponse;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -31,8 +29,8 @@ public class ArtistCatalogueViewModel extends AndroidViewModel {
|
||||||
return artistList;
|
return artistList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadArtists(Context context) {
|
public void loadArtists() {
|
||||||
App.getSubsonicClientInstance(context, false)
|
App.getSubsonicClientInstance(false)
|
||||||
.getBrowsingClient()
|
.getBrowsingClient()
|
||||||
.getArtists()
|
.getArtists()
|
||||||
.enqueue(new Callback<ApiResponse>() {
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,8 @@ public class ArtistListPageViewModel extends AndroidViewModel {
|
||||||
public ArtistListPageViewModel(@NonNull Application application) {
|
public ArtistListPageViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository();
|
||||||
downloadRepository = new DownloadRepository(application);
|
downloadRepository = new DownloadRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<ArtistID3>> getArtistList(LifecycleOwner owner) {
|
public LiveData<List<ArtistID3>> getArtistList(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ public class ArtistPageViewModel extends AndroidViewModel {
|
||||||
public ArtistPageViewModel(@NonNull Application application) {
|
public ArtistPageViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
albumRepository = new AlbumRepository(application);
|
albumRepository = new AlbumRepository();
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<AlbumID3>> getAlbumList() {
|
public LiveData<List<AlbumID3>> getAlbumList() {
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import com.cappielloantonio.play.repository.DownloadRepository;
|
||||||
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
import com.cappielloantonio.play.subsonic.models.AlbumID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
import com.cappielloantonio.play.subsonic.models.ArtistID3;
|
||||||
import com.cappielloantonio.play.subsonic.models.Child;
|
import com.cappielloantonio.play.subsonic.models.Child;
|
||||||
import com.cappielloantonio.play.util.MappingUtil;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
@ -31,7 +30,7 @@ public class DownloadViewModel extends AndroidViewModel {
|
||||||
public DownloadViewModel(@NonNull Application application) {
|
public DownloadViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
downloadRepository = new DownloadRepository(application);
|
downloadRepository = new DownloadRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Child>> getDownloadedTracks(LifecycleOwner owner) {
|
public LiveData<List<Child>> getDownloadedTracks(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ public class FilterViewModel extends AndroidViewModel {
|
||||||
public FilterViewModel(@NonNull Application application) {
|
public FilterViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
genreRepository = new GenreRepository(application);
|
genreRepository = new GenreRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Genre>> getGenreList() {
|
public LiveData<List<Genre>> getGenreList() {
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ public class GenreCatalogueViewModel extends AndroidViewModel {
|
||||||
public GenreCatalogueViewModel(@NonNull Application application) {
|
public GenreCatalogueViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
genreRepository = new GenreRepository(application);
|
genreRepository = new GenreRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Genre>> getGenreList() {
|
public LiveData<List<Genre>> getGenreList() {
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,12 @@ public class HomeViewModel extends AndroidViewModel {
|
||||||
public HomeViewModel(@NonNull Application application) {
|
public HomeViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
songRepository = new SongRepository(application);
|
songRepository = new SongRepository();
|
||||||
albumRepository = new AlbumRepository(application);
|
albumRepository = new AlbumRepository();
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository();
|
||||||
playlistRepository = new PlaylistRepository(application);
|
playlistRepository = new PlaylistRepository();
|
||||||
podcastRepository = new PodcastRepository(application);
|
podcastRepository = new PodcastRepository();
|
||||||
chronologyRepository = new ChronologyRepository(application);
|
chronologyRepository = new ChronologyRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Child>> getDiscoverSongSample(LifecycleOwner owner) {
|
public LiveData<List<Child>> getDiscoverSongSample(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,10 @@ public class LibraryViewModel extends AndroidViewModel {
|
||||||
public LibraryViewModel(@NonNull Application application) {
|
public LibraryViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
albumRepository = new AlbumRepository(application);
|
albumRepository = new AlbumRepository();
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository();
|
||||||
genreRepository = new GenreRepository(application);
|
genreRepository = new GenreRepository();
|
||||||
playlistRepository = new PlaylistRepository(application);
|
playlistRepository = new PlaylistRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<AlbumID3>> getAlbumSample(LifecycleOwner owner) {
|
public LiveData<List<AlbumID3>> getAlbumSample(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ public class LoginViewModel extends AndroidViewModel {
|
||||||
public LoginViewModel(@NonNull Application application) {
|
public LoginViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
serverRepository = new ServerRepository(application);
|
serverRepository = new ServerRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Server>> getServerList() {
|
public LiveData<List<Server>> getServerList() {
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@ public class MainViewModel extends AndroidViewModel {
|
||||||
super(application);
|
super(application);
|
||||||
this.application = application;
|
this.application = application;
|
||||||
|
|
||||||
systemRepository = new SystemRepository(application);
|
systemRepository = new SystemRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isQueueLoaded() {
|
public boolean isQueueLoaded() {
|
||||||
QueueRepository queueRepository = new QueueRepository(application);
|
QueueRepository queueRepository = new QueueRepository();
|
||||||
return queueRepository.count() != 0;
|
return queueRepository.count() != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,9 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel {
|
||||||
public PlayerBottomSheetViewModel(@NonNull Application application) {
|
public PlayerBottomSheetViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
songRepository = new SongRepository(application);
|
songRepository = new SongRepository();
|
||||||
artistRepository = new ArtistRepository(application);
|
artistRepository = new ArtistRepository();
|
||||||
queueRepository = new QueueRepository(application);
|
queueRepository = new QueueRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Queue>> getQueueSong() {
|
public LiveData<List<Queue>> getQueueSong() {
|
||||||
|
|
@ -62,7 +62,7 @@ public class PlayerBottomSheetViewModel extends AndroidViewModel {
|
||||||
// TODO
|
// TODO
|
||||||
/* if (Preferences.isStarredSyncEnabled()) {
|
/* if (Preferences.isStarredSyncEnabled()) {
|
||||||
DownloadUtil.getDownloadTracker(context).download(
|
DownloadUtil.getDownloadTracker(context).download(
|
||||||
MappingUtil.mapMediaItem(context, media, false),
|
MappingUtil.mapMediaItem(media, false),
|
||||||
MappingUtil.mapDownload(media, null, null)
|
MappingUtil.mapDownload(media, null, null)
|
||||||
);
|
);
|
||||||
} */
|
} */
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@ public class PlaylistCatalogueViewModel extends AndroidViewModel {
|
||||||
public PlaylistCatalogueViewModel(@NonNull Application application) {
|
public PlaylistCatalogueViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
playlistRepository = new PlaylistRepository(application);
|
playlistRepository = new PlaylistRepository();
|
||||||
downloadRepository = new DownloadRepository(application);
|
downloadRepository = new DownloadRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Playlist>> getPlaylistList(LifecycleOwner owner) {
|
public LiveData<List<Playlist>> getPlaylistList(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public class PlaylistChooserViewModel extends AndroidViewModel {
|
||||||
public PlaylistChooserViewModel(@NonNull Application application) {
|
public PlaylistChooserViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
playlistRepository = new PlaylistRepository(application);
|
playlistRepository = new PlaylistRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Playlist>> getPlaylistList(LifecycleOwner owner) {
|
public LiveData<List<Playlist>> getPlaylistList(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public class PlaylistEditorViewModel extends AndroidViewModel {
|
||||||
public PlaylistEditorViewModel(@NonNull Application application) {
|
public PlaylistEditorViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
playlistRepository = new PlaylistRepository(application);
|
playlistRepository = new PlaylistRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createPlaylist(String name) {
|
public void createPlaylist(String name) {
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@ public class PlaylistPageViewModel extends AndroidViewModel {
|
||||||
public PlaylistPageViewModel(@NonNull Application application) {
|
public PlaylistPageViewModel(@NonNull Application application) {
|
||||||
super(application);
|
super(application);
|
||||||
|
|
||||||
playlistRepository = new PlaylistRepository(application);
|
playlistRepository = new PlaylistRepository();
|
||||||
downloadRepository = new DownloadRepository(application);
|
downloadRepository = new DownloadRepository();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiveData<List<Child>> getPlaylistSongLiveList(LifecycleOwner owner) {
|
public LiveData<List<Child>> getPlaylistSongLiveList(LifecycleOwner owner) {
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue