diff --git a/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java b/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java index c200d1f24..1967573fd 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/adapters/GameAdapter.java @@ -3,6 +3,7 @@ package org.citra.citra_emu.adapters; import android.database.Cursor; import android.database.DataSetObserver; import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.os.Build; import android.os.SystemClock; import android.view.LayoutInflater; @@ -11,18 +12,22 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; +import androidx.core.content.ContextCompat; import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.RecyclerView; +import org.citra.citra_emu.CitraApplication; import org.citra.citra_emu.R; import org.citra.citra_emu.activities.EmulationActivity; import org.citra.citra_emu.model.GameDatabase; +import org.citra.citra_emu.ui.DividerItemDecoration; import org.citra.citra_emu.utils.Log; import org.citra.citra_emu.utils.PicassoUtils; import org.citra.citra_emu.viewholders.GameViewHolder; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.stream.Stream; /** * This adapter gets its information from a database Cursor. This fact, paired with the usage of @@ -95,6 +100,9 @@ public final class GameAdapter extends RecyclerView.Adapter impl holder.country = mCursor.getInt(GameDatabase.GAME_COLUMN_COUNTRY); holder.company = mCursor.getString(GameDatabase.GAME_COLUMN_COMPANY); holder.screenshotPath = mCursor.getString(GameDatabase.GAME_COLUMN_SCREENSHOT_PATH); + + final int backgroundColorId = isValidGame(holder.path) ? R.color.card_view_background : R.color.card_view_disabled; + holder.setBackgroundColor(ContextCompat.getColor(CitraApplication.getAppContext(), backgroundColorId)); } else { Log.error("[GameAdapter] Can't bind view; Cursor is not valid."); } @@ -197,10 +205,11 @@ public final class GameAdapter extends RecyclerView.Adapter impl EmulationActivity.launch((FragmentActivity) view.getContext(), holder.path, holder.title); } - public static class SpacesItemDecoration extends RecyclerView.ItemDecoration { + public static class SpacesItemDecoration extends DividerItemDecoration { private int space; - public SpacesItemDecoration(int space) { + public SpacesItemDecoration(Drawable divider, int space) { + super(divider); this.space = space; } @@ -214,6 +223,11 @@ public final class GameAdapter extends RecyclerView.Adapter impl } } + private boolean isValidGame(String path) { + return Stream.of( + ".rar", ".zip", ".7z", ".torrent", ".tar", ".gz").noneMatch(suffix -> path.toLowerCase().endsWith(suffix)); + } + private final class GameDataSetObserver extends DataSetObserver { @Override public void onChanged() { diff --git a/src/android/app/src/main/java/org/citra/citra_emu/ui/DividerItemDecoration.java b/src/android/app/src/main/java/org/citra/citra_emu/ui/DividerItemDecoration.java index 850b70d25..96ccc08bb 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/ui/DividerItemDecoration.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/ui/DividerItemDecoration.java @@ -16,7 +16,7 @@ import androidx.recyclerview.widget.RecyclerView; * Implementation from: * https://gist.github.com/lapastillaroja/858caf1a82791b6c1a36 */ -public final class DividerItemDecoration extends RecyclerView.ItemDecoration { +public class DividerItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; private boolean mShowFirstDivider = false; diff --git a/src/android/app/src/main/java/org/citra/citra_emu/ui/platform/PlatformGamesFragment.java b/src/android/app/src/main/java/org/citra/citra_emu/ui/platform/PlatformGamesFragment.java index 1a20ed4ec..10da99f40 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/ui/platform/PlatformGamesFragment.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/ui/platform/PlatformGamesFragment.java @@ -6,6 +6,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -46,7 +47,7 @@ public final class PlatformGamesFragment extends Fragment implements PlatformGam mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setAdapter(mAdapter); - mRecyclerView.addItemDecoration(new GameAdapter.SpacesItemDecoration(1)); + mRecyclerView.addItemDecoration(new GameAdapter.SpacesItemDecoration(ContextCompat.getDrawable(getActivity(), R.drawable.gamelist_divider), 1)); // Add swipe down to refresh gesture final SwipeRefreshLayout pullToRefresh = view.findViewById(R.id.refresh_grid_games); diff --git a/src/android/app/src/main/java/org/citra/citra_emu/viewholders/GameViewHolder.java b/src/android/app/src/main/java/org/citra/citra_emu/viewholders/GameViewHolder.java index c2f131b7e..21aa1b30d 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/viewholders/GameViewHolder.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/viewholders/GameViewHolder.java @@ -13,6 +13,7 @@ import org.citra.citra_emu.R; * keep calling findViewById(), which is expensive. */ public class GameViewHolder extends RecyclerView.ViewHolder { + private View itemView; public ImageView imageScreenshot; public TextView textGameTitle; public TextView textCompany; @@ -31,6 +32,7 @@ public class GameViewHolder extends RecyclerView.ViewHolder { public GameViewHolder(View itemView) { super(itemView); + this.itemView = itemView; itemView.setTag(this); imageScreenshot = itemView.findViewById(R.id.image_game_screen); @@ -38,4 +40,8 @@ public class GameViewHolder extends RecyclerView.ViewHolder { textCompany = itemView.findViewById(R.id.text_company); textFileName = itemView.findViewById(R.id.text_filename); } + + public void setBackgroundColor(int color){ + itemView.setBackgroundColor(color); + } } diff --git a/src/android/app/src/main/res/drawable/gamelist_divider.xml b/src/android/app/src/main/res/drawable/gamelist_divider.xml new file mode 100644 index 000000000..7da9dccce --- /dev/null +++ b/src/android/app/src/main/res/drawable/gamelist_divider.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/src/android/app/src/main/res/values-night/colors.xml b/src/android/app/src/main/res/values-night/colors.xml index 1919de652..29680fe62 100644 --- a/src/android/app/src/main/res/values-night/colors.xml +++ b/src/android/app/src/main/res/values-night/colors.xml @@ -3,4 +3,9 @@ #fec303 + #121212 + #303030 + + #404040 + diff --git a/src/android/app/src/main/res/values/colors.xml b/src/android/app/src/main/res/values/colors.xml index aab21712c..7f2929eb0 100644 --- a/src/android/app/src/main/res/values/colors.xml +++ b/src/android/app/src/main/res/values/colors.xml @@ -7,4 +7,9 @@ #FFCCCCCC + #ffffff + #dddddd + + #ffffff +