diff --git a/builds/android/app/src/main/java/org/easyrpg/player/game_browser/Game.java b/builds/android/app/src/main/java/org/easyrpg/player/game_browser/Game.java index ce3df09710..7a0f2bce1f 100644 --- a/builds/android/app/src/main/java/org/easyrpg/player/game_browser/Game.java +++ b/builds/android/app/src/main/java/org/easyrpg/player/game_browser/Game.java @@ -10,6 +10,7 @@ import androidx.annotation.NonNull; import androidx.documentfile.provider.DocumentFile; +import org.easyrpg.player.Helper; import org.easyrpg.player.settings.SettingsManager; import java.io.ByteArrayOutputStream; @@ -173,6 +174,20 @@ public String toString() { return getDisplayTitle(); } + public Uri createSaveUri(Context context) { + if (!getSavePath().isEmpty()) { + DocumentFile saveFolder = Helper.createFolderInSave(context, getSavePath()); + + if (saveFolder != null) { + return saveFolder.getUri(); + } + } else { + return Uri.parse(getGameFolderPath()); + } + + return null; + } + public static Game fromCacheEntry(Context context, String cache) { String[] entries = cache.split(String.valueOf(escapeCode)); diff --git a/builds/android/app/src/main/java/org/easyrpg/player/game_browser/GameBrowserActivity.java b/builds/android/app/src/main/java/org/easyrpg/player/game_browser/GameBrowserActivity.java index 41f6c09109..4b582f1fdf 100644 --- a/builds/android/app/src/main/java/org/easyrpg/player/game_browser/GameBrowserActivity.java +++ b/builds/android/app/src/main/java/org/easyrpg/player/game_browser/GameBrowserActivity.java @@ -7,7 +7,6 @@ import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; -import android.provider.DocumentsContract; import android.text.InputType; import android.util.DisplayMetrics; import android.util.Log; @@ -16,17 +15,14 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.view.GravityCompat; import androidx.drawerlayout.widget.DrawerLayout; @@ -36,10 +32,13 @@ import com.google.android.material.navigation.NavigationView; import org.easyrpg.player.BaseActivity; +import org.easyrpg.player.Helper; import org.easyrpg.player.R; import org.easyrpg.player.settings.SettingsManager; import org.libsdl.app.SDL; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -343,22 +342,33 @@ public void onBindViewHolder(final ViewHolder holder, final int position) { // Settings Button holder.settingsButton.setOnClickListener(v -> { - String[] choices_list = { + ArrayList choices_list = new ArrayList(Arrays.asList( activity.getResources().getString(R.string.select_game_region), activity.getResources().getString(R.string.game_rename), activity.getResources().getString(R.string.launch_debug_mode) - }; + )); + + if (android.os.Build.VERSION.SDK_INT >= 26) { + choices_list.add(activity.getResources().getString(R.string.open_save_folder)); + } + + // It's 2025 and converting an ArrayList to an Array is still hot-garbage in Java + // because of type erasure and ugly APIs + String[] choices_list_arr = new String[choices_list.size()]; + choices_list.toArray(choices_list_arr); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder .setTitle(R.string.settings) - .setItems(choices_list, (dialog, which) -> { + .setItems(choices_list_arr, (dialog, which) -> { if (which == 0) { - chooseRegion(activity, holder, gameList.get(position)); + chooseRegion(activity, holder, game); } else if (which == 1) { - renameGame(activity, holder, gameList.get(position)); + renameGame(activity, holder, game); } else if (which == 2) { launchGame(position, true); + } else if (which == 3) { + Helper.openFileBrowser(activity, game.createSaveUri(activity)); } }); builder.show(); diff --git a/builds/android/app/src/main/res/values/strings.xml b/builds/android/app/src/main/res/values/strings.xml index b8f992f088..74ff2345b4 100644 --- a/builds/android/app/src/main/res/values/strings.xml +++ b/builds/android/app/src/main/res/values/strings.xml @@ -34,6 +34,7 @@ Change the layout Launch in debug mode Rename game + Open savegame folder Choose a layout Unknown region Changing region failed