QNetworkInformation: Captive portal support for Android
Task-number: QTBUG-93848 Change-Id: Ia74ed0a756dc2bf71c7172e21ac4ff2361150b32 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>bb10
parent
da955aadf5
commit
59a0539690
|
|
@ -53,6 +53,7 @@ public class QtAndroidNetworkInformation {
|
|||
private static final String LOG_TAG = "QtAndroidNetworkInformation";
|
||||
|
||||
private static native void connectivityChanged();
|
||||
private static native void behindCaptivePortalChanged(boolean state);
|
||||
|
||||
private static QtNetworkInformationCallback m_callback = null;
|
||||
private static final Object m_lock = new Object();
|
||||
|
|
@ -77,6 +78,10 @@ public class QtAndroidNetworkInformation {
|
|||
else
|
||||
s = AndroidConnectivity.Unknown; // = we _may_ have Internet access
|
||||
setState(s);
|
||||
|
||||
final boolean captive
|
||||
= capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
|
||||
behindCaptivePortalChanged(captive);
|
||||
}
|
||||
|
||||
private void setState(AndroidConnectivity s) {
|
||||
|
|
|
|||
|
|
@ -64,7 +64,8 @@ public:
|
|||
|
||||
static QNetworkInformation::Features featuresSupportedStatic()
|
||||
{
|
||||
return QNetworkInformation::Features(QNetworkInformation::Feature::Reachability);
|
||||
using Feature = QNetworkInformation::Feature;
|
||||
return QNetworkInformation::Features(Feature::Reachability | Feature::CaptivePortal);
|
||||
}
|
||||
|
||||
bool isValid() { return m_valid; }
|
||||
|
|
@ -125,6 +126,12 @@ QAndroidNetworkInformationBackend::QAndroidNetworkInformationBackend()
|
|||
|
||||
setReachability(mapState(conman->networkConnectivity()));
|
||||
});
|
||||
|
||||
connect(conman, &AndroidConnectivityManager::captivePortalChanged, this,
|
||||
[this](bool state) {
|
||||
using TriState = QNetworkInformation::TriState;
|
||||
setBehindCaptivePortal(state ? TriState::True : TriState::False);
|
||||
});
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -56,11 +56,20 @@ Q_GLOBAL_STATIC(AndroidConnectivityManagerInstance, androidConnManagerInstance)
|
|||
static const char networkInformationClass[] =
|
||||
"org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation";
|
||||
|
||||
static void networkConnectivityChanged()
|
||||
static void networkConnectivityChanged(JNIEnv *env, jobject obj)
|
||||
{
|
||||
Q_UNUSED(env);
|
||||
Q_UNUSED(obj);
|
||||
Q_EMIT androidConnManagerInstance->connManager->connectivityChanged();
|
||||
}
|
||||
|
||||
static void behindCaptivePortalChanged(JNIEnv *env, jobject obj, jboolean state)
|
||||
{
|
||||
Q_UNUSED(env);
|
||||
Q_UNUSED(obj);
|
||||
Q_EMIT androidConnManagerInstance->connManager->captivePortalChanged(state);
|
||||
}
|
||||
|
||||
AndroidConnectivityManager::AndroidConnectivityManager()
|
||||
{
|
||||
if (!registerNatives())
|
||||
|
|
@ -124,9 +133,12 @@ bool AndroidConnectivityManager::registerNatives()
|
|||
return false;
|
||||
|
||||
jclass clazz = env->GetObjectClass(networkReceiver.object());
|
||||
static JNINativeMethod method = { "connectivityChanged", "()V",
|
||||
reinterpret_cast<void *>(networkConnectivityChanged) };
|
||||
const bool ret = (env->RegisterNatives(clazz, &method, 1) == JNI_OK);
|
||||
static JNINativeMethod methods[] = {
|
||||
{ "connectivityChanged", "()V", reinterpret_cast<void *>(networkConnectivityChanged) },
|
||||
{ "behindCaptivePortalChanged", "(Z)V",
|
||||
reinterpret_cast<void *>(behindCaptivePortalChanged) }
|
||||
};
|
||||
const bool ret = (env->RegisterNatives(clazz, methods, std::size(methods)) == JNI_OK);
|
||||
env->DeleteLocalRef(clazz);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ public:
|
|||
|
||||
Q_SIGNALS:
|
||||
void connectivityChanged();
|
||||
void captivePortalChanged(bool state);
|
||||
|
||||
private:
|
||||
friend struct AndroidConnectivityManagerInstance;
|
||||
|
|
|
|||
Loading…
Reference in New Issue