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 &params)
+static QJniObject createJavaAdvertisingSetParameters(const 
QLowEnergyAdvertisingParameters &params,
+                                                     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++;

Reply via email to