mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Android: Add graphics mods support to CheatsActivity
This commit is contained in:
@ -24,10 +24,13 @@ public class CheatsViewModel extends ViewModel
|
||||
private final MutableLiveData<Integer> mGeckoCheatsDownloadedEvent = new MutableLiveData<>(null);
|
||||
private final MutableLiveData<Boolean> mOpenDetailsViewEvent = new MutableLiveData<>(false);
|
||||
|
||||
private GraphicsModGroup mGraphicsModGroup;
|
||||
private ArrayList<GraphicsMod> mGraphicsMods;
|
||||
private ArrayList<PatchCheat> mPatchCheats;
|
||||
private ArrayList<ARCheat> mARCheats;
|
||||
private ArrayList<GeckoCheat> mGeckoCheats;
|
||||
|
||||
private boolean mGraphicsModsNeedSaving = false;
|
||||
private boolean mPatchCheatsNeedSaving = false;
|
||||
private boolean mARCheatsNeedSaving = false;
|
||||
private boolean mGeckoCheatsNeedSaving = false;
|
||||
@ -37,13 +40,23 @@ public class CheatsViewModel extends ViewModel
|
||||
if (mLoaded)
|
||||
return;
|
||||
|
||||
mGraphicsModGroup = GraphicsModGroup.load(gameID);
|
||||
mGraphicsMods = new ArrayList<>();
|
||||
Collections.addAll(mGraphicsMods, mGraphicsModGroup.getMods());
|
||||
|
||||
mPatchCheats = new ArrayList<>();
|
||||
Collections.addAll(mPatchCheats, PatchCheat.loadCodes(gameID, revision));
|
||||
|
||||
mARCheats = new ArrayList<>();
|
||||
Collections.addAll(mARCheats, ARCheat.loadCodes(gameID, revision));
|
||||
|
||||
mGeckoCheats = new ArrayList<>();
|
||||
Collections.addAll(mGeckoCheats, GeckoCheat.loadCodes(gameID, revision));
|
||||
|
||||
for (GraphicsMod mod : mGraphicsMods)
|
||||
{
|
||||
mod.setChangedCallback(() -> mGraphicsModsNeedSaving = true);
|
||||
}
|
||||
for (PatchCheat cheat : mPatchCheats)
|
||||
{
|
||||
cheat.setChangedCallback(() -> mPatchCheatsNeedSaving = true);
|
||||
@ -62,6 +75,12 @@ public class CheatsViewModel extends ViewModel
|
||||
|
||||
public void saveIfNeeded(String gameID, int revision)
|
||||
{
|
||||
if (mGraphicsModsNeedSaving)
|
||||
{
|
||||
mGraphicsModGroup.save();
|
||||
mGraphicsModsNeedSaving = false;
|
||||
}
|
||||
|
||||
if (mPatchCheatsNeedSaving)
|
||||
{
|
||||
PatchCheat.saveCodes(gameID, revision, mPatchCheats.toArray(new PatchCheat[0]));
|
||||
@ -280,6 +299,11 @@ public class CheatsViewModel extends ViewModel
|
||||
mOpenDetailsViewEvent.setValue(false);
|
||||
}
|
||||
|
||||
public ArrayList<GraphicsMod> getGraphicsMods()
|
||||
{
|
||||
return mGraphicsMods;
|
||||
}
|
||||
|
||||
public ArrayList<PatchCheat> getPatchCheats()
|
||||
{
|
||||
return mPatchCheats;
|
||||
|
@ -0,0 +1,61 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
package org.dolphinemu.dolphinemu.features.cheats.model;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
public class GraphicsMod extends ReadOnlyCheat
|
||||
{
|
||||
@Keep
|
||||
private final long mPointer;
|
||||
|
||||
// When a C++ GraphicsModGroup object is destroyed, it also destroys the GraphicsMods it owns.
|
||||
// To avoid getting dangling pointers, we keep a reference to the GraphicsModGroup here.
|
||||
@Keep
|
||||
private final GraphicsModGroup mParent;
|
||||
|
||||
@Keep
|
||||
private GraphicsMod(long pointer, GraphicsModGroup parent)
|
||||
{
|
||||
mPointer = pointer;
|
||||
mParent = parent;
|
||||
}
|
||||
|
||||
public boolean supportsCreator()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean supportsNotes()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean supportsCode()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public native String getName();
|
||||
|
||||
@NonNull
|
||||
public native String getCreator();
|
||||
|
||||
@NonNull
|
||||
public native String getNotes();
|
||||
|
||||
public boolean getUserDefined()
|
||||
{
|
||||
// Technically graphics mods can be user defined, but we don't support editing graphics mods
|
||||
// in the GUI, and editability is what this really controls
|
||||
return false;
|
||||
}
|
||||
|
||||
public native boolean getEnabled();
|
||||
|
||||
@Override
|
||||
protected native void setEnabledImpl(boolean enabled);
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package org.dolphinemu.dolphinemu.features.cheats.model;
|
||||
|
||||
import androidx.annotation.Keep;
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class GraphicsModGroup
|
||||
{
|
||||
@Keep
|
||||
private final long mPointer;
|
||||
|
||||
@Keep
|
||||
private GraphicsModGroup(long pointer)
|
||||
{
|
||||
mPointer = pointer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public native void finalize();
|
||||
|
||||
@NonNull
|
||||
public native GraphicsMod[] getMods();
|
||||
|
||||
public native void save();
|
||||
|
||||
@NonNull
|
||||
public static native GraphicsModGroup load(String gameId);
|
||||
}
|
@ -13,6 +13,7 @@ import org.dolphinemu.dolphinemu.R;
|
||||
import org.dolphinemu.dolphinemu.features.cheats.model.ARCheat;
|
||||
import org.dolphinemu.dolphinemu.features.cheats.model.CheatsViewModel;
|
||||
import org.dolphinemu.dolphinemu.features.cheats.model.GeckoCheat;
|
||||
import org.dolphinemu.dolphinemu.features.cheats.model.GraphicsMod;
|
||||
import org.dolphinemu.dolphinemu.features.cheats.model.PatchCheat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -90,8 +91,8 @@ public class CheatsAdapter extends RecyclerView.Adapter<CheatItemViewHolder>
|
||||
@Override
|
||||
public int getItemCount()
|
||||
{
|
||||
return mViewModel.getARCheats().size() + mViewModel.getGeckoCheats().size() +
|
||||
mViewModel.getPatchCheats().size() + 7;
|
||||
return mViewModel.getGraphicsMods().size() + mViewModel.getPatchCheats().size() +
|
||||
mViewModel.getARCheats().size() + mViewModel.getGeckoCheats().size() + 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -108,6 +109,17 @@ public class CheatsAdapter extends RecyclerView.Adapter<CheatItemViewHolder>
|
||||
|
||||
private CheatItem getItemAt(int position)
|
||||
{
|
||||
// Graphics mods
|
||||
|
||||
if (position == 0)
|
||||
return new CheatItem(CheatItem.TYPE_HEADER, R.string.cheats_header_graphics_mod);
|
||||
position -= 1;
|
||||
|
||||
ArrayList<GraphicsMod> graphicsMods = mViewModel.getGraphicsMods();
|
||||
if (position < graphicsMods.size())
|
||||
return new CheatItem(graphicsMods.get(position));
|
||||
position -= graphicsMods.size();
|
||||
|
||||
// Patches
|
||||
|
||||
if (position == 0)
|
||||
|
@ -490,6 +490,7 @@
|
||||
<string name="cheats_header_ar">AR Codes</string>
|
||||
<string name="cheats_header_gecko">Gecko Codes</string>
|
||||
<string name="cheats_header_patch">Patches</string>
|
||||
<string name="cheats_header_graphics_mod">Graphics Mods</string>
|
||||
<string name="cheats_add_ar">Add New AR Code</string>
|
||||
<string name="cheats_add_gecko">Add New Gecko Code</string>
|
||||
<string name="cheats_add_patch">Add New Patch</string>
|
||||
|
Reference in New Issue
Block a user