From 6934b9a21dea3615950affc8bfacf7e72dbc8fd9 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Tue, 10 Aug 2021 12:58:19 +0200 Subject: [PATCH] Android: Add headers to cheat list --- .../features/cheats/ui/CheatItem.java | 48 +++++++++++++++++ .../cheats/ui/CheatItemViewHolder.java | 20 +++++++ .../features/cheats/ui/CheatViewHolder.java | 12 ++--- .../features/cheats/ui/CheatsAdapter.java | 54 +++++++++++++------ .../features/cheats/ui/HeaderViewHolder.java | 28 ++++++++++ .../features/settings/ui/SettingsAdapter.java | 8 +-- ...ttings_header.xml => list_item_header.xml} | 0 .../app/src/main/res/values/strings.xml | 3 ++ 8 files changed, 144 insertions(+), 29 deletions(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItem.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItemViewHolder.java create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/HeaderViewHolder.java rename Source/Android/app/src/main/res/layout/{list_item_settings_header.xml => list_item_header.xml} (100%) diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItem.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItem.java new file mode 100644 index 0000000000..dd3ee76ab0 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItem.java @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.cheats.ui; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.dolphinemu.dolphinemu.features.cheats.model.Cheat; + +public class CheatItem +{ + public static final int TYPE_CHEAT = 0; + public static final int TYPE_HEADER = 1; + + private final @Nullable Cheat mCheat; + private final int mString; + private final int mType; + + public CheatItem(@NonNull Cheat cheat) + { + mCheat = cheat; + mString = 0; + mType = TYPE_CHEAT; + } + + public CheatItem(int type, int string) + { + mCheat = null; + mString = string; + mType = type; + } + + @Nullable + public Cheat getCheat() + { + return mCheat; + } + + public int getString() + { + return mString; + } + + public int getType() + { + return mType; + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItemViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItemViewHolder.java new file mode 100644 index 0000000000..ca07d3a871 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatItemViewHolder.java @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.cheats.ui; + +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel; + +public abstract class CheatItemViewHolder extends RecyclerView.ViewHolder +{ + public CheatItemViewHolder(@NonNull View itemView) + { + super(itemView); + } + + public abstract void bind(CheatsViewModel viewModel, CheatItem item, int position); +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatViewHolder.java index 1ffcafafd5..3f56f480cd 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatViewHolder.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatViewHolder.java @@ -14,7 +14,7 @@ import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.features.cheats.model.Cheat; import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel; -public class CheatViewHolder extends ViewHolder +public class CheatViewHolder extends CheatItemViewHolder implements View.OnClickListener, CompoundButton.OnCheckedChangeListener { private final View mRoot; @@ -34,17 +34,17 @@ public class CheatViewHolder extends ViewHolder mCheckbox = itemView.findViewById(R.id.checkbox); } - public void bind(CheatsViewModel viewModel, Cheat item, int position) + public void bind(CheatsViewModel viewModel, CheatItem item, int position) { mCheckbox.setOnCheckedChangeListener(null); - mName.setText(item.getName()); - mCheckbox.setChecked(item.getEnabled()); - mViewModel = viewModel; - mCheat = item; + mCheat = item.getCheat(); mPosition = position; + mName.setText(mCheat.getName()); + mCheckbox.setChecked(mCheat.getEnabled()); + mRoot.setOnClickListener(this); mCheckbox.setOnCheckedChangeListener(this); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsAdapter.java index 623f89c507..f0431c29a6 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsAdapter.java @@ -14,7 +14,7 @@ import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.features.cheats.model.Cheat; import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel; -public class CheatsAdapter extends RecyclerView.Adapter +public class CheatsAdapter extends RecyclerView.Adapter { private final CheatsViewModel mViewModel; @@ -31,15 +31,25 @@ public class CheatsAdapter extends RecyclerView.Adapter @NonNull @Override - public CheatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) + public CheatItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); - View view = inflater.inflate(R.layout.list_item_cheat, parent, false); - return new CheatViewHolder(view); + + switch (viewType) + { + case CheatItem.TYPE_CHEAT: + View cheatView = inflater.inflate(R.layout.list_item_cheat, parent, false); + return new CheatViewHolder(cheatView); + case CheatItem.TYPE_HEADER: + View headerView = inflater.inflate(R.layout.list_item_header, parent, false); + return new HeaderViewHolder(headerView); + default: + throw new UnsupportedOperationException(); + } } @Override - public void onBindViewHolder(@NonNull CheatViewHolder holder, int position) + public void onBindViewHolder(@NonNull CheatItemViewHolder holder, int position) { holder.bind(mViewModel, getItemAt(position), position); } @@ -48,30 +58,42 @@ public class CheatsAdapter extends RecyclerView.Adapter public int getItemCount() { return mViewModel.getARCheats().length + mViewModel.getGeckoCheats().length + - mViewModel.getPatchCheats().length; + mViewModel.getPatchCheats().length + 3; } - private Cheat getItemAt(int position) + @Override + public int getItemViewType(int position) { + return getItemAt(position).getType(); + } + + private CheatItem getItemAt(int position) + { + if (position == 0) + return new CheatItem(CheatItem.TYPE_HEADER, R.string.cheats_header_patch); + position -= 1; + Cheat[] patchCheats = mViewModel.getPatchCheats(); if (position < patchCheats.length) - { - return patchCheats[position]; - } + return new CheatItem(patchCheats[position]); position -= patchCheats.length; + if (position == 0) + return new CheatItem(CheatItem.TYPE_HEADER, R.string.cheats_header_ar); + position -= 1; + Cheat[] arCheats = mViewModel.getARCheats(); if (position < arCheats.length) - { - return arCheats[position]; - } + return new CheatItem(arCheats[position]); position -= arCheats.length; + if (position == 0) + return new CheatItem(CheatItem.TYPE_HEADER, R.string.cheats_header_gecko); + position -= 1; + Cheat[] geckoCheats = mViewModel.getGeckoCheats(); if (position < geckoCheats.length) - { - return geckoCheats[position]; - } + return new CheatItem(geckoCheats[position]); position -= geckoCheats.length; throw new IndexOutOfBoundsException(); diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/HeaderViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/HeaderViewHolder.java new file mode 100644 index 0000000000..29da69c9da --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/HeaderViewHolder.java @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.cheats.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel; + +public class HeaderViewHolder extends CheatItemViewHolder +{ + private TextView mHeaderName; + + public HeaderViewHolder(@NonNull View itemView) + { + super(itemView); + + mHeaderName = itemView.findViewById(R.id.text_header_name); + } + + public void bind(CheatsViewModel viewModel, CheatItem item, int position) + { + mHeaderName.setText(item.getString()); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java index 85e26ef6ca..e216330280 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java @@ -18,9 +18,7 @@ import androidx.recyclerview.widget.RecyclerView; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.dialogs.MotionAlertDialog; -import org.dolphinemu.dolphinemu.features.settings.model.AdHocBooleanSetting; import org.dolphinemu.dolphinemu.features.settings.model.Settings; -import org.dolphinemu.dolphinemu.features.settings.model.StringSetting; import org.dolphinemu.dolphinemu.features.settings.model.view.CheckBoxSetting; import org.dolphinemu.dolphinemu.features.settings.model.view.FilePicker; import org.dolphinemu.dolphinemu.features.settings.model.view.FloatSliderSetting; @@ -43,7 +41,6 @@ import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SettingViewHold import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SingleChoiceViewHolder; import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SliderViewHolder; import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SubmenuViewHolder; -import org.dolphinemu.dolphinemu.ui.main.MainPresenter; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import org.dolphinemu.dolphinemu.utils.FileBrowserHelper; import org.dolphinemu.dolphinemu.utils.Log; @@ -51,10 +48,7 @@ import org.dolphinemu.dolphinemu.utils.Log; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; -import java.security.InvalidParameterException; import java.util.ArrayList; -import java.util.HashSet; -import java.util.Map; public final class SettingsAdapter extends RecyclerView.Adapter implements DialogInterface.OnClickListener, SeekBar.OnSeekBarChangeListener @@ -87,7 +81,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter Cheats Cheats: %1$s + AR Codes + Gecko Codes + Patches Name Creator Notes