summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2021-07-17 19:47:11 +0200
committerJosJuice <josjuice@gmail.com>2021-09-16 16:46:48 +0200
commit4d609c769f7b8eba12da931c0936c5950509e165 (patch)
treea107ede305d2d9e8054be8aa89f42fd721200f49 /Source/Android/app/src/main/java
parentee3a5a4a81f56aeeda8c2aa1c0800847ab652bed (diff)
Android: Implement basic read-only cheats list
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/ARCheat.java27
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/Cheat.java11
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/CheatsViewModel.java41
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/GeckoCheat.java27
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/PatchCheat.java27
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java43
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatViewHolder.java29
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsActivity.java25
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsAdapter.java72
9 files changed, 302 insertions, 0 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/ARCheat.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/ARCheat.java
new file mode 100644
index 0000000000..f17ef89859
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/ARCheat.java
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.cheats.model;
+
+import androidx.annotation.Keep;
+import androidx.annotation.NonNull;
+
+public class ARCheat implements Cheat
+{
+ @Keep
+ private final long mPointer;
+
+ @Keep
+ private ARCheat(long pointer)
+ {
+ mPointer = pointer;
+ }
+
+ @Override
+ public native void finalize();
+
+ @NonNull
+ public native String getName();
+
+ @NonNull
+ public static native ARCheat[] loadCodes(String gameId, int revision);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/Cheat.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/Cheat.java
new file mode 100644
index 0000000000..3c50325edf
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/Cheat.java
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.cheats.model;
+
+import androidx.annotation.NonNull;
+
+public interface Cheat
+{
+ @NonNull
+ String getName();
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/CheatsViewModel.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/CheatsViewModel.java
new file mode 100644
index 0000000000..24eb4eff7c
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/CheatsViewModel.java
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.cheats.model;
+
+import androidx.lifecycle.ViewModel;
+
+public class CheatsViewModel extends ViewModel
+{
+ private boolean mLoaded = false;
+
+ private PatchCheat[] mPatchCheats;
+ private ARCheat[] mARCheats;
+ private GeckoCheat[] mGeckoCheats;
+
+ public void load(String gameID, int revision)
+ {
+ if (mLoaded)
+ return;
+
+ mPatchCheats = PatchCheat.loadCodes(gameID, revision);
+ mARCheats = ARCheat.loadCodes(gameID, revision);
+ mGeckoCheats = GeckoCheat.loadCodes(gameID, revision);
+
+ mLoaded = true;
+ }
+
+ public Cheat[] getPatchCheats()
+ {
+ return mPatchCheats;
+ }
+
+ public ARCheat[] getARCheats()
+ {
+ return mARCheats;
+ }
+
+ public Cheat[] getGeckoCheats()
+ {
+ return mGeckoCheats;
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/GeckoCheat.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/GeckoCheat.java
new file mode 100644
index 0000000000..5f9c7029ec
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/GeckoCheat.java
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.cheats.model;
+
+import androidx.annotation.Keep;
+import androidx.annotation.NonNull;
+
+public class GeckoCheat implements Cheat
+{
+ @Keep
+ private final long mPointer;
+
+ @Keep
+ private GeckoCheat(long pointer)
+ {
+ mPointer = pointer;
+ }
+
+ @Override
+ public native void finalize();
+
+ @NonNull
+ public native String getName();
+
+ @NonNull
+ public static native GeckoCheat[] loadCodes(String gameId, int revision);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/PatchCheat.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/PatchCheat.java
new file mode 100644
index 0000000000..5b2027807e
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/PatchCheat.java
@@ -0,0 +1,27 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.cheats.model;
+
+import androidx.annotation.Keep;
+import androidx.annotation.NonNull;
+
+public class PatchCheat implements Cheat
+{
+ @Keep
+ private final long mPointer;
+
+ @Keep
+ private PatchCheat(long pointer)
+ {
+ mPointer = pointer;
+ }
+
+ @Override
+ public native void finalize();
+
+ @NonNull
+ public native String getName();
+
+ @NonNull
+ public static native PatchCheat[] loadCodes(String gameId, int revision);
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java
new file mode 100644
index 0000000000..82c5b549bb
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatListFragment.java
@@ -0,0 +1,43 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.cheats.ui;
+
+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.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel;
+import org.dolphinemu.dolphinemu.ui.DividerItemDecoration;
+
+public class CheatListFragment extends Fragment
+{
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState)
+ {
+ return inflater.inflate(R.layout.fragment_cheat_list, container, false);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
+ {
+ RecyclerView recyclerView = view.findViewById(R.id.cheat_list);
+
+ CheatsActivity activity = (CheatsActivity) requireActivity();
+ CheatsViewModel viewModel = new ViewModelProvider(activity).get(CheatsViewModel.class);
+
+ recyclerView.setAdapter(new CheatsAdapter(viewModel));
+ recyclerView.setLayoutManager(new LinearLayoutManager(activity));
+ recyclerView.addItemDecoration(new DividerItemDecoration(activity, null));
+ }
+}
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
new file mode 100644
index 0000000000..e99f75f6b2
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatViewHolder.java
@@ -0,0 +1,29 @@
+// 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 androidx.recyclerview.widget.RecyclerView.ViewHolder;
+
+import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.features.cheats.model.Cheat;
+
+public class CheatViewHolder extends ViewHolder
+{
+ private TextView mName;
+
+ public CheatViewHolder(@NonNull View itemView)
+ {
+ super(itemView);
+
+ mName = itemView.findViewById(R.id.text_name);
+ }
+
+ public void bind(Cheat item)
+ {
+ mName.setText(item.getName());
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsActivity.java
index 4090507408..80a875e026 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsActivity.java
@@ -4,8 +4,14 @@ package org.dolphinemu.dolphinemu.features.cheats.ui;
import android.content.Context;
import android.content.Intent;
+import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.lifecycle.ViewModelProvider;
+
+import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel;
+import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
public class CheatsActivity extends AppCompatActivity
{
@@ -19,4 +25,23 @@ public class CheatsActivity extends AppCompatActivity
intent.putExtra(ARG_REVISION, revision);
context.startActivity(intent);
}
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ MainPresenter.skipRescanningLibrary();
+
+ Intent intent = getIntent();
+ String gameId = intent.getStringExtra(ARG_GAME_ID);
+ int revision = intent.getIntExtra(ARG_REVISION, 0);
+
+ setTitle(getString(R.string.cheats_with_game_id, gameId));
+
+ CheatsViewModel viewModel = new ViewModelProvider(this).get(CheatsViewModel.class);
+ viewModel.load(gameId, revision);
+
+ setContentView(R.layout.activity_cheats);
+ }
}
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
new file mode 100644
index 0000000000..6193b6c52f
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/ui/CheatsAdapter.java
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.dolphinemu.dolphinemu.features.cheats.ui;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+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<CheatViewHolder>
+{
+ private final CheatsViewModel mViewModel;
+
+ public CheatsAdapter(CheatsViewModel viewModel)
+ {
+ mViewModel = viewModel;
+ }
+
+ @NonNull
+ @Override
+ public CheatViewHolder 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);
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull CheatViewHolder holder, int position)
+ {
+ holder.bind(getItemAt(position));
+ }
+
+ @Override
+ public int getItemCount()
+ {
+ return mViewModel.getARCheats().length + mViewModel.getGeckoCheats().length +
+ mViewModel.getPatchCheats().length;
+ }
+
+ private Cheat getItemAt(int position)
+ {
+ Cheat[] patchCheats = mViewModel.getPatchCheats();
+ if (position < patchCheats.length)
+ {
+ return patchCheats[position];
+ }
+ position -= patchCheats.length;
+
+ Cheat[] arCheats = mViewModel.getARCheats();
+ if (position < arCheats.length)
+ {
+ return arCheats[position];
+ }
+ position -= arCheats.length;
+
+ Cheat[] geckoCheats = mViewModel.getGeckoCheats();
+ if (position < geckoCheats.length)
+ {
+ return geckoCheats[position];
+ }
+ position -= geckoCheats.length;
+
+ throw new IndexOutOfBoundsException();
+ }
+}