From de3696be4c3f3a39357053eebd481f837bbc1b0a Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 24 Oct 2020 11:36:57 +1000 Subject: [PATCH] Android: Add multiple save slots --- .../duckstation/EmulationActivity.java | 36 +++++++++++-------- android/app/src/main/res/values/arrays.xml | 19 ++++++++-- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java b/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java index a0130b1aa..7c89f39b2 100644 --- a/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java +++ b/android/app/src/main/java/com/github/stenzek/duckstation/EmulationActivity.java @@ -43,6 +43,7 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde private boolean mApplySettingsOnSurfaceRestored = false; private String mGameTitle = null; private EmulationSurfaceView mContentView; + private int mSaveStateSlot = 0; private boolean getBooleanSetting(String key, boolean defaultValue) { return mPreferences.getBoolean(key, defaultValue); @@ -269,25 +270,28 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde private void showMenu() { AlertDialog.Builder builder = new AlertDialog.Builder(this); - if (mGameTitle != null && !mGameTitle.isEmpty()) - builder.setTitle(mGameTitle); - builder.setItems(R.array.emulation_menu, (dialogInterface, i) -> { switch (i) { case 0: // Quick Load { - AndroidHostInterface.getInstance().loadState(false, 0); + AndroidHostInterface.getInstance().loadState(false, mSaveStateSlot); return; } case 1: // Quick Save { - AndroidHostInterface.getInstance().saveState(false, 0); + AndroidHostInterface.getInstance().saveState(false, mSaveStateSlot); return; } - case 2: // Toggle Speed Limiter + case 2: // Save State Slot + { + showSaveStateSlotMenu(); + return; + } + + case 3: // Toggle Speed Limiter { boolean newSetting = !getBooleanSetting("Main/SpeedLimiterEnabled", true); setBooleanSetting("Main/SpeedLimiterEnabled", newSetting); @@ -295,13 +299,13 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde return; } - case 3: // More Options + case 4: // More Options { showMoreMenu(); return; } - case 4: // Quit + case 5: // Quit { mStopRequested = true; finish(); @@ -313,6 +317,16 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde builder.create().show(); } + private void showSaveStateSlotMenu() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setSingleChoiceItems(R.array.emulation_save_state_slot_menu, mSaveStateSlot, (dialogInterface, i) -> { + mSaveStateSlot = i; + dialogInterface.dismiss(); + }); + builder.setOnDismissListener(dialogInterface -> enableFullscreenImmersive()); + builder.create().show(); + } + private void showMoreMenu() { AlertDialog.Builder builder = new AlertDialog.Builder(this); if (mGameTitle != null && !mGameTitle.isEmpty()) @@ -351,12 +365,6 @@ public class EmulationActivity extends AppCompatActivity implements SurfaceHolde startActivityForResult(intent, REQUEST_CODE_SETTINGS); return; } - - case 5: // Quit - { - finish(); - return; - } } }); builder.setOnDismissListener(dialogInterface -> enableFullscreenImmersive()); diff --git a/android/app/src/main/res/values/arrays.xml b/android/app/src/main/res/values/arrays.xml index d8940d7f5..d57a996cc 100644 --- a/android/app/src/main/res/values/arrays.xml +++ b/android/app/src/main/res/values/arrays.xml @@ -128,8 +128,9 @@ PerGameTitle - Quick Load - Quick Save + Load State + Save State + Save State Slot Toggle Speed Limiter More Options Quit @@ -140,7 +141,19 @@ Change Disc Change Touchscreen Controller Settings - Quit + + + Quick Slot + Game Slot 1 + Game Slot 2 + Game Slot 3 + Game Slot 4 + Game Slot 5 + Game Slot 6 + Game Slot 7 + Game Slot 8 + Game Slot 9 + Game Slot 10 None (Double Speed)