summaryrefslogtreecommitdiffstats
path: root/core/jni
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-01-22 00:13:42 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-01-22 00:13:42 -0800
commitf1e484acb594a726fb57ad0ae4cfe902c7f35858 (patch)
tree99d2b34512f0dc2ae67666e756c1cfcd331e5fe3 /core/jni
parent22f7dfd23490a3de2f21ff96949ba47003aac8f8 (diff)
downloadframeworks_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.cpp25
-rw-r--r--core/jni/android_server_BluetoothDeviceService.cpp43
-rw-r--r--core/jni/android_server_BluetoothEventLoop.cpp31
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);
}