Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
androidconnectivitymanager.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
6
7#include <QtCore/qcoreapplication.h>
8#include <QtCore/qjnienvironment.h>
9
11
12using namespace QNativeInterface;
13
19Q_GLOBAL_STATIC(AndroidConnectivityManagerInstance, androidConnManagerInstance)
20
21static const char networkInformationClass[] =
22 "org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation";
23
24static void networkConnectivityChanged(JNIEnv *env, jobject obj, jint enumValue)
25{
26 Q_UNUSED(env);
27 Q_UNUSED(obj);
28 const auto connectivity =
29 static_cast<AndroidConnectivityManager::AndroidConnectivity>(enumValue);
30 Q_EMIT androidConnManagerInstance->connManager->connectivityChanged(connectivity);
31}
32Q_DECLARE_JNI_NATIVE_METHOD(networkConnectivityChanged)
33
34static void genericInfoChanged(JNIEnv *env, jobject obj, jboolean captivePortal, jboolean metered)
35{
36 Q_UNUSED(env);
37 Q_UNUSED(obj);
38 Q_EMIT androidConnManagerInstance->connManager->captivePortalChanged(captivePortal);
39 Q_EMIT androidConnManagerInstance->connManager->meteredChanged(metered);
40}
41Q_DECLARE_JNI_NATIVE_METHOD(genericInfoChanged)
42
43static void transportMediumChanged(JNIEnv *env, jobject obj, jint enumValue)
44{
45 Q_UNUSED(env);
46 Q_UNUSED(obj);
47 const auto transport = static_cast<AndroidConnectivityManager::AndroidTransport>(enumValue);
48 emit androidConnManagerInstance->connManager->transportMediumChanged(transport);
49}
50Q_DECLARE_JNI_NATIVE_METHOD(transportMediumChanged)
51
52Q_DECLARE_JNI_CLASS(ConnectivityManager, "android/net/ConnectivityManager")
53
54AndroidConnectivityManager::AndroidConnectivityManager()
55{
56 if (!registerNatives())
57 return;
58
59 QJniObject::callStaticMethod<void>(networkInformationClass, "registerReceiver",
60 QAndroidApplication::context());
61}
62
63AndroidConnectivityManager *AndroidConnectivityManager::getInstance()
64{
65 if (!androidConnManagerInstance())
66 return nullptr;
67 return androidConnManagerInstance->connManager->isValid()
68 ? androidConnManagerInstance->connManager.get()
69 : nullptr;
70}
71
72bool AndroidConnectivityManager::isValid() const
73{
74 return registerNatives();
75}
76
77AndroidConnectivityManager::~AndroidConnectivityManager()
78{
79 QJniObject::callStaticMethod<void>(networkInformationClass, "unregisterReceiver",
80 QAndroidApplication::context());
81}
82
83bool AndroidConnectivityManager::registerNatives() const
84{
85 static const bool registered = []() {
86 QJniEnvironment env;
87 return env.registerNativeMethods(networkInformationClass, {
88 Q_JNI_NATIVE_METHOD(networkConnectivityChanged),
89 Q_JNI_NATIVE_METHOD(genericInfoChanged),
90 Q_JNI_NATIVE_METHOD(transportMediumChanged),
91 });
92 }();
93 return registered;
94}
95
96QT_END_NAMESPACE
97
98#include "moc_androidconnectivitymanager.cpp"
static const char networkInformationClass[]
static void transportMediumChanged(JNIEnv *env, jobject obj, jint enumValue)
static void genericInfoChanged(JNIEnv *env, jobject obj, jboolean captivePortal, jboolean metered)
static void networkConnectivityChanged(JNIEnv *env, jobject obj, jint enumValue)
std::unique_ptr< AndroidConnectivityManager > connManager