Change DownloadsFragment to extend AbsLibraryPagerRecyclerViewCustomGridSizeFragment and add DownloadsAdapter.

This commit is contained in:
天クマ 2026-01-26 15:21:45 -03:00
commit cd0971bf14
4 changed files with 191 additions and 27 deletions

View file

@ -0,0 +1,69 @@
package org.adrianvictor.geleia.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.adrianvictor.geleia.R;
import org.adrianvictor.geleia.model.Song;
import java.util.ArrayList;
import java.util.List;
public class DownloadsAdapter extends RecyclerView.Adapter<DownloadsAdapter.ViewHolder> {
private final List<Song> mSongs;
private final int mLayoutId;
public DownloadsAdapter(int layoutId) {
mLayoutId = layoutId;
this.mSongs = new ArrayList<>();
}
public void swapDataSet(List<Song> newSongs) {
mSongs.clear();
if (newSongs != null) {
mSongs.addAll(newSongs);
}
notifyDataSetChanged();
}
@NonNull
@Override
public DownloadsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(mLayoutId, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull DownloadsAdapter.ViewHolder holder, int position) {
final Song song = mSongs.get(position);
holder.title.setText(song.title);
holder.artist.setText(song.artistName);
// TODO: Load album cover into holder.cover using a library like Glide or Picasso
}
@Override
public int getItemCount() {
return mSongs.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public final TextView title;
public final TextView artist;
public final ImageView cover;
public ViewHolder(View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title);
artist = itemView.findViewById(R.id.text);
cover = itemView.findViewById(R.id.image);
}
}
}

View file

@ -1,25 +1,124 @@
package org.adrianvictor.geleia.fragments.library; package org.adrianvictor.geleia.fragments.library;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.fragment.app.Fragment;
import org.adrianvictor.geleia.R;
public class DownloadsFragment extends Fragment { import org.adrianvictor.geleia.adapter.DownloadsAdapter;
public static DownloadsFragment newInstance() {
return new DownloadsFragment();
}
@Nullable import org.adrianvictor.geleia.model.Song;
import org.adrianvictor.geleia.model.SortMethod;
import org.adrianvictor.geleia.model.SortOrder;
import java.util.ArrayList;
import java.util.List;
public class DownloadsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment<DownloadsAdapter, GridLayoutManager, Void> {
@NonNull
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { protected DownloadsAdapter createAdapter() {
return inflater.inflate(R.layout.downloads_fragment, container, false); return new DownloadsAdapter(getItemLayoutRes());
} }
@NonNull
@Override
protected GridLayoutManager createLayoutManager() {
return new GridLayoutManager(getActivity(), getGridSize());
}
@NonNull
@Override
protected Void createQuery() {
return null;
}
@Override
protected void loadItems(int index) {
List<Song> dummySongs = new ArrayList<>();
Song song1 = new Song();
song1.title = "Dummy Song Title";
song1.artistName = "A. Dummy Artist";
dummySongs.add(song1);
Song song2 = new Song();
song2.title = "Another Test Song";
song2.artistName = "The Testers";
dummySongs.add(song2);
getActivity().runOnUiThread(() -> {
getAdapter().swapDataSet(dummySongs);
});
}
@Override
protected int loadGridSize() {
return 1;
}
@Override
protected void saveGridSize(int gridColumns) {
}
@Override
protected int loadGridSizeLand() {
return 1;
}
@Override
protected void saveGridSizeLand(int gridColumns) {
}
@Override
protected void saveUsePalette(boolean usePalette) {
}
@Override
protected boolean loadUsePalette() {
return false;
}
@Override
protected void setUsePalette(boolean usePalette) {
}
@Override
protected void setGridSize(int gridSize) {
}
@Override
protected SortMethod loadSortMethod() {
return SortMethod.ADDED;
}
@Override
protected void saveSortMethod(SortMethod sortMethod) {
}
@Override
protected void setSortMethod(SortMethod sortMethod) {
}
@Override
protected SortOrder loadSortOrder() {
return SortOrder.ASCENDING;
}
@Override
protected void saveSortOrder(SortOrder sortOrder) {
}
@Override
protected void setSortOrder(SortOrder sortOrder) {
}
} }

View file

@ -110,20 +110,9 @@ public final class PreferenceUtil {
} }
}; };
private static final PreferenceMigration Migration3 = new PreferenceMigration(2, 3) {
@Override
public void migrate(SharedPreferences preferences) {
String currentCategories = preferences.getString(CATEGORIES, "");
if (!currentCategories.toUpperCase().contains(Category.DOWNLOADS.toString())) {
preferences.edit().putString(CATEGORIES, currentCategories + "." + Category.DOWNLOADS.toString()).commit();
}
}
};
private static final List<PreferenceMigration> migrations = Arrays.asList( private static final List<PreferenceMigration> migrations = Arrays.asList(
Migration1, Migration1,
Migration2, Migration2
Migration3
); );
private static PreferenceUtil instance; private static PreferenceUtil instance;

View file

@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
tools:context="org.adrianvictor.geleia.fragments.library.DownloadsFragment">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="409dp"
android:layout_height="729dp"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>