5#include <QtNetwork/private/qnetworkinformation_p.h>
7#include "wrapper/androidconnectivitymanager.h"
9#include <QtCore/qglobal.h>
12Q_DECLARE_LOGGING_CATEGORY(lcNetInfoAndroid)
13Q_LOGGING_CATEGORY(lcNetInfoAndroid,
"qt.network.info.android");
16 return QString::fromUtf16(QNetworkInformationBackend::PluginNames
17 [QNetworkInformationBackend::PluginNamesAndroidIndex]);
30 return featuresSupportedStatic();
35 using Feature = QNetworkInformation::Feature;
36 return QNetworkInformation::Features(Feature::Reachability | Feature::CaptivePortal
37 | Feature::TransportMedium);
45 void updateConnectivity(AndroidConnectivityManager::AndroidConnectivity connectivity);
46 void updateTransportMedium(AndroidConnectivityManager::AndroidTransport transport);
54 Q_PLUGIN_METADATA(IID QNetworkInformationBackendFactory_iid)
62 return QAndroidNetworkInformationBackend::featuresSupportedStatic();
66 create(QNetworkInformation::Features requiredFeatures)
const override
68 if ((requiredFeatures & featuresSupported()) != requiredFeatures)
71 if (!backend->isValid())
72 delete std::exchange(backend,
nullptr);
82 auto conman = AndroidConnectivityManager::getInstance();
86 setReachability(QNetworkInformation::Reachability::Unknown);
87 connect(conman, &AndroidConnectivityManager::connectivityChanged,
this,
88 &QAndroidNetworkInformationBackend::updateConnectivity);
90 connect(conman, &AndroidConnectivityManager::captivePortalChanged,
this,
91 &QAndroidNetworkInformationBackend::setBehindCaptivePortal);
93 connect(conman, &AndroidConnectivityManager::transportMediumChanged,
this,
96 connect(conman, &AndroidConnectivityManager::meteredChanged,
this,
97 &QAndroidNetworkInformationBackend::setMetered);
101 AndroidConnectivityManager::AndroidConnectivity connectivity)
103 using AndroidConnectivity = AndroidConnectivityManager::AndroidConnectivity;
104 static const auto mapState = [](AndroidConnectivity state) {
106 case AndroidConnectivity::Connected:
107 return QNetworkInformation::Reachability::Online;
108 case AndroidConnectivity::Disconnected:
109 return QNetworkInformation::Reachability::Disconnected;
110 case AndroidConnectivity::Unknown:
112 return QNetworkInformation::Reachability::Unknown;
116 setReachability(mapState(connectivity));
120 AndroidConnectivityManager::AndroidTransport transport)
122 using AndroidTransport = AndroidConnectivityManager::AndroidTransport;
123 using TransportMedium = QNetworkInformation::TransportMedium;
124 static const auto mapTransport = [](AndroidTransport state) -> TransportMedium {
126 case AndroidTransport::Cellular:
127 return TransportMedium::Cellular;
128 case AndroidTransport::WiFi:
129 return TransportMedium::WiFi;
130 case AndroidTransport::Bluetooth:
131 return TransportMedium::Bluetooth;
132 case AndroidTransport::Ethernet:
133 return TransportMedium::Ethernet;
135 case AndroidTransport::Usb:
136 case AndroidTransport::LoWPAN:
137 case AndroidTransport::WiFiAware:
138 case AndroidTransport::Unknown:
139 return TransportMedium::Unknown;
143 setTransportMedium(mapTransport(transport));
148#include "qandroidnetworkinformationbackend.moc"