Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
5
#
include
"androidconnectivitymanager.h"
6
7
#
include
<
QtCore
/
qcoreapplication
.
h
>
8
#
include
<
QtCore
/
qjnienvironment
.
h
>
9
10
QT_BEGIN_NAMESPACE
11
12
using
namespace
QNativeInterface;
13
14
struct
AndroidConnectivityManagerInstance
15
{
16
AndroidConnectivityManagerInstance
() :
connManager
(
new
AndroidConnectivityManager
) { }
17
std
::
unique_ptr
<
AndroidConnectivityManager
>
connManager
=
nullptr
;
18
};
19
Q_GLOBAL_STATIC(
AndroidConnectivityManagerInstance
, androidConnManagerInstance)
20
21
static
const
char
networkInformationClass
[] =
22
"org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation"
;
23
24
static
AndroidConnectivityManager *
liveConnManager
()
25
{
26
if
(!androidConnManagerInstance())
27
return
nullptr
;
28
return
androidConnManagerInstance->connManager.get();
29
}
30
31
static
void
networkConnectivityChanged
(JNIEnv *,
jobject
, jint enumValue)
32
{
33
AndroidConnectivityManager *manager =
liveConnManager
(
)
;
34
if
(!manager)
35
return
;
36
const
auto
connectivity =
37
static_cast
<AndroidConnectivityManager::AndroidConnectivity>(enumValue);
38
QMetaObject::invokeMethod(manager, [manager, connectivity] {
39
Q_EMIT manager->connectivityChanged(connectivity);
40
}, Qt::QueuedConnection);
41
}
42
Q_DECLARE_JNI_NATIVE_METHOD(networkConnectivityChanged)
43
44
static
void
genericInfoChanged
(JNIEnv *,
jobject
, jboolean captivePortal, jboolean metered)
45
{
46
AndroidConnectivityManager *manager =
liveConnManager
(
)
;
47
if
(!manager)
48
return
;
49
QMetaObject::invokeMethod(manager, [manager, captivePortal, metered] {
50
Q_EMIT manager->captivePortalChanged(captivePortal);
51
Q_EMIT manager->meteredChanged(metered);
52
}, Qt::QueuedConnection);
53
}
54
Q_DECLARE_JNI_NATIVE_METHOD(genericInfoChanged)
55
56
static
void
transportMediumChanged
(JNIEnv *,
jobject
, jint enumValue)
57
{
58
AndroidConnectivityManager *manager =
liveConnManager
(
)
;
59
if
(!manager)
60
return
;
61
const
auto
transport =
static_cast
<AndroidConnectivityManager::AndroidTransport>(enumValue);
62
QMetaObject::invokeMethod(manager, [manager, transport] {
63
Q_EMIT manager->transportMediumChanged(transport);
64
}, Qt::QueuedConnection);
65
}
66
Q_DECLARE_JNI_NATIVE_METHOD(transportMediumChanged)
67
68
Q_DECLARE_JNI_CLASS(ConnectivityManager,
"android/net/ConnectivityManager"
)
69
70
AndroidConnectivityManager::AndroidConnectivityManager()
71
{
72
if
(!registerNatives())
73
return
;
74
75
QJniObject::callStaticMethod<
void
>(networkInformationClass,
"registerReceiver"
,
76
QAndroidApplication::context());
77
}
78
79
AndroidConnectivityManager *AndroidConnectivityManager::getInstance()
80
{
81
if
(!androidConnManagerInstance())
82
return
nullptr
;
83
return
androidConnManagerInstance->connManager->isValid()
84
? androidConnManagerInstance->connManager.get()
85
:
nullptr
;
86
}
87
88
bool
AndroidConnectivityManager::isValid()
const
89
{
90
return
registerNatives();
91
}
92
93
AndroidConnectivityManager::~AndroidConnectivityManager()
94
{
95
QJniObject::callStaticMethod<
void
>(networkInformationClass,
"unregisterReceiver"
,
96
QAndroidApplication::context());
97
}
98
99
bool
AndroidConnectivityManager::registerNatives()
const
100
{
101
static
const
bool
registered = []() {
102
QJniEnvironment env;
103
return
env.registerNativeMethods(networkInformationClass, {
104
Q_JNI_NATIVE_METHOD(networkConnectivityChanged),
105
Q_JNI_NATIVE_METHOD(genericInfoChanged),
106
Q_JNI_NATIVE_METHOD(transportMediumChanged),
107
});
108
}();
109
return
registered;
110
}
111
112
QT_END_NAMESPACE
113
114
#
include
"moc_androidconnectivitymanager.cpp"
networkInformationClass
static const char networkInformationClass[]
Definition
androidconnectivitymanager.cpp:21
networkConnectivityChanged
static void networkConnectivityChanged(JNIEnv *, jobject, jint enumValue)
Definition
androidconnectivitymanager.cpp:31
transportMediumChanged
static void transportMediumChanged(JNIEnv *, jobject, jint enumValue)
Definition
androidconnectivitymanager.cpp:56
liveConnManager
static AndroidConnectivityManager * liveConnManager()
Definition
androidconnectivitymanager.cpp:24
genericInfoChanged
static void genericInfoChanged(JNIEnv *, jobject, jboolean captivePortal, jboolean metered)
Definition
androidconnectivitymanager.cpp:44
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
AndroidConnectivityManagerInstance
Definition
androidconnectivitymanager.cpp:15
AndroidConnectivityManagerInstance::connManager
std::unique_ptr< AndroidConnectivityManager > connManager
Definition
androidconnectivitymanager.cpp:17
AndroidConnectivityManagerInstance::AndroidConnectivityManagerInstance
AndroidConnectivityManagerInstance()
Definition
androidconnectivitymanager.cpp:16
qtbase
src
plugins
networkinformation
android
wrapper
androidconnectivitymanager.cpp
Generated on
for Qt by
1.18.0