From 83ddf49bc71736a19f27e6e8b72831ea72e441cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Mon, 25 Oct 2021 20:23:24 +0200 Subject: [PATCH] QNI: Android support for isMetered Task-number: QTBUG-91024 Change-Id: I7a8fdcddc25fdb60390b424a888d0311afd8cef3 Reviewed-by: Assam Boudjelthia Reviewed-by: Edward Welbourne --- .../networkinformation/QtAndroidNetworkInformation.java | 6 ++++-- .../android/qandroidnetworkinformationbackend.cpp | 3 +++ .../android/wrapper/androidconnectivitymanager.cpp | 9 +++++---- .../android/wrapper/androidconnectivitymanager.h | 1 + 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/plugins/networkinformation/android/jar/src/org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation.java b/src/plugins/networkinformation/android/jar/src/org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation.java index 51a3b43fd01..a35424f8e86 100644 --- a/src/plugins/networkinformation/android/jar/src/org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation.java +++ b/src/plugins/networkinformation/android/jar/src/org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation.java @@ -52,7 +52,7 @@ public class QtAndroidNetworkInformation { private static final String LOG_TAG = "QtAndroidNetworkInformation"; private static native void connectivityChanged(AndroidConnectivity connectivity); - private static native void behindCaptivePortalChanged(boolean state); + private static native void genericInfoChanged(boolean captivePortal, boolean metered); private static native void transportMediumChanged(Transport transportMedium); private static QtNetworkInformationCallback m_callback = null; @@ -101,7 +101,9 @@ public class QtAndroidNetworkInformation { final boolean captive = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL); - behindCaptivePortalChanged(captive); + final boolean metered + = !capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); + genericInfoChanged(captive, metered); } private Transport getTransport(NetworkCapabilities capabilities) diff --git a/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp b/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp index 8f90ea82bd7..2e4149f686a 100644 --- a/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp +++ b/src/plugins/networkinformation/android/qandroidnetworkinformationbackend.cpp @@ -127,6 +127,9 @@ QAndroidNetworkInformationBackend::QAndroidNetworkInformationBackend() connect(conman, &AndroidConnectivityManager::transportMediumChanged, this, &QAndroidNetworkInformationBackend::updateTransportMedium); + + connect(conman, &AndroidConnectivityManager::meteredChanged, this, + &QAndroidNetworkInformationBackend::setMetered); } void QAndroidNetworkInformationBackend::updateConnectivity( diff --git a/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.cpp b/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.cpp index e95a7db6108..5c1230bfaa5 100644 --- a/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.cpp +++ b/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.cpp @@ -65,11 +65,12 @@ static void networkConnectivityChanged(JNIEnv *env, jobject obj, jobject enumVal Q_EMIT androidConnManagerInstance->connManager->connectivityChanged(connectivity); } -static void behindCaptivePortalChanged(JNIEnv *env, jobject obj, jboolean state) +static void genericInfoChanged(JNIEnv *env, jobject obj, jboolean captivePortal, jboolean metered) { Q_UNUSED(env); Q_UNUSED(obj); - Q_EMIT androidConnManagerInstance->connManager->captivePortalChanged(state); + Q_EMIT androidConnManagerInstance->connManager->captivePortalChanged(captivePortal); + Q_EMIT androidConnManagerInstance->connManager->meteredChanged(metered); } static void transportMediumChangedCallback(JNIEnv *env, jobject obj, jobject enumValue) @@ -128,8 +129,8 @@ bool AndroidConnectivityManager::registerNatives() static JNINativeMethod methods[] = { { "connectivityChanged", connectivityEnumSig.data(), reinterpret_cast(networkConnectivityChanged) }, - { "behindCaptivePortalChanged", "(Z)V", - reinterpret_cast(behindCaptivePortalChanged) }, + { "genericInfoChanged", "(ZZ)V", + reinterpret_cast(genericInfoChanged) }, { "transportMediumChanged", transportEnumSig.data(), reinterpret_cast(transportMediumChangedCallback) }, }; diff --git a/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.h b/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.h index b335a4a3e43..414ef2748af 100644 --- a/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.h +++ b/src/plugins/networkinformation/android/wrapper/androidconnectivitymanager.h @@ -75,6 +75,7 @@ Q_SIGNALS: void connectivityChanged(AndroidConnectivity connectivity); void captivePortalChanged(bool state); void transportMediumChanged(AndroidTransport transport); + void meteredChanged(bool state); private: friend struct AndroidConnectivityManagerInstance;