summaryrefslogtreecommitdiffstats
path: root/src/bluetooth/android/localdevicebroadcastreceiver.cpp
diff options
context:
space:
mode:
authorAlex Blasche <alexander.blasche@digia.com>2014-03-03 13:45:04 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-11 10:58:35 +0100
commitb2cd03fb14c9727e23d5ada409551ab236d1abc6 (patch)
treecf81bfc2da2a9f5148cee8e1c5a8aa96a99bc4a7 /src/bluetooth/android/localdevicebroadcastreceiver.cpp
parent6106ea0ebf52845a34a291a44730e81d4a3e9108 (diff)
Android: Don't directly use the action string values but refer to the fields.
This increases the robustness of the code since the field value is not an implementation detail. In addition we guard the action field lookup against fields which have been introduced later than the standard SDK version 10 supported by Qt. Task-number: QTBUG-36810 Change-Id: Ib6582e77202d40aaf116fe8dfa81562d89367ea2 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
Diffstat (limited to 'src/bluetooth/android/localdevicebroadcastreceiver.cpp')
-rw-r--r--src/bluetooth/android/localdevicebroadcastreceiver.cpp69
1 files changed, 38 insertions, 31 deletions
diff --git a/src/bluetooth/android/localdevicebroadcastreceiver.cpp b/src/bluetooth/android/localdevicebroadcastreceiver.cpp
index 0e81ef22..c221a7cc 100644
--- a/src/bluetooth/android/localdevicebroadcastreceiver.cpp
+++ b/src/bluetooth/android/localdevicebroadcastreceiver.cpp
@@ -40,7 +40,9 @@
****************************************************************************/
#include <QtCore/QLoggingCategory>
+#include <QtCore/private/qjnihelpers_p.h>
#include "localdevicebroadcastreceiver_p.h"
+#include "android/jni_android_p.h"
QT_BEGIN_NAMESPACE
@@ -49,12 +51,12 @@ Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
LocalDeviceBroadcastReceiver::LocalDeviceBroadcastReceiver(QObject *parent) :
AndroidBroadcastReceiver(parent), previousScanMode(0)
{
- addAction(QStringLiteral("android.bluetooth.device.action.BOND_STATE_CHANGED"));
- addAction(QStringLiteral("android.bluetooth.adapter.action.SCAN_MODE_CHANGED"));
- addAction(QStringLiteral("android.bluetooth.device.action.ACL_CONNECTED"));
- addAction(QStringLiteral("android.bluetooth.device.action.ACL_DISCONNECTED"));
- addAction(QStringLiteral("android.bluetooth.device.action.PAIRING_REQUEST")); //API 19
-
+ addAction(valueForStaticField(JavaNames::BluetoothDevice, JavaNames::ActionBondStateChanged));
+ addAction(valueForStaticField(JavaNames::BluetoothAdapter, JavaNames::ActionScanModeChanged));
+ addAction(valueForStaticField(JavaNames::BluetoothDevice, JavaNames::ActionAclConnected));
+ addAction(valueForStaticField(JavaNames::BluetoothDevice, JavaNames::ActionAclDisconnected));
+ if (QtAndroidPrivate::androidSdkVersion() >= 19)
+ addAction(valueForStaticField(JavaNames::BluetoothDevice, JavaNames::ActionPairingRequest)); //API 19
}
void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobject intent)
@@ -66,11 +68,13 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje
const QString action = intentObject.callObjectMethod("getAction", "()Ljava/lang/String;").toString();
qCDebug(QT_BT_ANDROID) << QStringLiteral("LocalDeviceBroadcastReceiver::onReceive() - event: %1").arg(action);
- if (action == QStringLiteral("android.bluetooth.adapter.action.SCAN_MODE_CHANGED")) {
- QAndroidJniObject extrasBundle =
+ if (action == valueForStaticField(JavaNames::BluetoothAdapter,
+ JavaNames::ActionScanModeChanged).toString()) {
+
+ const QAndroidJniObject extrasBundle =
intentObject.callObjectMethod("getExtras","()Landroid/os/Bundle;");
- QAndroidJniObject keyExtra = QAndroidJniObject::fromString(
- QStringLiteral("android.bluetooth.adapter.extra.SCAN_MODE"));
+ const QAndroidJniObject keyExtra = valueForStaticField(JavaNames::BluetoothAdapter,
+ JavaNames::ExtraScanMode);
int extra = extrasBundle.callMethod<jint>("getInt",
"(Ljava/lang/String;)I",
@@ -94,19 +98,19 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje
break;
}
}
- } else if (action == QStringLiteral("android.bluetooth.device.action.BOND_STATE_CHANGED")) {
+ } else if (action == valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ActionBondStateChanged).toString()) {
//get BluetoothDevice
- QAndroidJniObject keyExtra = QAndroidJniObject::fromString(
- QStringLiteral("android.bluetooth.device.extra.DEVICE"));
- QAndroidJniObject bluetoothDevice =
+ QAndroidJniObject keyExtra = valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ExtraDevice);
+ const QAndroidJniObject bluetoothDevice =
intentObject.callObjectMethod("getParcelableExtra",
"(Ljava/lang/String;)Landroid/os/Parcelable;",
keyExtra.object<jstring>());
//get new bond state
- keyExtra = QAndroidJniObject::fromString(
- QStringLiteral("android.bluetooth.device.extra.BOND_STATE"));
- QAndroidJniObject extrasBundle =
+ keyExtra = valueForStaticField(JavaNames::BluetoothDevice, JavaNames::ExtraBondState);
+ const QAndroidJniObject extrasBundle =
intentObject.callObjectMethod("getExtras","()Landroid/os/Bundle;");
int bondState = extrasBundle.callMethod<jint>("getInt",
"(Ljava/lang/String;)I",
@@ -128,17 +132,20 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje
break;
default:
qCWarning(QT_BT_ANDROID) << "Unknown BOND_STATE_CHANGED value:" << bondState;
- break;
- }
- } else if (action == QStringLiteral("android.bluetooth.device.action.ACL_DISCONNECTED") ||
- action == QStringLiteral("android.bluetooth.device.action.ACL_CONNECTED")) {
+ } else if (action == valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ActionAclConnected).toString() ||
+ action == valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ActionAclDisconnected).toString()) {
+
+ const QString connectEvent = valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ActionAclConnected).toString();
const bool isConnectEvent =
- action == QStringLiteral("android.bluetooth.device.action.ACL_CONNECTED") ? true : false;
+ action == connectEvent ? true : false;
//get BluetoothDevice
- QAndroidJniObject keyExtra = QAndroidJniObject::fromString(
- QStringLiteral("android.bluetooth.device.extra.DEVICE"));
+ const QAndroidJniObject keyExtra = valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ExtraDevice);
QAndroidJniObject bluetoothDevice =
intentObject.callObjectMethod("getParcelableExtra",
"(Ljava/lang/String;)Landroid/os/Parcelable;",
@@ -149,10 +156,11 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje
return;
emit connectDeviceChanges(address, isConnectEvent);
- } else if (action == QStringLiteral("android.bluetooth.device.action.PAIRING_REQUEST")) {
+ } else if (action == valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ActionPairingRequest).toString()) {
- QAndroidJniObject keyExtra = QAndroidJniObject::fromString(
- QStringLiteral("android.bluetooth.device.extra.PAIRING_VARIANT"));
+ QAndroidJniObject keyExtra = valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ExtraPairingVariant);
int variant = intentObject.callMethod<jint>("getIntExtra",
"(Ljava/lang/String;I)I",
keyExtra.object<jstring>(),
@@ -164,8 +172,8 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje
return;
case 2: //BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION
{
- keyExtra = QAndroidJniObject::fromString(
- QStringLiteral("android.bluetooth.device.extra.PAIRING_KEY"));
+ keyExtra = valueForStaticField(JavaNames::BluetoothDevice,
+ JavaNames::ExtraPairingKey);
key = intentObject.callMethod<jint>("getIntExtra",
"(Ljava/lang/String;I)I",
keyExtra.object<jstring>(),
@@ -173,8 +181,7 @@ void LocalDeviceBroadcastReceiver::onReceive(JNIEnv *env, jobject context, jobje
if (key == -1)
return;
- keyExtra = QAndroidJniObject::fromString(
- QStringLiteral("android.bluetooth.device.extra.DEVICE"));
+ keyExtra = valueForStaticField(JavaNames::BluetoothDevice, JavaNames::ExtraDevice);
QAndroidJniObject bluetoothDevice =
intentObject.callObjectMethod("getParcelableExtra",
"(Ljava/lang/String;)Landroid/os/Parcelable;",