From cd0971bf145ffd4f27e2b6a8999223835c299f82 Mon Sep 17 00:00:00 2001 From: adrian Date: Mon, 26 Jan 2026 15:21:45 -0300 Subject: [PATCH] Change DownloadsFragment to extend AbsLibraryPagerRecyclerViewCustomGridSizeFragment and add DownloadsAdapter. --- .../geleia/adapter/DownloadsAdapter.java | 69 ++++++++++ .../fragments/library/DownloadsFragment.java | 129 ++++++++++++++++-- .../geleia/util/PreferenceUtil.java | 13 +- .../main/res/layout/downloads_fragment.xml | 9 +- 4 files changed, 192 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/org/adrianvictor/geleia/adapter/DownloadsAdapter.java diff --git a/app/src/main/java/org/adrianvictor/geleia/adapter/DownloadsAdapter.java b/app/src/main/java/org/adrianvictor/geleia/adapter/DownloadsAdapter.java new file mode 100644 index 00000000..844798d4 --- /dev/null +++ b/app/src/main/java/org/adrianvictor/geleia/adapter/DownloadsAdapter.java @@ -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 { + private final List mSongs; + private final int mLayoutId; + + public DownloadsAdapter(int layoutId) { + mLayoutId = layoutId; + this.mSongs = new ArrayList<>(); + } + + public void swapDataSet(List 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); + } + } +} diff --git a/app/src/main/java/org/adrianvictor/geleia/fragments/library/DownloadsFragment.java b/app/src/main/java/org/adrianvictor/geleia/fragments/library/DownloadsFragment.java index 2e052c2d..58f379b6 100644 --- a/app/src/main/java/org/adrianvictor/geleia/fragments/library/DownloadsFragment.java +++ b/app/src/main/java/org/adrianvictor/geleia/fragments/library/DownloadsFragment.java @@ -1,25 +1,124 @@ 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.Nullable; -import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; -import org.adrianvictor.geleia.R; -public class DownloadsFragment extends Fragment { - public static DownloadsFragment newInstance() { - return new DownloadsFragment(); - } +import org.adrianvictor.geleia.adapter.DownloadsAdapter; - @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 { + @NonNull @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.downloads_fragment, container, false); + protected DownloadsAdapter createAdapter() { + 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 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) { + + } } diff --git a/app/src/main/java/org/adrianvictor/geleia/util/PreferenceUtil.java b/app/src/main/java/org/adrianvictor/geleia/util/PreferenceUtil.java index ecb3dd68..71ff53d5 100644 --- a/app/src/main/java/org/adrianvictor/geleia/util/PreferenceUtil.java +++ b/app/src/main/java/org/adrianvictor/geleia/util/PreferenceUtil.java @@ -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 migrations = Arrays.asList( Migration1, - Migration2, - Migration3 + Migration2 ); private static PreferenceUtil instance; diff --git a/app/src/main/res/layout/downloads_fragment.xml b/app/src/main/res/layout/downloads_fragment.xml index 77d9ef65..811958e9 100644 --- a/app/src/main/res/layout/downloads_fragment.xml +++ b/app/src/main/res/layout/downloads_fragment.xml @@ -1,6 +1,13 @@ + android:layout_height="match_parent" + tools:context="org.adrianvictor.geleia.fragments.library.DownloadsFragment"> + \ No newline at end of file