diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-01-22 00:13:42 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-01-22 00:13:42 -0800 |
commit | f1e484acb594a726fb57ad0ae4cfe902c7f35858 (patch) | |
tree | 99d2b34512f0dc2ae67666e756c1cfcd331e5fe3 /core/jni | |
parent | 22f7dfd23490a3de2f21ff96949ba47003aac8f8 (diff) | |
download | frameworks_base-f1e484acb594a726fb57ad0ae4cfe902c7f35858.zip frameworks_base-f1e484acb594a726fb57ad0ae4cfe902c7f35858.tar.gz frameworks_base-f1e484acb594a726fb57ad0ae4cfe902c7f35858.tar.bz2 |
auto import from //branches/cupcake/...@127436
Diffstat (limited to 'core/jni')
-rw-r--r-- | core/jni/android/graphics/Bitmap.cpp | 25 | ||||
-rw-r--r-- | core/jni/android_server_BluetoothDeviceService.cpp | 43 | ||||
-rw-r--r-- | core/jni/android_server_BluetoothEventLoop.cpp | 31 |
3 files changed, 54 insertions, 45 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp index 329a695..65f44d5 100644 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/core/jni/android/graphics/Bitmap.cpp @@ -507,6 +507,18 @@ static void Bitmap_copyPixelsToBuffer(JNIEnv* env, jobject, }
}
+static void Bitmap_copyPixelsFromBuffer(JNIEnv* env, jobject,
+ const SkBitmap* bitmap, jobject jbuffer) {
+ SkAutoLockPixels alp(*bitmap);
+ void* dst = bitmap->getPixels();
+
+ if (NULL != dst) {
+ android::AutoBufferPointer abp(env, jbuffer, JNI_FALSE);
+ // the java side has already checked that buffer is large enough
+ memcpy(dst, abp.pointer(), bitmap->getSize());
+ }
+}
+
///////////////////////////////////////////////////////////////////////////////
#include <android_runtime/AndroidRuntime.h>
@@ -538,7 +550,9 @@ static JNINativeMethod gBitmapMethods[] = { { "nativeSetPixel", "(IIII)V", (void*)Bitmap_setPixel },
{ "nativeSetPixels", "(I[IIIIIII)V", (void*)Bitmap_setPixels },
{ "nativeCopyPixelsToBuffer", "(ILjava/nio/Buffer;)V",
- (void*)Bitmap_copyPixelsToBuffer }
+ (void*)Bitmap_copyPixelsToBuffer },
+ { "nativeCopyPixelsFromBuffer", "(ILjava/nio/Buffer;)V",
+ (void*)Bitmap_copyPixelsFromBuffer }
};
#define kClassPathName "android/graphics/Bitmap"
@@ -546,16 +560,7 @@ static JNINativeMethod gBitmapMethods[] = { int register_android_graphics_Bitmap(JNIEnv* env);
int register_android_graphics_Bitmap(JNIEnv* env)
{
-#if 1
return android::AndroidRuntime::registerNativeMethods(env, kClassPathName,
gBitmapMethods, SK_ARRAY_COUNT(gBitmapMethods));
-#else
- short n = 0;
- int limit = (char*)env - (char*)0;
- for (int i = 0; i < limit; i++) {
- n += i*i;
- }
- return n;
-#endif
}
diff --git a/core/jni/android_server_BluetoothDeviceService.cpp b/core/jni/android_server_BluetoothDeviceService.cpp index 3ff6af1..61a4a26 100644 --- a/core/jni/android_server_BluetoothDeviceService.cpp +++ b/core/jni/android_server_BluetoothDeviceService.cpp @@ -378,12 +378,12 @@ static jint getDiscoverableTimeoutNative(JNIEnv *env, jobject object) { LOGV(__FUNCTION__); native_data_t *nat = get_native_data(env, object); if (nat) { - DBusMessage *reply = + DBusMessage *reply = dbus_func_args(env, nat->conn, nat->adapter, DBUS_CLASS_NAME, "GetDiscoverableTimeout", DBUS_TYPE_INVALID); return reply ? dbus_returns_uint32(env, reply) : -1; - } + } #endif return -1; } @@ -394,7 +394,7 @@ static jboolean isConnectedNative(JNIEnv *env, jobject object, jstring address) native_data_t *nat = get_native_data(env, object); if (nat) { const char *c_address = env->GetStringUTFChars(address, NULL); - DBusMessage *reply = + DBusMessage *reply = dbus_func_args(env, nat->conn, nat->adapter, DBUS_CLASS_NAME, "IsConnected", DBUS_TYPE_STRING, &c_address, @@ -412,12 +412,12 @@ static void disconnectRemoteDeviceNative(JNIEnv *env, jobject object, jstring ad native_data_t *nat = get_native_data(env, object); if (nat) { const char *c_address = env->GetStringUTFChars(address, NULL); - // Set a timeout of 5 seconds. Specifying the default timeout is - // not long enough, as a remote-device disconnect results in - // signal RemoteDisconnectRequested being sent, followed by a + // Set a timeout of 5 seconds. Specifying the default timeout is + // not long enough, as a remote-device disconnect results in + // signal RemoteDisconnectRequested being sent, followed by a // delay of 2 seconds, after which the actual disconnect takes // place. - DBusMessage *reply = + DBusMessage *reply = dbus_func_args_timeout(env, nat->conn, 60000, nat->adapter, DBUS_CLASS_NAME, "DisconnectRemoteDevice", DBUS_TYPE_STRING, &c_address, @@ -448,7 +448,7 @@ static jboolean isDiscoverableNative(JNIEnv *env, jobject object) { LOGV(__FUNCTION__); native_data_t *nat = get_native_data(env, object); if (nat) { - DBusMessage *reply = + DBusMessage *reply = dbus_func_args(env, nat->conn, nat->adapter, DBUS_CLASS_NAME, "IsDiscoverable", DBUS_TYPE_INVALID); @@ -463,7 +463,7 @@ static jstring getModeNative(JNIEnv *env, jobject object) { LOGV(__FUNCTION__); native_data_t *nat = get_native_data(env, object); if (nat) { - DBusMessage *reply = + DBusMessage *reply = dbus_func_args(env, nat->conn, nat->adapter, DBUS_CLASS_NAME, "GetMode", DBUS_TYPE_INVALID); @@ -551,25 +551,6 @@ static void removeBondingNative(JNIEnv *env, jobject object, jstring address) { common_Bonding(env, object, -1, "RemoveBonding", address); } -static jboolean hasBondingNative(JNIEnv *env, jobject object, jstring address) { -#ifdef HAVE_BLUETOOTH - LOGV(__FUNCTION__); - native_data_t *nat = get_native_data(env, object); - if (nat) { - const char *c_address = env->GetStringUTFChars(address, NULL); - LOGV("... address = %s", c_address); - DBusMessage *reply = - dbus_func_args(env, nat->conn, nat->adapter, - DBUS_CLASS_NAME, "HasBonding", - DBUS_TYPE_STRING, &c_address, - DBUS_TYPE_INVALID); - env->ReleaseStringUTFChars(address, c_address); - return reply ? dbus_returns_boolean(env, reply) : JNI_FALSE; - } -#endif - return JNI_FALSE; -} - static jobjectArray listBondingsNative(JNIEnv *env, jobject object) { #ifdef HAVE_BLUETOOTH LOGV(__FUNCTION__); @@ -763,7 +744,7 @@ static jboolean clearRemoteAliasNative(JNIEnv *env, jobject obj, jstring address native_data_t *nat = get_native_data(env, obj); if (nat) { const char *c_address = env->GetStringUTFChars(address, NULL); - + LOGV("... address = %s", c_address); DBusMessage *reply = dbus_func_args(env, nat->conn, nat->adapter, @@ -998,6 +979,7 @@ static jboolean getRemoteServiceChannelNative(JNIEnv *env, jobject object, static jint enableNative(JNIEnv *env, jobject object) { #ifdef HAVE_BLUETOOTH + LOGV(__FUNCTION__); return bt_enable(); #endif return -1; @@ -1005,6 +987,7 @@ static jint enableNative(JNIEnv *env, jobject object) { static jint disableNative(JNIEnv *env, jobject object) { #ifdef HAVE_BLUETOOTH + LOGV(__FUNCTION__); return bt_disable(); #endif return -1; @@ -1012,6 +995,7 @@ static jint disableNative(JNIEnv *env, jobject object) { static jint isEnabledNative(JNIEnv *env, jobject object) { #ifdef HAVE_BLUETOOTH + LOGV(__FUNCTION__); return bt_is_enabled(); #endif return -1; @@ -1113,7 +1097,6 @@ static JNINativeMethod sMethods[] = { {"createBondingNative", "(Ljava/lang/String;I)Z", (void *)createBondingNative}, {"cancelBondingProcessNative", "(Ljava/lang/String;)Z", (void *)cancelBondingProcessNative}, {"listBondingsNative", "()[Ljava/lang/String;", (void *)listBondingsNative}, - {"hasBondingNative", "(Ljava/lang/String;)Z", (void *)hasBondingNative}, {"removeBondingNative", "(Ljava/lang/String;)Z", (void *)removeBondingNative}, {"getRemoteNameNative", "(Ljava/lang/String;)Ljava/lang/String;", (void *)getRemoteNameNative}, diff --git a/core/jni/android_server_BluetoothEventLoop.cpp b/core/jni/android_server_BluetoothEventLoop.cpp index 1aef138..3468265 100644 --- a/core/jni/android_server_BluetoothEventLoop.cpp +++ b/core/jni/android_server_BluetoothEventLoop.cpp @@ -92,7 +92,7 @@ static void classInitNative(JNIEnv* env, jclass clazz) { method_onBondingCreated = env->GetMethodID(clazz, "onBondingCreated", "(Ljava/lang/String;)V"); method_onBondingRemoved = env->GetMethodID(clazz, "onBondingRemoved", "(Ljava/lang/String;)V"); - method_onCreateBondingResult = env->GetMethodID(clazz, "onCreateBondingResult", "(Ljava/lang/String;Z)V"); + method_onCreateBondingResult = env->GetMethodID(clazz, "onCreateBondingResult", "(Ljava/lang/String;I)V"); method_onPasskeyAgentRequest = env->GetMethodID(clazz, "onPasskeyAgentRequest", "(Ljava/lang/String;I)V"); method_onPasskeyAgentCancel = env->GetMethodID(clazz, "onPasskeyAgentCancel", "(Ljava/lang/String;)V"); @@ -609,6 +609,12 @@ static jboolean waitForAndDispatchEventNative(JNIEnv *env, jobject object, } #ifdef HAVE_BLUETOOTH +//TODO: Unify result codes in a header +#define BOND_RESULT_ERROR -1000 +#define BOND_RESULT_SUCCESS 0 +#define BOND_RESULT_AUTH_FAILED 1 +#define BOND_RESULT_AUTH_REJECTED 2 +#define BOND_RESULT_REMOTE_DEVICE_DOWN 3 void onCreateBondingResult(DBusMessage *msg, void *user) { LOGV(__FUNCTION__); @@ -619,11 +625,26 @@ void onCreateBondingResult(DBusMessage *msg, void *user) { LOGV("... address = %s", address); - jboolean result = JNI_TRUE; + jint result = BOND_RESULT_SUCCESS; if (dbus_set_error_from_message(&err, msg)) { - /* if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.AuthenticationFailed")) */ - LOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message); - result = JNI_FALSE; + if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.AuthenticationFailed")) { + // Pins did not match, or remote device did not respond to pin + // request in time + LOGV("... error = %s (%s)\n", err.name, err.message); + result = BOND_RESULT_AUTH_FAILED; + } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".Error.AuthenticationRejected")) { + // We rejected pairing, or the remote side rejected pairing. This + // happens if either side presses 'cancel' at the pairing dialog. + LOGV("... error = %s (%s)\n", err.name, err.message); + result = BOND_RESULT_AUTH_REJECTED; + } else if (!strcmp(err.name, BLUEZ_DBUS_BASE_IFC ".ConnectionAttemptFailed")) { + // Other device is not responding at all + LOGV("... error = %s (%s)\n", err.name, err.message); + result = BOND_RESULT_REMOTE_DEVICE_DOWN; + } else { + LOGE("%s: D-Bus error: %s (%s)\n", __FUNCTION__, err.name, err.message); + result = BOND_RESULT_ERROR; + } dbus_error_free(&err); } |