pass all args (#957)

This commit is contained in:
Logan McNaughton
2026-05-26 22:43:21 +02:00
committed by GitHub
parent 32f54f157b
commit a447bc8104
2 changed files with 67 additions and 93 deletions
@@ -20,55 +20,18 @@ class N64Activity : SDLActivity() {
override fun getArguments(): Array<String> {
val intent = intent ?: return super.getArguments()
val request_code = intent.getIntExtra("request_code", 0)
if (request_code == CONFIGURE_INPUT_PROFILE) {
val profile = intent.getStringExtra("profile_name") ?: return super.getArguments()
val deadzone = intent.getIntExtra("deadzone", -1)
val args = mutableListOf(
"--configure-input-profile",
profile,
)
if (intent.getBooleanExtra("dinput", false)) {
args.add("--use-dinput")
}
if (deadzone != -1) {
args.add("--deadzone")
args.add(deadzone.toString())
}
setResult(RESULT_OK) // so that the profiles are updated in the GUI
return args.toTypedArray()
} else if (request_code == RUN_ROM) {
val file_path = intent.getStringExtra("file_path") ?: return super.getArguments()
val overclock = intent.getBooleanExtra("overclock", false)
val disable_expansion_pak = intent.getBooleanExtra("disable_expansion_pak", false)
val args = mutableListOf(
file_path,
"--fullscreen",
"--overclock",
overclock.toString(),
"--disable-expansion-pak",
disable_expansion_pak.toString())
val dataIntent = Intent()
val netplay_peer_addr = intent.getStringExtra("netplay_peer_addr")
val cheats = intent.getStringExtra("cheats")
if (netplay_peer_addr != null && cheats != null) {
args.add("--netplay-peer-addr")
args.add(netplay_peer_addr)
args.add("--netplay-player-number")
args.add(intent.getIntExtra("netplay_player_number", 4).toString())
args.add("--cheats")
args.add(cheats)
dataIntent.putExtra("cheats_path", cheats)
}
val args = intent.getStringArrayExtra("args") ?: return super.getArguments()
val dataIntent = Intent()
val file_path = intent.getStringExtra("file_path")
if (file_path != null) {
dataIntent.putExtra("file_path", file_path)
setResult(RESULT_OK, dataIntent)
return args.toTypedArray()
} else {
return super.getArguments()
}
val cheats_path = intent.getStringExtra("cheats_path")
if (cheats_path != null) {
dataIntent.putExtra("cheats_path", cheats_path)
}
setResult(RESULT_OK, dataIntent)
return args
}
}
+57 -46
View File
@@ -2,7 +2,7 @@ use crate::Args;
use crate::run;
use crate::ui;
use clap::Parser;
use jni::objects::{JClass, JObject, JString};
use jni::objects::{JClass, JObject, JObjectArray, JString};
use jni::refs::Global;
use jni::sys::jint;
use jni::{Env, EnvUnowned, JavaVM, bind_java_type};
@@ -77,12 +77,8 @@ bind_java_type! {
sig = (extra: JString, value: JString) -> AndroidIntent,
name = "putExtra",
},
fn put_extra_boolean {
sig = (extra: JString, value: jboolean) -> AndroidIntent,
name = "putExtra",
},
fn put_extra_int {
sig = (extra: JString, value: jint) -> AndroidIntent,
fn put_extra_string_array {
sig = (extra: JString, value: JString[]) -> AndroidIntent,
name = "putExtra",
},
fn get_string_extra(name: JString) -> JString,
@@ -206,17 +202,24 @@ fn start_configure_input_profile_on_jvm(
let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?;
let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?;
let request_code_key = JString::from_str(env, "request_code")?;
let profile_name_key = JString::from_str(env, "profile_name")?;
let profile_name_value = JString::from_str(env, profile_name)?;
let dinput_key = JString::from_str(env, "dinput")?;
let deadzone_key = JString::from_str(env, "deadzone")?;
let args_key = JString::from_str(env, "args")?;
let mut args = vec![
JString::from_str(env, "--configure-input-profile")?,
JString::from_str(env, &profile_name)?,
JString::from_str(env, "--deadzone")?,
JString::from_str(env, &deadzone.to_string())?,
];
if dinput {
args.push(JString::from_str(env, "--use-dinput")?);
}
let empty_arg = JString::from_str(env, "")?;
let j_args = JObjectArray::<JString>::new(env, args.len(), empty_arg)?;
for (i, arg) in args.iter().enumerate() {
j_args.set_element(env, i, arg)?;
}
let intent = AndroidIntent::new(env)?
.set_class_name(env, &package_name, &class_name)?
.put_extra_string(env, &profile_name_key, &profile_name_value)?
.put_extra_boolean(env, &dinput_key, dinput)?
.put_extra_int(env, &deadzone_key, deadzone)?
.put_extra_int(env, &request_code_key, CONFIGURE_INPUT_PROFILE)?;
.put_extra_string_array(env, &args_key, &j_args)?;
activity
.as_ref()
@@ -259,42 +262,50 @@ fn start_run_rom_on_jvm(
let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?;
let file_path_key = JString::from_str(env, "file_path")?;
let file_path_value = JString::from_str(env, file_path.to_str().unwrap())?;
let overclock_key = JString::from_str(env, "overclock")?;
let disable_expansion_pak_key = JString::from_str(env, "disable_expansion_pak")?;
let request_code_key = JString::from_str(env, "request_code")?;
let mut intent = AndroidIntent::new(env)?
.set_class_name(env, &package_name, &class_name)?
.put_extra_int(env, &request_code_key, RUN_ROM)?
.put_extra_string(env, &file_path_key, &file_path_value)?
.put_extra_boolean(env, &overclock_key, game_settings.overclock)?
.put_extra_boolean(
env,
&disable_expansion_pak_key,
game_settings.disable_expansion_pak,
)?;
let file_path = file_path.to_str().unwrap();
let cheats_path_key = JString::from_str(env, "cheats_path")?;
let cheats_path = app
.internal_data_path()
.unwrap()
.join("cache")
.join("cheats.json");
let args_key = JString::from_str(env, "args")?;
let mut args = vec![
JString::from_str(env, file_path)?,
JString::from_str(env, "--fullscreen")?,
JString::from_str(env, "--overclock")?,
JString::from_str(env, &game_settings.overclock.to_string())?,
JString::from_str(env, "--disable-expansion-pak")?,
JString::from_str(env, &game_settings.disable_expansion_pak.to_string())?,
];
if let Some(netplay) = netplay {
let netplay_peer_addr_key = JString::from_str(env, "netplay_peer_addr")?;
let netplay_player_number_key = JString::from_str(env, "netplay_player_number")?;
let netplay_peer_addr_value = JString::from_str(env, &netplay.peer_addr.to_string())?;
let cheats_key = JString::from_str(env, "cheats")?;
let cheats_path = ui::get_dirs().cache_dir.join("cheats.json");
let cheats_value = JString::from_str(env, cheats_path.to_str().unwrap())?;
args.push(JString::from_str(env, "--netplay-peer-addr")?);
args.push(JString::from_str(env, &netplay.peer_addr.to_string())?);
args.push(JString::from_str(env, "--netplay-player-number")?);
args.push(JString::from_str(env, &netplay.player_number.to_string())?);
args.push(JString::from_str(env, "--cheats")?);
args.push(JString::from_str(env, cheats_path.to_str().unwrap())?);
let f = std::fs::File::create(cheats_path).unwrap();
let f = std::fs::File::create(&cheats_path).unwrap();
serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap();
intent = intent
.put_extra_string(env, &netplay_peer_addr_key, &netplay_peer_addr_value)?
.put_extra_int(
env,
&netplay_player_number_key,
netplay.player_number as jint,
)?
.put_extra_string(env, &cheats_key, &cheats_value)?;
}
let empty_arg = JString::from_str(env, "")?;
let j_args = JObjectArray::<JString>::new(env, args.len(), empty_arg)?;
for (i, arg) in args.iter().enumerate() {
j_args.set_element(env, i, arg)?;
}
let file_path_string = JString::from_str(env, file_path)?;
let cheats_path_string = JString::from_str(env, cheats_path.to_str().unwrap())?;
let intent = AndroidIntent::new(env)?
.set_class_name(env, &package_name, &class_name)?
.put_extra_string(env, &file_path_key, &file_path_string)?
.put_extra_string(env, &cheats_path_key, &cheats_path_string)?
.put_extra_string_array(env, &args_key, &j_args)?;
weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true))
.unwrap();