Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-connectivity for openSUSE:Factory checked in at 2026-10-18 19:21:18 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-connectivity (Old) and /work/SRC/openSUSE:Factory/.qt6-connectivity.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-connectivity" Sun Oct 18 19:21:18 2026 rev:41 rq:1384388 version:6.12.0 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-connectivity/qt6-connectivity.changes 2026-08-21 16:51:29.664072981 +0200 +++ /work/SRC/openSUSE:Factory/.qt6-connectivity.new.3698736/qt6-connectivity.changes 2026-10-18 19:21:20.750838712 +0200 @@ -1,0 +2,6 @@ +Wed Sep 30 16:09:01 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.12.0 + https://www.qt.io/blog/qt-6.12-released + +------------------------------------------------------------------- Old: ---- qtconnectivity-everywhere-src-6.11.2.tar.xz New: ---- qtconnectivity-everywhere-src-6.12.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-connectivity.spec ++++++ --- /var/tmp/diff_new_pack.yZEg4Y/_old 2026-10-18 19:21:21.562872424 +0200 +++ /var/tmp/diff_new_pack.yZEg4Y/_new 2026-10-18 19:21:21.563872465 +0200 @@ -16,8 +16,8 @@ # -%define real_version 6.11.2 -%define short_version 6.11 +%define real_version 6.12.0 +%define short_version 6.12 %define tar_name qtconnectivity-everywhere-src %define tar_suffix %{nil} # @@ -30,7 +30,7 @@ %global __requires_exclude qt6qmlimport\\((HeartRateGame|NdefEditor.*)\\) # Name: qt6-connectivity%{?pkg_suffix} -Version: 6.11.2 +Version: 6.12.0 Release: 0 Summary: Qt 6 connectivity tools and libraries License: GPL-2.0-only OR LGPL-3.0-only OR GPL-3.0-only ++++++ qtconnectivity-everywhere-src-6.11.2.tar.xz -> qtconnectivity-everywhere-src-6.12.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/.cmake.conf new/qtconnectivity-everywhere-src-6.12.0/.cmake.conf --- old/qtconnectivity-everywhere-src-6.11.2/.cmake.conf 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/.cmake.conf 2026-09-26 16:27:01.000000000 +0200 @@ -1,7 +1,8 @@ -set(QT_REPO_MODULE_VERSION "6.11.2") +set(QT_REPO_MODULE_VERSION "6.12.0") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1" + "QT_NO_DISCONNECT_CONST_CONNECTION=1" "QT_NO_FOREACH=1" "QT_NO_QASCONST=1" "QT_NO_QSNPRINTF=1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/.tag new/qtconnectivity-everywhere-src-6.12.0/.tag --- old/qtconnectivity-everywhere-src-6.11.2/.tag 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/.tag 2026-09-26 16:27:01.000000000 +0200 @@ -1 +1 @@ -9b5ce15c2938d902188bc29833f6c5ba36ed8d8f +2340c1f3ced364314228d8f64a86e8c7d32717f7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/CONTRIBUTING.md new/qtconnectivity-everywhere-src-6.12.0/CONTRIBUTING.md --- old/qtconnectivity-everywhere-src-6.11.2/CONTRIBUTING.md 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/CONTRIBUTING.md 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,11 @@ +## Qt contribution guidelines + +We welcome contributions to Qt! + +Note that we cannot accept pull requests on GitHub. All contributions +to the Qt project are exclusively handled through the +[Gerrit code review system](https://codereview.qt-project.org). + +See +[contribute.qt-project.org](https://contribute.qt-project.org/) to learn +more. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/REUSE.toml new/qtconnectivity-everywhere-src-6.12.0/REUSE.toml --- old/qtconnectivity-everywhere-src-6.11.2/REUSE.toml 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/REUSE.toml 2026-09-26 16:27:01.000000000 +0200 @@ -8,14 +8,6 @@ SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR GPL-3.0-only" [[annotations]] -path = ["src/android/bluetooth/AndroidManifest.xml", - "src/android/nfc/AndroidManifest.xml"] -precedence = "closest" -comment = "modile anf plugins" -SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." -SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only" - -[[annotations]] path = ["**.pro", ".cmake.conf", "**.yaml", "**.cfg", "**.plist", "**CMakeLists.txt", "**ci_config_linux.json", ".tag"] precedence = "closest" @@ -38,7 +30,8 @@ SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause" [[annotations]] -path = ["**/doc/images/**", "**/README*", "**.qdocconf", "src/nfc/ApiChangesQt6.txt"] +path = ["**/doc/images/**", "**/README*", "CONTRIBUTING.md", "**.qdocconf", + "src/nfc/ApiChangesQt6.txt"] comment = "documentation" precedence = "closest" SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." @@ -52,9 +45,17 @@ SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause" [[annotations]] +path = ["src/**/build.gradle", "src/**/settings.gradle", + "src/**/gradle.properties", "src/**/libs.versions.toml"] +precedence = "override" +comment = "build system" +SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." +SPDX-License-Identifier = "BSD-3-Clause" + + +[[annotations]] path = ["**/qt_attribution.json"] comment = "documentation" precedence = "override" SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd." SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only" - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/cmake/FindPCSCLITE.cmake new/qtconnectivity-everywhere-src-6.12.0/cmake/FindPCSCLITE.cmake --- old/qtconnectivity-everywhere-src-6.11.2/cmake/FindPCSCLITE.cmake 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/cmake/FindPCSCLITE.cmake 2026-09-26 16:27:01.000000000 +0200 @@ -1,6 +1,11 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause +if(TARGET PkgConfig::PCSCLITE) + set(PCSCLITE_FOUND 1) + return() +endif() + if(WIN32) add_library(PkgConfig::PCSCLITE INTERFACE IMPORTED) target_link_libraries(PkgConfig::PCSCLITE INTERFACE winscard) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/dependencies.yaml new/qtconnectivity-everywhere-src-6.12.0/dependencies.yaml --- old/qtconnectivity-everywhere-src-6.11.2/dependencies.yaml 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/dependencies.yaml 2026-09-26 16:27:01.000000000 +0200 @@ -1,7 +1,7 @@ dependencies: ../qtbase: - ref: ef55f427f2c8b410d34f8a7681020a3000cf6866 + ref: 025bdad181de241e81bf853c8a2d7bf3d19261a9 required: true ../qtdeclarative: - ref: 4e3399c26ec57246c08de019cfcbda8d23604cfa + ref: 4332fbbb4c340463dc8cee36dda0c85d932122d8 required: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/licenseRule.json new/qtconnectivity-everywhere-src-6.12.0/licenseRule.json --- old/qtconnectivity-everywhere-src-6.11.2/licenseRule.json 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/licenseRule.json 2026-09-26 16:27:01.000000000 +0200 @@ -58,8 +58,9 @@ }, { "comment": "Files with the following endings are Documentation licensed.", - "file_pattern_ending": [".qdoc", ".qdocinc" , ".qdocconf", "README", "qt_attribution.json", - "README.md", "ApiChangesQt6.txt", "README.txt"], + "file_pattern_ending": [".qdoc", ".qdocinc" , ".qdocconf", + "README", "README.md", "README.txt", "CONTRIBUTING.md", + "ApiChangesQt6.txt", "qt_attribution.json"], "location":{ "": { "comment": "", @@ -123,6 +124,11 @@ "comment": "", "file type": "3rd party", "spdx": ["Apache-2.0"] + }, + ".*(\\.gradle|gradle\\.properties|libs\\.versions\\.toml)$": { + "comment": "Android Gradle build files", + "file type": "build system", + "spdx": ["BSD-3-Clause"] } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/AndroidManifest.xml new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/AndroidManifest.xml --- old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/AndroidManifest.xml 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/AndroidManifest.xml 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - android:versionCode="1" - android:versionName="1.0" - package="org.qtproject.qt.android.bluetooth"> - <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> -</manifest> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/CMakeLists.txt new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/CMakeLists.txt --- old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/CMakeLists.txt 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/CMakeLists.txt 2026-09-26 16:27:01.000000000 +0200 @@ -13,7 +13,6 @@ ) qt_internal_add_jar(Qt${QtConnectivity_VERSION_MAJOR}AndroidBluetooth - INCLUDE_JARS ${QT_ANDROID_JAR} SOURCES ${java_sources} OUTPUT_DIR "${QT_BUILD_DIR}/jar" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/build.gradle new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/build.gradle --- old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/build.gradle 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/build.gradle 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,18 @@ +plugins { + alias(libs.plugins.android.library) +} + +android { + namespace = 'org.qtproject.qt.android.bluetooth' + compileSdk = (project.findProperty('compileSdk') ?: '36') as int + + defaultConfig { + minSdk = (project.findProperty('minSdk') ?: '28') as int + } + + sourceSets { + main { + java.srcDirs = ['src'] + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/gradle/libs.versions.toml new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/gradle/libs.versions.toml --- old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/gradle/libs.versions.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/gradle/libs.versions.toml 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,5 @@ +[versions] +agp = "9.2.1" + +[plugins] +android-library = { id = "com.android.library", version.ref = "agp" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/gradle.properties new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/gradle.properties --- old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/gradle.properties 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/gradle.properties 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,15 @@ +# Project-wide Gradle settings. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx3200m -XX:MaxMetaspaceSize=768m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# Enable building projects in parallel +org.gradle.parallel=true + +# Allow AndroidX usage +android.useAndroidX=true + +# Enable caching +org.gradle.configuration-cache=true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/settings.gradle new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/settings.gradle --- old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/settings.gradle 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/settings.gradle 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = 'Qt6AndroidBluetooth' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java --- old/qtconnectivity-everywhere-src-6.11.2/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/bluetooth/src/org/qtproject/qt/android/bluetooth/QtBluetoothLEServer.java 2026-09-26 16:27:01.000000000 +0200 @@ -14,9 +14,10 @@ import android.bluetooth.BluetoothGattServerCallback; import android.bluetooth.BluetoothManager; import android.bluetooth.BluetoothProfile; -import android.bluetooth.le.AdvertiseCallback; +import android.bluetooth.le.AdvertisingSet; +import android.bluetooth.le.AdvertisingSetCallback; +import android.bluetooth.le.AdvertisingSetParameters; import android.bluetooth.le.AdvertiseData; -import android.bluetooth.le.AdvertiseSettings; import android.bluetooth.le.BluetoothLeAdvertiser; import android.os.Build; import android.util.Log; @@ -742,9 +743,17 @@ } // This function is called from Qt thread + boolean isLeExtendedAdvertisingSupported() + { + if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) + return false; + return mBluetoothAdapter.isLeExtendedAdvertisingSupported(); + } + + // This function is called from Qt thread boolean startAdvertising(AdvertiseData advertiseData, - AdvertiseData scanResponse, - AdvertiseSettings settings) + AdvertiseData scanResponse, + AdvertisingSetParameters settings) { // Check that the bluetooth is on if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { @@ -766,9 +775,15 @@ return false; } - Log.w(TAG, "Starting to advertise."); - mLeAdvertiser.startAdvertising(settings, advertiseData, scanResponse, mAdvertiseListener); + try { + mLeAdvertiser.startAdvertisingSet(settings, advertiseData, scanResponse, + null, null, mAdvertiseSetListener); + } catch (IllegalArgumentException e) { + Log.w(TAG, "Server::startAdvertising: Illegal parameters"); + return false; + } + Log.w(TAG, "Starting to advertise."); return true; } @@ -778,7 +793,7 @@ if (mLeAdvertiser == null) return; - mLeAdvertiser.stopAdvertising(mAdvertiseListener); + mLeAdvertiser.stopAdvertisingSet(mAdvertiseSetListener); Log.w(TAG, "Advertisement stopped."); } @@ -944,37 +959,33 @@ } /* - * Call back handler for Advertisement requests. + * Call back handler for AdvertisingSet requests. */ - private AdvertiseCallback mAdvertiseListener = new AdvertiseCallback() + private AdvertisingSetCallback mAdvertiseSetListener = new AdvertisingSetCallback() { @Override - public void onStartSuccess(AdvertiseSettings settingsInEffect) { - super.onStartSuccess(settingsInEffect); - } - - @Override - public void onStartFailure(int errorCode) { - Log.e(TAG, "Advertising failure: " + errorCode); - super.onStartFailure(errorCode); + public void onAdvertisingSetStarted(AdvertisingSet advSet, int txPower, int status) + { + super.onAdvertisingSetStarted(advSet, txPower, status); // changing errorCode here implies changes to errorCode handling on Qt side int qtErrorCode = 0; - switch (errorCode) { - case AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED: + switch (status) { + case AdvertisingSetCallback.ADVERTISE_SUCCESS: + case AdvertisingSetCallback.ADVERTISE_FAILED_ALREADY_STARTED: return; // ignore -> noop - case AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE: - Log.e(TAG, "Please reduce size of advertising data."); + case AdvertisingSetCallback.ADVERTISE_FAILED_DATA_TOO_LARGE: + Log.e(TAG, "Please reduce the size of the advertising data."); qtErrorCode = 1; break; - case AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED: + case AdvertisingSetCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED: qtErrorCode = 2; break; default: // default maps to internal error - case AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR: + case AdvertisingSetCallback.ADVERTISE_FAILED_INTERNAL_ERROR: qtErrorCode = 3; break; - case AdvertiseCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS: + case AdvertisingSetCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS: qtErrorCode = 4; break; } @@ -982,6 +993,13 @@ if (qtErrorCode > 0) leServerAdvertisementError(qtObject, qtErrorCode); } + + @Override + public void onAdvertisingSetStopped(AdvertisingSet advSet) + { + // Nothing to do + super.onAdvertisingSetStopped(advSet); + } }; native void leConnectionStateChange(long qtObject, int errorCode, int newState); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/AndroidManifest.xml new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/AndroidManifest.xml --- old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/AndroidManifest.xml 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/AndroidManifest.xml 1970-01-01 01:00:00.000000000 +0100 @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="org.qtproject.qt.android.nfc" - android:versionCode="1" - android:versionName="1.0"> - <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/> -</manifest> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/CMakeLists.txt new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/CMakeLists.txt --- old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/CMakeLists.txt 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/CMakeLists.txt 2026-09-26 16:27:01.000000000 +0200 @@ -7,7 +7,6 @@ ) qt_internal_add_jar(Qt${QtConnectivity_VERSION_MAJOR}AndroidNfc - INCLUDE_JARS ${QT_ANDROID_JAR} SOURCES ${java_sources} OUTPUT_DIR "${QT_BUILD_DIR}/jar" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/build.gradle new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/build.gradle --- old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/build.gradle 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/build.gradle 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,18 @@ +plugins { + alias(libs.plugins.android.library) +} + +android { + namespace = 'org.qtproject.qt.android.nfc' + compileSdk = (project.findProperty('compileSdk') ?: '36') as int + + defaultConfig { + minSdk = (project.findProperty('minSdk') ?: '28') as int + } + + sourceSets { + main { + java.srcDirs = ['src'] + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/gradle/libs.versions.toml new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/gradle/libs.versions.toml --- old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/gradle/libs.versions.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/gradle/libs.versions.toml 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,5 @@ +[versions] +agp = "9.2.1" + +[plugins] +android-library = { id = "com.android.library", version.ref = "agp" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/gradle.properties new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/gradle.properties --- old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/gradle.properties 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/gradle.properties 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,15 @@ +# Project-wide Gradle settings. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx3200m -XX:MaxMetaspaceSize=768m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# Enable building projects in parallel +org.gradle.parallel=true + +# Allow AndroidX usage +android.useAndroidX=true + +# Enable caching +org.gradle.configuration-cache=true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/settings.gradle new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/settings.gradle --- old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/settings.gradle 1970-01-01 01:00:00.000000000 +0100 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/settings.gradle 2026-09-26 16:27:01.000000000 +0200 @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + } +} + +rootProject.name = 'Qt6AndroidNfc' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/src/org/qtproject/qt/android/nfc/QtNfc.java new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/src/org/qtproject/qt/android/nfc/QtNfc.java --- old/qtconnectivity-everywhere-src-6.11.2/src/android/nfc/src/org/qtproject/qt/android/nfc/QtNfc.java 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/android/nfc/src/org/qtproject/qt/android/nfc/QtNfc.java 2026-09-26 16:27:01.000000000 +0200 @@ -23,12 +23,10 @@ static private final String TAG = "QtNfc"; static private NfcAdapter m_adapter = null; static private PendingIntent m_pendingIntent = null; - static private Context m_context = null; static private Activity m_activity = null; static void setContext(Context context) { - m_context = context; if (context instanceof Activity) m_activity = (Activity) context; m_adapter = NfcAdapter.getDefaultAdapter(context); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/CMakeLists.txt new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/CMakeLists.txt --- old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/CMakeLists.txt 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/CMakeLists.txt 2026-09-26 16:27:01.000000000 +0200 @@ -266,6 +266,20 @@ PRIVATE_MODULE_INTERFACE Qt::CorePrivate ) +elseif(OHOS) + qt_internal_extend_target(Bluetooth + SOURCES + dummy/dummy_helper.cpp dummy/dummy_helper_p.h + qbluetoothdevicediscoveryagent_p.cpp + qbluetoothlocaldevice_p.cpp + qbluetoothserver_p.cpp + qbluetoothservicediscoveryagent_p.cpp + qbluetoothserviceinfo_p.cpp + qbluetoothsocket_dummy.cpp qbluetoothsocket_dummy_p.h + qlowenergycontroller_dummy.cpp qlowenergycontroller_dummy_p.h + DEFINES + QT_OHOS_BLUETOOTH + ) else() qt_internal_extend_target(Bluetooth SOURCES diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/android/jni_android_p.h new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/android/jni_android_p.h --- old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/android/jni_android_p.h 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/android/jni_android_p.h 2026-09-26 16:27:01.000000000 +0200 @@ -39,7 +39,6 @@ Q_DECLARE_JNI_CLASS(BluetoothAdapter, "android/bluetooth/BluetoothAdapter") Q_DECLARE_JNI_CLASS(ParcelUuid, "android/os/ParcelUuid") Q_DECLARE_JNI_CLASS(AdvertiseDataBuilder, "android/bluetooth/le/AdvertiseData$Builder") -Q_DECLARE_JNI_CLASS(AdvertiseSettingsBuilder, "android/bluetooth/le/AdvertiseSettings$Builder") Q_DECLARE_JNI_CLASS(BluetoothGattService, "android/bluetooth/BluetoothGattService") Q_DECLARE_JNI_CLASS(BluetoothGattDescriptor, "android/bluetooth/BluetoothGattDescriptor") Q_DECLARE_JNI_CLASS(BluetoothGattCharacteristic, "android/bluetooth/BluetoothGattCharacteristic") @@ -50,7 +49,6 @@ Q_DECLARE_JNI_CLASS(BluetoothManager, "android/bluetooth/BluetoothManager") Q_DECLARE_JNI_CLASS(AdvertiseData, "android/bluetooth/le/AdvertiseData") -Q_DECLARE_JNI_CLASS(AdvertiseSettings, "android/bluetooth/le/AdvertiseSettings") Q_DECLARE_JNI_CLASS(InputStream, "java/io/InputStream") Q_DECLARE_JNI_CLASS(OutputStream, "java/io/OutputStream") Q_DECLARE_JNI_CLASS(BluetoothSocket, "android/bluetooth/BluetoothSocket") @@ -59,6 +57,10 @@ Q_DECLARE_JNI_CLASS(Bundle, "android/os/Bundle") Q_DECLARE_JNI_CLASS(List, "java/util/List") +Q_DECLARE_JNI_CLASS(AdvertisingSetParameters, "android/bluetooth/le/AdvertisingSetParameters") +Q_DECLARE_JNI_CLASS(AdvertisingSetParametersBuilder, + "android/bluetooth/le/AdvertisingSetParameters$Builder") + // QLowEnergyHandle is a quint16, ensure it is interpreted as jint template<> constexpr auto QtJniTypes::Traits<QLowEnergyHandle>::signature() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qbluetoothdevicediscoveryagent_winrt.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -544,7 +544,13 @@ // That is because Windows will always report paired devices, even if // they are not physically available. This is a sub-optimal approach, // but looks like we cannot do better... - const bool isCached = device.DeviceInformation().Pairing().IsPaired(); + const auto deviceInfo = SAFE(device.DeviceInformation()); + if (!deviceInfo) { + qCDebug(QT_BT_WINDOWS) << "Failed to obtain DeviceInformation for Classic device"; + invokeDecrementPendingDevicesCountAndCheckFinished(shared_from_this()); + return; + } + const bool isCached = SAFE(deviceInfo.Pairing().IsPaired()); auto thisPtr = shared_from_this(); auto asyncOp = device.GetRfcommServicesAsync(); @@ -651,7 +657,15 @@ } const std::wstring name { SAFE(device.Name()) }; // via operator std::wstring_view() const QString btName = QString::fromStdWString(name); - const bool isPaired = SAFE(device.DeviceInformation().Pairing().IsPaired()); + + const auto deviceInfo = SAFE(device.DeviceInformation()); + if (!deviceInfo) { + qCDebug(QT_BT_WINDOWS) << "Failed to obtain DeviceInformation for LE device"; + invokeDecrementPendingDevicesCountAndCheckFinished(shared_from_this()); + return; + } + + const bool isPaired = SAFE(deviceInfo.Pairing().IsPaired()); m_leDevicesMutex.lock(); const LEAdvertisingInfo adInfo = m_foundLEDevicesMap.value(address); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qbluetoothservicediscoveryagent_bluez.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -105,7 +105,7 @@ Q_Q(QBluetoothServiceDiscoveryAgent); if (!sdpScannerProcess) { - const QString binPath = QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath); + const QString binPath = QLibraryInfo::paths(QLibraryInfo::LibraryExecutablesPath).value(0); QFileInfo fileInfo(binPath, QStringLiteral("sdpscanner")); if (!fileInfo.exists() || !fileInfo.isExecutable()) { _q_finishSdpScan(QBluetoothServiceDiscoveryAgent::InputOutputError, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qbluetoothsocket.cpp new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qbluetoothsocket.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qbluetoothsocket.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qbluetoothsocket.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -623,6 +623,7 @@ d->discoveryAgent->start(QBluetoothServiceDiscoveryAgent::FullDiscovery); } +/*! \internal */ void QBluetoothSocket::serviceDiscovered(const QBluetoothServiceInfo &service) { Q_D(QBluetoothSocketBase); @@ -643,6 +644,7 @@ } } +/*! \internal */ void QBluetoothSocket::discoveryFinished() { qCDebug(QT_BT) << "Socket discovery finished"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qlowenergycontroller_android.cpp new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qlowenergycontroller_android.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qlowenergycontroller_android.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qlowenergycontroller_android.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -940,31 +940,73 @@ return javaAdvertiseData; } -static QJniObject createJavaAdvertiseSettings(const QLowEnergyAdvertisingParameters ¶ms) +static QJniObject createJavaAdvertisingSetParameters(const QLowEnergyAdvertisingParameters ¶ms, + const QJniObject &javaObj) { - QJniObject builder = QJniObject::construct<QtJniTypes::AdvertiseSettingsBuilder>(); + QJniObject builder = QJniObject::construct<QtJniTypes::AdvertisingSetParametersBuilder>(); + + // TODO: Extended advertising support (see QTBUG-144522). + // We need a separate setting in the public API for it, because + // old BTLE devices will not be able to understand it. + // For now, always disable it! +#if 0 + const bool supportsExtendedAdvertising = + javaObj.callMethod<jboolean>("isLeExtendedAdvertisingSupported"); + builder = builder.callMethod<QtJniTypes::AdvertisingSetParametersBuilder>( + "setLegacyMode", !supportsExtendedAdvertising); +#else + Q_UNUSED(javaObj); + builder = builder.callMethod<QtJniTypes::AdvertisingSetParametersBuilder>( + "setLegacyMode", true); +#endif bool connectable = false; + bool scannable = false; switch (params.mode()) { case QLowEnergyAdvertisingParameters::AdvInd: connectable = true; + scannable = true; // TODO: if extended advertising is enabled, it must be false! break; case QLowEnergyAdvertisingParameters::AdvScanInd: + connectable = false; + scannable = true; + break; case QLowEnergyAdvertisingParameters::AdvNonConnInd: connectable = false; + scannable = false; break; // intentionally no default case } - builder = builder.callMethod<QtJniTypes::AdvertiseSettingsBuilder>( - "setConnectable", connectable); - - /* TODO No Android API for further QLowEnergyAdvertisingParameters options - * Android TxPowerLevel, AdvertiseMode and Timeout not mappable to Qt - */ - - QJniObject javaAdvertiseSettings = builder.callMethod<QtJniTypes::AdvertiseSettings>("build"); - return javaAdvertiseSettings; + builder = builder.callMethod<QtJniTypes::AdvertisingSetParametersBuilder>( + "setConnectable", connectable); + builder = builder.callMethod<QtJniTypes::AdvertisingSetParametersBuilder>( + "setScannable", scannable); + + // The QLowEnergyAdvertisingParameters struct contains the min and max + // interval values in milliseconds. However, the Android docs state + // the following: + // Bluetooth LE Advertising interval, in 0.625ms unit. + // Valid range is from 160 (100ms) to 16777215 (10,485.759375 s). + auto advertisingSetParametersObj = + QJniEnvironment().findClass<QtJniTypes::AdvertisingSetParameters>(); + static const int minAdvInterval = + QJniObject::getStaticField<jint>(advertisingSetParametersObj, "INTERVAL_MIN"); + static const int maxAdvInterval = + QJniObject::getStaticField<jint>(advertisingSetParametersObj, "INTERVAL_MAX"); + + int desiredInterval = (params.minimumInterval() + params.maximumInterval()) / 2 / 0.625; + if (desiredInterval < minAdvInterval) + desiredInterval = minAdvInterval; + else if (desiredInterval > maxAdvInterval) + desiredInterval = maxAdvInterval; + + builder = builder.callMethod<QtJniTypes::AdvertisingSetParametersBuilder>( + "setInterval", desiredInterval); + + QJniObject javaAdvertisingSetParameters = + builder.callMethod<QtJniTypes::AdvertisingSetParameters>("build"); + return javaAdvertisingSetParameters; } @@ -988,15 +1030,16 @@ return; } - // Pass on advertisingData, scanResponse & AdvertiseSettings + // Pass on advertisingData, scanResponse & AdvertisingSetParameters QJniObject jAdvertiseData = createJavaAdvertiseData(advertisingData); QJniObject jScanResponse = createJavaAdvertiseData(scanResponseData); - QJniObject jAdvertiseSettings = createJavaAdvertiseSettings(params); + QJniObject jAdvertisingSetParameters = + createJavaAdvertisingSetParameters(params, hub->javaObject()); const bool result = hub->javaObject().callMethod<jboolean>("startAdvertising", jAdvertiseData.object<QtJniTypes::AdvertiseData>(), jScanResponse.object<QtJniTypes::AdvertiseData>(), - jAdvertiseSettings.object<QtJniTypes::AdvertiseSettings>()); + jAdvertisingSetParameters.object<QtJniTypes::AdvertisingSetParameters>()); if (!result) { setError(QLowEnergyController::AdvertisingError); setState(QLowEnergyController::UnconnectedState); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qlowenergycontroller_winrt.cpp new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qlowenergycontroller_winrt.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/bluetooth/qlowenergycontroller_winrt.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/bluetooth/qlowenergycontroller_winrt.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -319,6 +319,7 @@ WARN_AND_CONTINUE("Could not get descriptor UUID"); charData.descriptorList.insert(descHandle, descData); if (descData.uuid == QBluetoothUuid(QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration)) { + mIndicateChars << charData.uuid; if (mMode == QLowEnergyService::FullDiscovery) { auto readResult = SAFE(await(characteristic.ReadClientCharacteristicConfigurationDescriptorAsync(), exitCondition)); if (!readResult) @@ -344,7 +345,6 @@ descData.value = QByteArray(2, Qt::Uninitialized); qToLittleEndian(result, descData.value.data()); } - mIndicateChars << charData.uuid; } else { if (mMode == QLowEnergyService::FullDiscovery) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/nfc/CMakeLists.txt new/qtconnectivity-everywhere-src-6.12.0/src/nfc/CMakeLists.txt --- old/qtconnectivity-everywhere-src-6.11.2/src/nfc/CMakeLists.txt 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/nfc/CMakeLists.txt 2026-09-26 16:27:01.000000000 +0200 @@ -63,6 +63,7 @@ DEFINES IOS_NFC LIBRARIES + ${FWFoundation} ${FWCoreNFC} Qt::CorePrivate ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/nfc/doc/src/nfc-index.qdoc new/qtconnectivity-everywhere-src-6.12.0/src/nfc/doc/src/nfc-index.qdoc --- old/qtconnectivity-everywhere-src-6.11.2/src/nfc/doc/src/nfc-index.qdoc 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/nfc/doc/src/nfc-index.qdoc 2026-09-26 16:27:01.000000000 +0200 @@ -72,6 +72,31 @@ \li \l {Qt NFC C++ Classes}{C++ Classes} \endlist +\section1 Security Considerations + +The content of an NFC tag cannot be treated as a trusted input. It's the +application developer's responsibility to validate the data before using it. + +\section2 URIs + +Functions such as \l QNdefNfcUriRecord::uri() and +\l QNdefNfcSmartPosterRecord::uri() return URIs decoded directly from tag +content. Applications can, for example, verify that the scheme is one the +application expects to receive (for example, \c https rather than \c file +or \c javascript) before opening, loading, or acting on a returned URI. + +\section2 Icon Data + +Functions such as \l QNdefNfcIconRecord::data() and +\l QNdefNfcSmartPosterRecord::icon() return raw byte arrays containing icon +data embedded in the tag. Since the MIME type and content are both provided +by the tag author, the actual bytes may not conform to the claimed type. + +Applications should verify the result after decoding rather than assuming the +data is valid. As an example, passing the data directly to \l QImage is +generally safe, as it handles validation. However, it is advised to perform +additional validation when processing the data manually or using non-Qt tools. + \section1 Module Evolution \l {Changes to Qt NFC} lists important changes in the module API and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/nfc/neard/neard_helper.cpp new/qtconnectivity-everywhere-src-6.12.0/src/nfc/neard/neard_helper.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/nfc/neard/neard_helper.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/nfc/neard/neard_helper.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -4,7 +4,7 @@ #include <QDBusMetaType> #include "neard_helper_p.h" -#include "objectmanager_interface.h" +#include "objectmanager_interface_p.h" QT_BEGIN_NAMESPACE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qndefnfcsmartposterrecord.cpp new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qndefnfcsmartposterrecord.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qndefnfcsmartposterrecord.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qndefnfcsmartposterrecord.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -426,6 +426,9 @@ /*! Returns the URI from the smart poster's URI record if set. Otherwise an empty URI is returned. + + \warning Application developers are advised to validate the returned + URI before acting on it. See \l{Qt NFC Security Considerations} for guidance. */ QUrl QNdefNfcSmartPosterRecord::uri() const { @@ -520,6 +523,9 @@ /*! Returns the associated icon record data if the smart poster contains an icon record with MIME type \a mimetype. If \a mimetype is omitted or empty then the first icon's record data is returned. In all other cases, an empty array is returned. + + \warning Application developers are advised to validate the returned data + before processing it. See \l{Qt NFC Security Considerations} for guidance. */ QByteArray QNdefNfcSmartPosterRecord::icon(const QByteArray& mimetype) const { @@ -741,6 +747,9 @@ /*! Returns the icon data as \l QByteArray. + + \warning Application developers are advised to validate the returned data + before processing it. See \l{Qt NFC Security Considerations} for guidance. */ QByteArray QNdefNfcIconRecord::data() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qndefnfcurirecord.cpp new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qndefnfcurirecord.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qndefnfcurirecord.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qndefnfcurirecord.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -73,6 +73,9 @@ /*! Returns the URI of this URI record. + + \warning Application developers are advised to validate the returned + URI before acting on it. See \l{Qt NFC Security Considerations} for guidance. */ QUrl QNdefNfcUriRecord::uri() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qnearfieldmanager_neard.cpp new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qnearfieldmanager_neard.cpp --- old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qnearfieldmanager_neard.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qnearfieldmanager_neard.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -4,9 +4,9 @@ #include "qnearfieldmanager_neard_p.h" #include "qnearfieldtarget_neard_p.h" -#include "adapter_interface.h" -#include "properties_interface.h" -#include "objectmanager_interface.h" +#include "adapter_interface_p.h" +#include "properties_interface_p.h" +#include "objectmanager_interface_p.h" QT_BEGIN_NAMESPACE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qnearfieldtarget_neard_p.h new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qnearfieldtarget_neard_p.h --- old/qtconnectivity-everywhere-src-6.11.2/src/nfc/qnearfieldtarget_neard_p.h 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/src/nfc/qnearfieldtarget_neard_p.h 2026-09-26 16:27:01.000000000 +0200 @@ -24,9 +24,9 @@ #include <qndefmessage.h> #include "neard/neard_helper_p.h" -#include "properties_interface.h" -#include "objectmanager_interface.h" -#include "tag_interface.h" +#include "properties_interface_p.h" +#include "objectmanager_interface_p.h" +#include "tag_interface_p.h" QT_BEGIN_NAMESPACE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/tests/CMakeLists.txt new/qtconnectivity-everywhere-src-6.12.0/tests/CMakeLists.txt --- old/qtconnectivity-everywhere-src-6.11.2/tests/CMakeLists.txt 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/tests/CMakeLists.txt 2026-09-26 16:27:01.000000000 +0200 @@ -6,11 +6,6 @@ # the standalone tests here. endif() -# androidtestrunner doesn't grant the permissions to tests when installing aab -# using bundletool. Disable QT_USE_ANDROID_MODERN_BUNDLE flag, for -# qtconnectivity tests. See QTBUG-138597. -set(QT_USE_ANDROID_MODERN_BUNDLE OFF) - if(TARGET Qt::Bluetooth) if(TARGET Qt::Quick) add_subdirectory(bttestui) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp new/qtconnectivity-everywhere-src-6.12.0/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp --- old/qtconnectivity-everywhere-src-6.11.2/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/tests/auto/qlowenergycontroller/tst_qlowenergycontroller.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -120,7 +120,7 @@ void tst_QLowEnergyController::initTestCase() { -#if !defined(Q_OS_MAC) +#if !defined(Q_OS_APPLE) if (remoteDevice.isNull() #if !QT_CONFIG(winrt_bt) || QBluetoothLocalDevice::allDevices().isEmpty()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtconnectivity-everywhere-src-6.11.2/tests/bluetoothtestdevice/bluetoothtestdevice.cpp new/qtconnectivity-everywhere-src-6.12.0/tests/bluetoothtestdevice/bluetoothtestdevice.cpp --- old/qtconnectivity-everywhere-src-6.11.2/tests/bluetoothtestdevice/bluetoothtestdevice.cpp 2026-08-12 03:34:10.000000000 +0200 +++ new/qtconnectivity-everywhere-src-6.12.0/tests/bluetoothtestdevice/bluetoothtestdevice.cpp 2026-09-26 16:27:01.000000000 +0200 @@ -388,9 +388,12 @@ establishNotifyOnWriteConnection(services[5].get()); - leController->startAdvertising(QLowEnergyAdvertisingParameters(), advertisingData, - advertisingData); + QLowEnergyAdvertisingParameters parameters; + parameters.setMode(QLowEnergyAdvertisingParameters::AdvInd); + parameters.setInterval(500, 1000); + leController->startAdvertising(parameters, advertisingData, + advertisingData); auto reconnect = [&connectioncount, &leController, advertisingData, &services, serviceDefinitions]() { connectioncount++;
