OSDN Git Service

AI 143740: Don't clear supported profiles in settings app if getRemoteClass returns...
authorNick Pelly <>
Tue, 31 Mar 2009 19:05:46 +0000 (12:05 -0700)
committerThe Android Open Source Project <initial-contribution@android.com>
Tue, 31 Mar 2009 19:05:46 +0000 (12:05 -0700)
  Also clean up the error codes returned by the framework, so that the settings app can properly detect an error.
  BUG=1748881

Automated import of CL 143740

core/java/android/bluetooth/BluetoothDevice.java
core/java/android/server/BluetoothDeviceService.java
core/jni/android_server_BluetoothDeviceService.cpp

index abf08cb..951b4b0 100644 (file)
@@ -485,7 +485,8 @@ public class BluetoothDevice {
      * Get the major, minor and servics classes of a remote device.
      * These classes are encoded as a 32-bit integer. See BluetoothClass.
      * @param address remote device
-     * @return 32-bit class suitable for use with BluetoothClass.
+     * @return 32-bit class suitable for use with BluetoothClass, or
+     *         BluetoothClass.ERROR on error
      */
     public int getRemoteClass(String address) {
         try {
index f1a7d25..8e5cee9 100644 (file)
@@ -24,6 +24,7 @@
 
 package android.server;
 
+import android.bluetooth.BluetoothClass;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothError;
 import android.bluetooth.BluetoothHeadset;
@@ -970,8 +971,8 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub {
      */
     public synchronized int getRemoteClass(String address) {
         if (!BluetoothDevice.checkBluetoothAddress(address)) {
-        mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
-            return -1;
+            mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
+            return BluetoothClass.ERROR;
         }
         return getRemoteClassNative(address);
     }
@@ -1254,4 +1255,3 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub {
         Log.d(TAG, msg);
     }
 }
-
index 796da15..a0e0b84 100644 (file)
@@ -44,6 +44,8 @@
 
 namespace android {
 
+#define BLUETOOTH_CLASS_ERROR 0xFF000000
+
 #ifdef HAVE_BLUETOOTH
 // We initialize these variables when we load class
 // android.server.BluetoothDeviceService
@@ -724,11 +726,11 @@ static jstring lastUsedNative(JNIEnv *env, jobject obj, jstring address) {
 }
 
 static jint getRemoteClassNative(JNIEnv *env, jobject object, jstring address) {
+    jint result = BLUETOOTH_CLASS_ERROR;
 #ifdef HAVE_BLUETOOTH
     LOGV(__FUNCTION__);
     native_data_t *nat = get_native_data(env, object);
     if (nat) {
-        jint ret = 0;
         const char *c_address = env->GetStringUTFChars(address, NULL);
 
         LOGV("... address = %s", c_address);
@@ -744,17 +746,15 @@ static jint getRemoteClassNative(JNIEnv *env, jobject object, jstring address) {
             DBusError err;
             dbus_error_init(&err);
             if (!dbus_message_get_args(reply, &err,
-                                      DBUS_TYPE_UINT32, &ret,
+                                      DBUS_TYPE_UINT32, &result,
                                       DBUS_TYPE_INVALID)) {
                 LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, reply);
             }
             dbus_message_unref(reply);
         }
-
-        return ret;
     }
 #endif
-    return 0;
+    return result;
 }
 
 static jbyteArray getRemoteFeaturesNative(JNIEnv *env, jobject object,