mirror of
				https://github.com/RetroDECK/ES-DE.git
				synced 2025-04-10 19:15:13 +00:00 
			
		
		
		
	(Android) Added support for launching emulators with scoped storage permissions
This commit is contained in:
		
							parent
							
								
									84534cf5d7
								
							
						
					
					
						commit
						811118d3ee
					
				|  | @ -1,6 +1,6 @@ | |||
| //  SPDX-License-Identifier: MIT
 | ||||
| //
 | ||||
| //  EmulationStation Desktop Edition
 | ||||
| //  ES-DE
 | ||||
| //  FileData.cpp
 | ||||
| //
 | ||||
| //  Provides game file data structures and functions to access and sort this information.
 | ||||
|  | @ -951,6 +951,7 @@ void FileData::launchGame() | |||
|     std::string androidPackage; | ||||
|     std::string androidActivity; | ||||
|     std::string androidAction; | ||||
|     std::string androidFileAsURI; | ||||
|     std::vector<std::pair<std::string, std::string>> androidExtras; | ||||
| #endif | ||||
| 
 | ||||
|  | @ -1616,6 +1617,8 @@ void FileData::launchGame() | |||
|     command = Utils::String::replace(command, "%ROMPATH%", | ||||
|                                      Utils::FileSystem::getEscapedPath(getROMDirectory())); | ||||
| #if defined(__ANDROID__) | ||||
|     if (command.find("%ROMURI%") != std::string::npos) | ||||
|         androidFileAsURI = romRaw; | ||||
|     command = Utils::String::replace(command, "%ANDROIDPACKAGE%", androidPackage); | ||||
|     size_t extraPos {command.find("%EXTRA_")}; | ||||
| 
 | ||||
|  | @ -1721,9 +1724,12 @@ void FileData::launchGame() | |||
|     LOG(LogInfo) << "Package: " << androidPackage; | ||||
|     LOG(LogInfo) << "Activity: " << (androidActivity == "" ? "<package default>" : androidActivity); | ||||
|     LOG(LogInfo) << "Action: " << (androidAction == "" ? "<package default>" : androidAction); | ||||
|     if (androidFileAsURI != "") { | ||||
|         LOG(LogInfo) << "File (URI): " << androidFileAsURI; | ||||
|     } | ||||
|     for (auto& extra : androidExtras) { | ||||
|         LOG(LogDebug) << "Extra name: " << extra.first; | ||||
|         LOG(LogDebug) << "Extra value: " << extra.second; | ||||
|         LOG(LogInfo) << "Extra name: " << extra.first; | ||||
|         LOG(LogInfo) << "Extra value: " << extra.second; | ||||
|     } | ||||
| #else | ||||
|     LOG(LogInfo) << "Expanded emulator launch command:"; | ||||
|  | @ -1748,8 +1754,8 @@ void FileData::launchGame() | |||
|         Utils::String::stringToWideString(command), | ||||
|         Utils::String::stringToWideString(startDirectory), runInBackground, hideWindow); | ||||
| #elif defined(__ANDROID__) | ||||
|     returnValue = Utils::Platform::Android::launchGame(androidPackage, androidActivity, | ||||
|                                                        androidAction, androidExtras); | ||||
|     returnValue = Utils::Platform::Android::launchGame( | ||||
|         androidPackage, androidActivity, androidAction, androidFileAsURI, androidExtras); | ||||
| #else | ||||
| returnValue = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground); | ||||
| #endif | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| //  SPDX-License-Identifier: MIT
 | ||||
| //
 | ||||
| //  EmulationStation Desktop Edition
 | ||||
| //  ES-DE
 | ||||
| //  FileData.h
 | ||||
| //
 | ||||
| //  Provides game file data structures and functions to access and sort this information.
 | ||||
|  |  | |||
|  | @ -403,14 +403,15 @@ namespace Utils | |||
|             int launchGame(const std::string& packageName, | ||||
|                            const std::string& activity, | ||||
|                            const std::string& action, | ||||
|                            const std::string& fileAsURI, | ||||
|                            std::vector<std::pair<std::string, std::string>>& extras) | ||||
|             { | ||||
|                 JNIEnv* jniEnv {reinterpret_cast<JNIEnv*>(SDL_AndroidGetJNIEnv())}; | ||||
|                 jclass jniClass {jniEnv->FindClass("org/es_de/frontend/MainActivity")}; | ||||
|                 jmethodID methodID { | ||||
|                     jniEnv->GetStaticMethodID(jniClass, "launchGame", | ||||
|                                               "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/" | ||||
|                                               "String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; | ||||
|                 jmethodID methodID {jniEnv->GetStaticMethodID( | ||||
|                     jniClass, "launchGame", | ||||
|                     "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/" | ||||
|                     "String;Ljava/util/Vector;Ljava/util/Vector;)Z")}; | ||||
|                 jclass vectorClass {jniEnv->FindClass("java/util/Vector")}; | ||||
|                 jmethodID vectorMID {jniEnv->GetMethodID(vectorClass, "<init>", "()V")}; | ||||
|                 jmethodID addMethodID { | ||||
|  | @ -426,7 +427,7 @@ namespace Utils | |||
|                 const bool returnValue {static_cast<bool>(jniEnv->CallStaticBooleanMethod( | ||||
|                     jniClass, methodID, jniEnv->NewStringUTF(packageName.c_str()), | ||||
|                     jniEnv->NewStringUTF(activity.c_str()), jniEnv->NewStringUTF(action.c_str()), | ||||
|                     extrasNames, extrasValues))}; | ||||
|                     jniEnv->NewStringUTF(fileAsURI.c_str()), extrasNames, extrasValues))}; | ||||
|                 // jniEnv->DeleteLocalRef(vectorClass);
 | ||||
|                 // jniEnv->DeleteLocalRef(jniClass);
 | ||||
|                 if (returnValue) | ||||
|  |  | |||
|  | @ -65,6 +65,7 @@ namespace Utils | |||
|             int launchGame(const std::string& packageName, | ||||
|                            const std::string& activity, | ||||
|                            const std::string& action, | ||||
|                            const std::string& fileAsURI, | ||||
|                            std::vector<std::pair<std::string, std::string>>& extras); | ||||
|         } // namespace Android
 | ||||
| #endif | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Leon Styhre
						Leon Styhre