From 87533085fa939e85ed190b5ed4b4190d722737b7 Mon Sep 17 00:00:00 2001 From: valef Date: Sun, 5 Jan 2014 23:11:59 +0700 Subject: [PATCH 1/4] Added 'shortcutParam' argument to init() method declaration. public static native void init(int dpi, String deviceType, String languageRegion, String apkPath, String dataDir, String externalDir, String libraryDir, String shortcutParam, String installID, boolean useOpenSL); --- android/src/com/henrikrydgard/libnative/NativeApp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/com/henrikrydgard/libnative/NativeApp.java b/android/src/com/henrikrydgard/libnative/NativeApp.java index 9d97f339fe..a34c2f9cab 100644 --- a/android/src/com/henrikrydgard/libnative/NativeApp.java +++ b/android/src/com/henrikrydgard/libnative/NativeApp.java @@ -6,7 +6,7 @@ public class NativeApp { public final static int DEVICE_ID_MOUSE = 2; public final static int DEVICE_ID_PAD_0 = 10; - public static native void init(int dpi, String deviceType, String languageRegion, String apkPath, String dataDir, String externalDir, String libraryDir, String installID, boolean useOpenSL); + public static native void init(int dpi, String deviceType, String languageRegion, String apkPath, String dataDir, String externalDir, String libraryDir, String shortcutParam, String installID, boolean useOpenSL); public static native void audioInit(); public static native void audioShutdown(); From 234344983a5268504d54cc865c0e5657415b14ac Mon Sep 17 00:00:00 2001 From: valef Date: Sun, 5 Jan 2014 23:14:26 +0700 Subject: [PATCH 2/4] - Added key to get shortcut parameter. public static final String SHORTCUT_EXTRA_KEY = "org.ppsspp.ppsspp.Shortcuts"; - Added code to get shortcut parameter from intent. String shortcutParam = getIntent().getStringExtra(SHORTCUT_EXTRA_KEY); - Call NativeApp.init() with shortcutParam argument. NativeApp.init(dpi, deviceType, languageRegion, apkFilePath, dataDir, externalStorageDir, libraryDir, shortcutParam, installID, useOpenSL); --- .../henrikrydgard/libnative/NativeActivity.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/android/src/com/henrikrydgard/libnative/NativeActivity.java b/android/src/com/henrikrydgard/libnative/NativeActivity.java index fa1f599e47..a03cc8439a 100644 --- a/android/src/com/henrikrydgard/libnative/NativeActivity.java +++ b/android/src/com/henrikrydgard/libnative/NativeActivity.java @@ -87,6 +87,9 @@ public class NativeActivity extends Activity { // Adjust these as necessary private static String TAG = "NativeActivity"; + + // Key used by shortcut creation. + public static final String SHORTCUT_EXTRA_KEY = "org.ppsspp.ppsspp.Shortcuts"; // Easy way to flip it on and off from code. private static final boolean useKitkatImmersiveMode = false; @@ -203,6 +206,15 @@ public class NativeActivity extends Activity { e.printStackTrace(); throw new RuntimeException("Unable to locate assets, aborting..."); } + + // Get shortcut parameter, in case app was launched from homescreen shortcut. + // We obtain shortcut parameter from Intent extra string. + // Intent extra will be null if we launch from normal app drawer. + String shortcutParam = getIntent().getStringExtra(SHORTCUT_EXTRA_KEY); + if(shortcutParam == null) { + shortcutParam = new String(""); + } + String libraryDir = getApplicationLibraryDir(appInfo); File sdcard = Environment.getExternalStorageDirectory(); Display display = ((WindowManager)this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); @@ -230,7 +242,7 @@ public class NativeActivity extends Activity { String languageRegion = Locale.getDefault().getLanguage() + "_" + Locale.getDefault().getCountry(); NativeApp.audioConfig(optimalFramesPerBuffer, optimalSampleRate); - NativeApp.init(dpi, deviceType, languageRegion, apkFilePath, dataDir, externalStorageDir, libraryDir, installID, useOpenSL); + NativeApp.init(dpi, deviceType, languageRegion, apkFilePath, dataDir, externalStorageDir, libraryDir, shortcutParam, installID, useOpenSL); Log.i(TAG, "Device: " + deviceType); Log.i(TAG, "W : " + scrWidth + " H: " + scrHeight + " rate: " + scrRefreshRate + " fmt: " + scrPixelFormat + " dpi: " + dpi); From b2c3ee8d57d1af22e0bc1cd7b1b056233dfc8ef7 Mon Sep 17 00:00:00 2001 From: valef Date: Sun, 5 Jan 2014 23:37:21 +0700 Subject: [PATCH 3/4] - Added jshortcutParam parameter to libnative_NativeApp_init. - If shortcut_param is not empty, pass it as additional varargs argument to NativeInit() method. const char *argv[3] = {app_name.c_str(), shortcut_param.c_str(), 0}; NativeInit(2, argv, user_data_path.c_str(), externalDir.c_str(), installID.c_str()); - NativeInit() is expected to treat extra argument as boot_filename, which in turn will start game immediately. --- android/app-android.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/android/app-android.cpp b/android/app-android.cpp index 975ac96b7e..b049b6f594 100644 --- a/android/app-android.cpp +++ b/android/app-android.cpp @@ -139,7 +139,8 @@ extern "C" void Java_com_henrikrydgard_libnative_NativeApp_audioConfig extern "C" void Java_com_henrikrydgard_libnative_NativeApp_init (JNIEnv *env, jclass, jint dpi, jstring jdevicetype, jstring jlangRegion, jstring japkpath, - jstring jdataDir, jstring jexternalDir, jstring jlibraryDir, jstring jinstallID, jboolean juseNativeAudio) { + jstring jdataDir, jstring jexternalDir, jstring jlibraryDir, jstring jshortcutParam, + jstring jinstallID, jboolean juseNativeAudio) { jniEnvUI = env; ILOG("NativeApp.init() -- begin"); @@ -166,9 +167,11 @@ extern "C" void Java_com_henrikrydgard_libnative_NativeApp_init std::string externalDir = GetJavaString(env, jexternalDir); std::string user_data_path = GetJavaString(env, jdataDir) + "/"; library_path = GetJavaString(env, jlibraryDir) + "/"; + std::string shortcut_param = GetJavaString(env, jshortcutParam); std::string installID = GetJavaString(env, jinstallID); ILOG("NativeApp.init(): External storage path: %s", externalDir.c_str()); + ILOG("NativeApp.init(): Launch shortcut parameter: %s", shortcut_param.c_str()); std::string app_name; std::string app_nice_name; @@ -181,8 +184,19 @@ extern "C" void Java_com_henrikrydgard_libnative_NativeApp_init NativeGetAppInfo(&app_name, &app_nice_name, &landscape); - const char *argv[2] = {app_name.c_str(), 0}; - NativeInit(1, argv, user_data_path.c_str(), externalDir.c_str(), installID.c_str()); + + // If shortcut_param is not empty, pass it as additional varargs argument to NativeInit() method. + // NativeInit() is expected to treat extra argument as boot_filename, which in turn will start game immediately. + // NOTE: Will only work if ppsspp started from Activity.onCreate(). Won't work if ppsspp app start from onResume(). + + if(shortcut_param.empty()) { + const char *argv[2] = {app_name.c_str(), 0}; + NativeInit(1, argv, user_data_path.c_str(), externalDir.c_str(), installID.c_str()); + } + else { + const char *argv[3] = {app_name.c_str(), shortcut_param.c_str(), 0}; + NativeInit(2, argv, user_data_path.c_str(), externalDir.c_str(), installID.c_str()); + } use_opensl_audio = juseNativeAudio; ILOG("NativeApp.init() -- end"); From 43691090f34b6d94f402217adf2a6a4a48775b19 Mon Sep 17 00:00:00 2001 From: valef Date: Mon, 6 Jan 2014 18:00:24 +0700 Subject: [PATCH 4/4] - Removed SHORTCUT_EXTRA_KEY and shortcut query out of NativeActivity class. - Added String shortcutParam member & setShortcutParam() method. This will be set from other class. --- .../henrikrydgard/libnative/NativeActivity.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/android/src/com/henrikrydgard/libnative/NativeActivity.java b/android/src/com/henrikrydgard/libnative/NativeActivity.java index a03cc8439a..79adc60c8e 100644 --- a/android/src/com/henrikrydgard/libnative/NativeActivity.java +++ b/android/src/com/henrikrydgard/libnative/NativeActivity.java @@ -88,9 +88,6 @@ public class NativeActivity extends Activity { // Adjust these as necessary private static String TAG = "NativeActivity"; - // Key used by shortcut creation. - public static final String SHORTCUT_EXTRA_KEY = "org.ppsspp.ppsspp.Shortcuts"; - // Easy way to flip it on and off from code. private static final boolean useKitkatImmersiveMode = false; @@ -104,6 +101,8 @@ public class NativeActivity extends Activity { boolean useOpenSL = false; + private String shortcutParam = ""; + public static String runCommand; public static String commandParameter; public static String installID; @@ -173,6 +172,10 @@ public class NativeActivity extends Activity { } } + public void setShortcutParam(String shortcutParam) { + this.shortcutParam = ((shortcutParam == null) ? "" : shortcutParam); + } + public void Initialize() { //initialise audio classes. Do this here since detectOptimalAudioSettings() @@ -207,14 +210,6 @@ public class NativeActivity extends Activity { throw new RuntimeException("Unable to locate assets, aborting..."); } - // Get shortcut parameter, in case app was launched from homescreen shortcut. - // We obtain shortcut parameter from Intent extra string. - // Intent extra will be null if we launch from normal app drawer. - String shortcutParam = getIntent().getStringExtra(SHORTCUT_EXTRA_KEY); - if(shortcutParam == null) { - shortcutParam = new String(""); - } - String libraryDir = getApplicationLibraryDir(appInfo); File sdcard = Environment.getExternalStorageDirectory(); Display display = ((WindowManager)this.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();