Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
5
6#include <QtCore/qcoreapplication.h>
7#include <QtCore/qjnienvironment.h>
8
10
11using namespace QNativeInterface;
12
14{
16 std::unique_ptr<AndroidConnectivityManager> connManager = nullptr;
17};
18Q_GLOBAL_STATIC(AndroidConnectivityManagerInstance, androidConnManagerInstance)
19
20static const char networkInformationClass[] =
21 "org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation";
22
23static void networkConnectivityChanged(JNIEnv *env, jobject obj, jint enumValue)
24{
25 Q_UNUSED(env);
27 const auto connectivity =
29 Q_EMIT androidConnManagerInstance->connManager->connectivityChanged(connectivity);
30}
31Q_DECLARE_JNI_NATIVE_METHOD(networkConnectivityChanged)
32
33static void genericInfoChanged(JNIEnv *env, jobject obj, jboolean captivePortal, jboolean metered)
34{
35 Q_UNUSED(env);
37 Q_EMIT androidConnManagerInstance->connManager->captivePortalChanged(captivePortal);
38 Q_EMIT androidConnManagerInstance->connManager->meteredChanged(metered);
39}
40Q_DECLARE_JNI_NATIVE_METHOD(genericInfoChanged)
41
42static void transportMediumChanged(JNIEnv *env, jobject obj, jint enumValue)
43{
44 Q_UNUSED(env);
46 const auto transport = static_cast<AndroidConnectivityManager::AndroidTransport>(enumValue);
47 emit androidConnManagerInstance->connManager->transportMediumChanged(transport);
48}
49Q_DECLARE_JNI_NATIVE_METHOD(transportMediumChanged)
50
51Q_DECLARE_JNI_CLASS(ConnectivityManager, "android/net/ConnectivityManager")
52
54{
55 if (!registerNatives())
56 return;
57
58 QJniObject::callStaticMethod<void>(networkInformationClass, "registerReceiver",
59 QAndroidApplication::context());
60}
61
63{
64 if (!androidConnManagerInstance())
65 return nullptr;
66 return androidConnManagerInstance->connManager->isValid()
67 ? androidConnManagerInstance->connManager.get()
68 : nullptr;
69}
70
72{
73 return registerNatives();
74}
75
77{
78 QJniObject::callStaticMethod<void>(networkInformationClass, "unregisterReceiver",
79 QAndroidApplication::context());
80}
81
82bool AndroidConnectivityManager::registerNatives() const
83{
84 static const bool registered = []() {
86 return env.registerNativeMethods(networkInformationClass, {
87 Q_JNI_NATIVE_METHOD(networkConnectivityChanged),
88 Q_JNI_NATIVE_METHOD(genericInfoChanged),
89 Q_JNI_NATIVE_METHOD(transportMediumChanged),
90 });
91 }();
92 return registered;
93}
94
96
97#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)
static AndroidConnectivityManager * getInstance()
void transportMediumChanged(AndroidTransport transport)
\inmodule QtCore
static bool registerNatives()
Combined button and popup list for selecting options.
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
GLhandleARB obj
[2]
QT_BEGIN_NAMESPACE Q_DECLARE_JNI_CLASS(Environment, "android/os/Environment")
#define Q_EMIT
#define emit
#define Q_UNUSED(x)
std::unique_ptr< AndroidConnectivityManager > connManager