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");
17 return QString::fromUtf16(QNetworkInformationBackend::PluginNames
18 [QNetworkInformationBackend::PluginNamesAndroidIndex]);
31 return featuresSupportedStatic();
36 using Feature = QNetworkInformation::Feature;
37 return QNetworkInformation::Features(Feature::Reachability | Feature::CaptivePortal
38 | Feature::TransportMedium | Feature::Metered);
46 void updateConnectivity(AndroidConnectivityManager::AndroidConnectivity connectivity);
47 void updateTransportMedium(AndroidConnectivityManager::AndroidTransport transport);
55 Q_PLUGIN_METADATA(IID QNetworkInformationBackendFactory_iid)
63 return QAndroidNetworkInformationBackend::featuresSupportedStatic();
67 create(QNetworkInformation::Features requiredFeatures)
const override
69 if ((requiredFeatures & featuresSupported()) != requiredFeatures)
72 if (!backend->isValid())
73 delete std::exchange(backend,
nullptr);
83 auto conman = AndroidConnectivityManager::getInstance();
87 setReachability(QNetworkInformation::Reachability::Unknown);
88 connect(conman, &AndroidConnectivityManager::connectivityChanged,
this,
89 &QAndroidNetworkInformationBackend::updateConnectivity);
91 connect(conman, &AndroidConnectivityManager::captivePortalChanged,
this,
92 &QAndroidNetworkInformationBackend::setBehindCaptivePortal);
94 connect(conman, &AndroidConnectivityManager::transportMediumChanged,
this,
97 connect(conman, &AndroidConnectivityManager::meteredChanged,
this,
98 &QAndroidNetworkInformationBackend::setMetered);
102 AndroidConnectivityManager::AndroidConnectivity connectivity)
104 using AndroidConnectivity = AndroidConnectivityManager::AndroidConnectivity;
105 static const auto mapState = [](AndroidConnectivity state) {
107 case AndroidConnectivity::Connected:
108 return QNetworkInformation::Reachability::Online;
109 case AndroidConnectivity::Disconnected:
110 return QNetworkInformation::Reachability::Disconnected;
111 case AndroidConnectivity::Unknown:
113 return QNetworkInformation::Reachability::Unknown;
117 setReachability(mapState(connectivity));
121 AndroidConnectivityManager::AndroidTransport transport)
123 using AndroidTransport = AndroidConnectivityManager::AndroidTransport;
124 using TransportMedium = QNetworkInformation::TransportMedium;
125 static const auto mapTransport = [](AndroidTransport state) -> TransportMedium {
127 case AndroidTransport::Cellular:
128 return TransportMedium::Cellular;
129 case AndroidTransport::WiFi:
130 return TransportMedium::WiFi;
131 case AndroidTransport::Bluetooth:
132 return TransportMedium::Bluetooth;
133 case AndroidTransport::Ethernet:
134 return TransportMedium::Ethernet;
136 case AndroidTransport::Usb:
137 case AndroidTransport::LoWPAN:
138 case AndroidTransport::WiFiAware:
139 case AndroidTransport::Unknown:
140 return TransportMedium::Unknown;
144 setTransportMedium(mapTransport(transport));
149#include "qandroidnetworkinformationbackend.moc"
Combined button and popup list for selecting options.