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.main
parent
e9af6dcd93
commit
c933166401
|
@ -277,6 +277,34 @@ public class SDLActivity extends Activity {
|
|||
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 {
|
||||
/*
|
||||
* 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;");
|
||||
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);
|
||||
|
||||
(*env)->DeleteLocalRef(env, service);
|
||||
|
|
Loading…
Reference in New Issue