mirror of
https://github.com/love2d/love-android.git
synced 2026-08-21 05:00:22 +02:00
fixed #104: loading of multiple .love files
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
android:name="GameActivity"
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:label="LÖVE for Android"
|
||||
android:launchMode="singleTop"
|
||||
android:screenOrientation="landscape" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
@@ -75,23 +75,26 @@ const char* getSelectedGameFile()
|
||||
{
|
||||
static const char *path = NULL;
|
||||
|
||||
if (!path) {
|
||||
JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv();
|
||||
jclass activity = env->FindClass("org/love2d/android/GameActivity");
|
||||
|
||||
jmethodID getGamePath = env->GetStaticMethodID(activity, "getGamePath", "()Ljava/lang/String;");
|
||||
jstring gamePath = (jstring) env->CallStaticObjectMethod(activity, getGamePath);
|
||||
const char *utf = env->GetStringUTFChars(gamePath, 0);
|
||||
if (utf)
|
||||
{
|
||||
path = SDL_strdup(utf);
|
||||
env->ReleaseStringUTFChars(gamePath, utf);
|
||||
}
|
||||
|
||||
env->DeleteLocalRef (gamePath);
|
||||
env->DeleteLocalRef (activity);
|
||||
if (path) {
|
||||
delete path;
|
||||
path = NULL;
|
||||
}
|
||||
|
||||
JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv();
|
||||
jclass activity = env->FindClass("org/love2d/android/GameActivity");
|
||||
|
||||
jmethodID getGamePath = env->GetStaticMethodID(activity, "getGamePath", "()Ljava/lang/String;");
|
||||
jstring gamePath = (jstring) env->CallStaticObjectMethod(activity, getGamePath);
|
||||
const char *utf = env->GetStringUTFChars(gamePath, 0);
|
||||
if (utf)
|
||||
{
|
||||
path = SDL_strdup(utf);
|
||||
env->ReleaseStringUTFChars(gamePath, utf);
|
||||
}
|
||||
|
||||
env->DeleteLocalRef (gamePath);
|
||||
env->DeleteLocalRef (activity);
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
@@ -98,25 +98,8 @@ public class SDLActivity extends Activity {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
Log.v("SDL", "onCreate():" + mSingleton);
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
SDLActivity.initialize();
|
||||
// So we can call stuff from static callbacks
|
||||
mSingleton = this;
|
||||
|
||||
// Set up the surface
|
||||
mSurface = new SDLSurface(getApplication());
|
||||
|
||||
if(Build.VERSION.SDK_INT >= 12) {
|
||||
mJoystickHandler = new SDLJoystickHandler_API12();
|
||||
}
|
||||
else {
|
||||
mJoystickHandler = new SDLJoystickHandler();
|
||||
}
|
||||
|
||||
mLayout = new AbsoluteLayout(this);
|
||||
mLayout.addView(mSurface);
|
||||
|
||||
setContentView(mLayout);
|
||||
|
||||
startNative();
|
||||
}
|
||||
|
||||
// Events
|
||||
@@ -153,28 +136,59 @@ public class SDLActivity extends Activity {
|
||||
SDLActivity.nativeLowMemory();
|
||||
}
|
||||
|
||||
/** Ends the native thread.
|
||||
*/
|
||||
public void resetNative() {
|
||||
Log.v("SDL", "resetNative()");
|
||||
|
||||
// Send a quit message to the application
|
||||
SDLActivity.mExitCalledFromJava = true;
|
||||
SDLActivity.nativeQuit();
|
||||
|
||||
// Now wait for the SDL thread to quit
|
||||
if (SDLActivity.mSDLThread != null) {
|
||||
try {
|
||||
SDLActivity.mSDLThread.join();
|
||||
} catch(Exception e) {
|
||||
Log.v("SDL", "Problem stopping thread: " + e);
|
||||
}
|
||||
SDLActivity.mSDLThread = null;
|
||||
|
||||
//Log.v("SDL", "Finished waiting for SDL thread");
|
||||
}
|
||||
|
||||
SDLActivity.initialize();
|
||||
}
|
||||
|
||||
public void startNative() {
|
||||
Log.v("SDL", "startNative()");
|
||||
SDLActivity.initialize();
|
||||
// So we can call stuff from static callbacks
|
||||
mSingleton = this;
|
||||
|
||||
// Set up the surface
|
||||
mSurface = new SDLSurface(getApplication());
|
||||
|
||||
if(Build.VERSION.SDK_INT >= 12) {
|
||||
mJoystickHandler = new SDLJoystickHandler_API12();
|
||||
}
|
||||
else {
|
||||
mJoystickHandler = new SDLJoystickHandler();
|
||||
}
|
||||
|
||||
mLayout = new AbsoluteLayout(this);
|
||||
mLayout.addView(mSurface);
|
||||
|
||||
setContentView(mLayout);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
Log.v("SDL", "onDestroy()");
|
||||
// Send a quit message to the application
|
||||
SDLActivity.mExitCalledFromJava = true;
|
||||
SDLActivity.nativeQuit();
|
||||
|
||||
// Now wait for the SDL thread to quit
|
||||
if (SDLActivity.mSDLThread != null) {
|
||||
try {
|
||||
SDLActivity.mSDLThread.join();
|
||||
} catch(Exception e) {
|
||||
Log.v("SDL", "Problem stopping thread: " + e);
|
||||
}
|
||||
SDLActivity.mSDLThread = null;
|
||||
|
||||
//Log.v("SDL", "Finished waiting for SDL thread");
|
||||
}
|
||||
resetNative();
|
||||
|
||||
super.onDestroy();
|
||||
// Reset everything in case the user re opens the app
|
||||
SDLActivity.initialize();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -46,9 +46,26 @@ public class GameActivity extends SDLActivity {
|
||||
context = this.getApplicationContext();
|
||||
vibrator = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
|
||||
|
||||
Uri game = this.getIntent().getData();
|
||||
handleIntent (this.getIntent());
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent (Intent intent) {
|
||||
Log.d("GameActivity", "onNewIntent() with " + intent);
|
||||
handleIntent (intent);
|
||||
resetNative();
|
||||
startNative();
|
||||
};
|
||||
|
||||
protected void handleIntent (Intent intent) {
|
||||
Uri game = intent.getData();
|
||||
if (game != null) {
|
||||
if (game.getScheme().equals ("file")) {
|
||||
Log.d("GameActivity", "Received intent with path: " + game.getPath());
|
||||
|
||||
// If we were given the path of a main.lua then use its
|
||||
// directory. Otherwise use full path.
|
||||
List<String> path_segments = game.getPathSegments();
|
||||
@@ -60,12 +77,10 @@ public class GameActivity extends SDLActivity {
|
||||
} else {
|
||||
copyGameToCache (game);
|
||||
}
|
||||
Log.d("GameActivity", "Opening game from: " + getGamePath());
|
||||
}
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
}
|
||||
Log.d("GameActivity", "new gamePath: " + gamePath);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
|
||||
Reference in New Issue
Block a user