diff options
| author | JosJuice <josjuice@gmail.com> | 2021-07-18 18:54:01 +0200 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2021-09-16 16:46:49 +0200 |
| commit | 93a12713864b147c003cfb757b42b47ecb69676f (patch) | |
| tree | b22e5dbfcdf3ccfbd94ea405b143aaaf8ce22ac3 /Source/Android/app/src/main/java | |
| parent | 67a8855d9a5ec6e6c23617d72beb29db002424c7 (diff) | |
Android: Add checkboxes for toggling cheats enabled
Diffstat (limited to 'Source/Android/app/src/main/java')
8 files changed, 132 insertions, 10 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 index f17ef89859..ebb4ee9416 100644 --- 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 @@ -5,7 +5,7 @@ package org.dolphinemu.dolphinemu.features.cheats.model; import androidx.annotation.Keep; import androidx.annotation.NonNull; -public class ARCheat implements Cheat +public class ARCheat extends AbstractCheat { @Keep private final long mPointer; @@ -22,6 +22,13 @@ public class ARCheat implements Cheat @NonNull public native String getName(); + public native boolean getEnabled(); + + @Override + protected native void setEnabledImpl(boolean enabled); + @NonNull public static native ARCheat[] loadCodes(String gameId, int revision); + + public static native void saveCodes(String gameId, int revision, ARCheat[] codes); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/AbstractCheat.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/AbstractCheat.java new file mode 100644 index 0000000000..8f6121808a --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/cheats/model/AbstractCheat.java @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.features.cheats.model; + +import androidx.annotation.Nullable; + +public abstract class AbstractCheat implements Cheat +{ + private Runnable mChangedCallback = null; + + public void setEnabled(boolean enabled) + { + setEnabledImpl(enabled); + onChanged(); + } + + public void setChangedCallback(@Nullable Runnable callback) + { + mChangedCallback = callback; + } + + protected void onChanged() + { + if (mChangedCallback != null) + mChangedCallback.run(); + } + + protected abstract void setEnabledImpl(boolean enabled); +} 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 index 3c50325edf..97bd57d885 100644 --- 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 @@ -8,4 +8,8 @@ public interface Cheat { @NonNull String getName(); + + boolean getEnabled(); + + void setEnabled(boolean enabled); } 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 index 24eb4eff7c..c2cadaf8c0 100644 --- 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 @@ -12,6 +12,10 @@ public class CheatsViewModel extends ViewModel private ARCheat[] mARCheats; private GeckoCheat[] mGeckoCheats; + private boolean mPatchCheatsNeedSaving = false; + private boolean mARCheatsNeedSaving = false; + private boolean mGeckoCheatsNeedSaving = false; + public void load(String gameID, int revision) { if (mLoaded) @@ -21,9 +25,43 @@ public class CheatsViewModel extends ViewModel mARCheats = ARCheat.loadCodes(gameID, revision); mGeckoCheats = GeckoCheat.loadCodes(gameID, revision); + for (PatchCheat cheat : mPatchCheats) + { + cheat.setChangedCallback(() -> mPatchCheatsNeedSaving = true); + } + for (ARCheat cheat : mARCheats) + { + cheat.setChangedCallback(() -> mARCheatsNeedSaving = true); + } + for (GeckoCheat cheat : mGeckoCheats) + { + cheat.setChangedCallback(() -> mGeckoCheatsNeedSaving = true); + } + mLoaded = true; } + public void saveIfNeeded(String gameID, int revision) + { + if (mPatchCheatsNeedSaving) + { + PatchCheat.saveCodes(gameID, revision, mPatchCheats); + mPatchCheatsNeedSaving = false; + } + + if (mARCheatsNeedSaving) + { + ARCheat.saveCodes(gameID, revision, mARCheats); + mARCheatsNeedSaving = false; + } + + if (mGeckoCheatsNeedSaving) + { + GeckoCheat.saveCodes(gameID, revision, mGeckoCheats); + mGeckoCheatsNeedSaving = false; + } + } + public Cheat[] getPatchCheats() { return mPatchCheats; 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 index 5f9c7029ec..f6ea493ac3 100644 --- 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 @@ -5,7 +5,7 @@ package org.dolphinemu.dolphinemu.features.cheats.model; import androidx.annotation.Keep; import androidx.annotation.NonNull; -public class GeckoCheat implements Cheat +public class GeckoCheat extends AbstractCheat { @Keep private final long mPointer; @@ -22,6 +22,13 @@ public class GeckoCheat implements Cheat @NonNull public native String getName(); + public native boolean getEnabled(); + + @Override + protected native void setEnabledImpl(boolean enabled); + @NonNull public static native GeckoCheat[] loadCodes(String gameId, int revision); + + public static native void saveCodes(String gameId, int revision, GeckoCheat[] codes); } 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 index 5b2027807e..411df3cdc0 100644 --- 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 @@ -5,7 +5,7 @@ package org.dolphinemu.dolphinemu.features.cheats.model; import androidx.annotation.Keep; import androidx.annotation.NonNull; -public class PatchCheat implements Cheat +public class PatchCheat extends AbstractCheat { @Keep private final long mPointer; @@ -22,6 +22,13 @@ public class PatchCheat implements Cheat @NonNull public native String getName(); + public native boolean getEnabled(); + + @Override + protected native void setEnabledImpl(boolean enabled); + @NonNull public static native PatchCheat[] loadCodes(String gameId, int revision); + + public static native void saveCodes(String gameId, int revision, PatchCheat[] codes); } 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 e99f75f6b2..d3fa67905b 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 @@ -3,6 +3,8 @@ package org.dolphinemu.dolphinemu.features.cheats.ui; import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; import android.widget.TextView; import androidx.annotation.NonNull; @@ -11,19 +13,35 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.features.cheats.model.Cheat; -public class CheatViewHolder extends ViewHolder +public class CheatViewHolder extends ViewHolder implements CompoundButton.OnCheckedChangeListener { - private TextView mName; + private final TextView mName; + private final CheckBox mCheckbox; + + private Cheat mCheat; public CheatViewHolder(@NonNull View itemView) { super(itemView); mName = itemView.findViewById(R.id.text_name); + mCheckbox = itemView.findViewById(R.id.checkbox); } public void bind(Cheat item) { + mCheckbox.setOnCheckedChangeListener(null); + mName.setText(item.getName()); + mCheckbox.setChecked(item.getEnabled()); + + mCheat = item; + + mCheckbox.setOnCheckedChangeListener(this); + } + + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) + { + mCheat.setEnabled(isChecked); } } 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 80a875e026..21fd9a04e9 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 @@ -18,6 +18,10 @@ public class CheatsActivity extends AppCompatActivity private static final String ARG_GAME_ID = "game_id"; private static final String ARG_REVISION = "revision"; + private String mGameId; + private int mRevision; + private CheatsViewModel mViewModel; + public static void launch(Context context, String gameId, int revision) { Intent intent = new Intent(context, CheatsActivity.class); @@ -34,14 +38,22 @@ public class CheatsActivity extends AppCompatActivity MainPresenter.skipRescanningLibrary(); Intent intent = getIntent(); - String gameId = intent.getStringExtra(ARG_GAME_ID); - int revision = intent.getIntExtra(ARG_REVISION, 0); + mGameId = intent.getStringExtra(ARG_GAME_ID); + mRevision = intent.getIntExtra(ARG_REVISION, 0); - setTitle(getString(R.string.cheats_with_game_id, gameId)); + setTitle(getString(R.string.cheats_with_game_id, mGameId)); - CheatsViewModel viewModel = new ViewModelProvider(this).get(CheatsViewModel.class); - viewModel.load(gameId, revision); + mViewModel = new ViewModelProvider(this).get(CheatsViewModel.class); + mViewModel.load(mGameId, mRevision); setContentView(R.layout.activity_cheats); } + + @Override + protected void onStop() + { + super.onStop(); + + mViewModel.saveIfNeeded(mGameId, mRevision); + } } |
