mirror of
https://github.com/Ryujinx/SDL.git
synced 2025-01-12 13:25:28 +00:00
Fixed bug 2258 - Crash when using Android clipboard
chw The Android clipboard manager methods must be called from the UI thread, otherwise crashes of the dalvikvm happen.
This commit is contained in:
parent
e9af6dcd93
commit
c933166401
|
@ -277,6 +277,34 @@ public class SDLActivity extends Activity {
|
||||||
return mSingleton;
|
return mSingleton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return result of getSystemService(name) but executed on UI thread.
|
||||||
|
*/
|
||||||
|
public Object getSystemServiceFromUiThread(final String name) {
|
||||||
|
final Object lock = new Object();
|
||||||
|
final Object[] results = new Object[2]; // array for writable variables
|
||||||
|
synchronized (lock) {
|
||||||
|
runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
synchronized (lock) {
|
||||||
|
results[0] = getSystemService(name);
|
||||||
|
results[1] = Boolean.TRUE;
|
||||||
|
lock.notify();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (results[1] == null) {
|
||||||
|
try {
|
||||||
|
lock.wait();
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results[0];
|
||||||
|
}
|
||||||
|
|
||||||
static class ShowTextInputTask implements Runnable {
|
static class ShowTextInputTask implements Runnable {
|
||||||
/*
|
/*
|
||||||
* This is used to regulate the pan&scan method to have some offset from
|
* This is used to regulate the pan&scan method to have some offset from
|
||||||
|
|
|
@ -1041,7 +1041,7 @@ static jobject Android_JNI_GetSystemServiceObject(const char* name)
|
||||||
mid = (*env)->GetStaticMethodID(env, mActivityClass, "getContext", "()Landroid/content/Context;");
|
mid = (*env)->GetStaticMethodID(env, mActivityClass, "getContext", "()Landroid/content/Context;");
|
||||||
jobject context = (*env)->CallStaticObjectMethod(env, mActivityClass, mid);
|
jobject context = (*env)->CallStaticObjectMethod(env, mActivityClass, mid);
|
||||||
|
|
||||||
mid = (*env)->GetMethodID(env, mActivityClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;");
|
mid = (*env)->GetMethodID(env, mActivityClass, "getSystemServiceFromUiThread", "(Ljava/lang/String;)Ljava/lang/Object;");
|
||||||
jobject manager = (*env)->CallObjectMethod(env, context, mid, service);
|
jobject manager = (*env)->CallObjectMethod(env, context, mid, service);
|
||||||
|
|
||||||
(*env)->DeleteLocalRef(env, service);
|
(*env)->DeleteLocalRef(env, service);
|
||||||
|
|
Loading…
Reference in a new issue