Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
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.
- Loading branch information
|
@@ -277,6 +277,34 @@ public static Context getContext() { |
|
|
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); |
|
|