1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the plugins of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 #ifndef ANDROIDCONNECTIVITYMANAGER_H
41 #define ANDROIDCONNECTIVITYMANAGER_H
42 
43 #include <QObject>
44 #include <QtCore/private/qjni_p.h>
45 
46 QT_BEGIN_NAMESPACE
47 
48 class AndroidTrafficStats
49 {
50 public:
51     static qint64 getMobileTxBytes();
52     static qint64 getMobileRxBytes();
53     static qint64 getTotalTxBytes();
54     static qint64 getTotalRxBytes();
55     static bool isTrafficStatsSupported();
56 };
57 
58 class AndroidNetworkInfo
59 {
60 public:
61     // Needs to be in sync with the values from the android api.
62     enum NetworkState {
63         UnknownState,
64         Authenticating,
65         Blocked,
66         CaptivePortalCheck,
67         Connected,
68         Connecting,
69         Disconnected,
70         Disconnecting,
71         Failed,
72         Idle,
73         ObtainingIpAddr,
74         Scanning,
75         Suspended,
76         VerifyingPoorLink
77     };
78 
79     enum NetworkType {
80         Mobile,
81         Wifi,
82         MobileMms,
83         MobileSupl,
84         MobileDun,
85         MobileHipri,
86         Wimax,
87         Bluetooth,
88         Dummy,
89         Ethernet,
90         UnknownType
91     };
92 
93     enum NetworkSubType {
94         UnknownSubType,
95         Gprs,
96         Edge,
97         Umts,
98         Cdma,
99         Evdo0,
100         EvdoA,
101         Cdma1xRTT,
102         Hsdpa,
103         Hsupa,
104         Hspa,
105         Iden,
106         EvdoB,
107         Lte,
108         Ehrpd,
109         Hspap
110     };
111 
AndroidNetworkInfo(const QJNIObjectPrivate & obj)112     inline AndroidNetworkInfo(const QJNIObjectPrivate &obj) : m_networkInfo(obj)
113     { }
114 
115     NetworkState getDetailedState() const;
116     QString getExtraInfo() const;
117     QString getReason() const;
118     NetworkState getState() const;
119     NetworkSubType getSubtype() const;
120     QString getSubtypeName() const;
121     NetworkType getType() const;
122     QString getTypeName() const;
123     bool isAvailable() const;
124     bool isConnected() const;
125     bool isConnectedOrConnecting() const;
126     bool isFailover() const;
127     bool isRoaming() const;
128     bool isValid() const;
129 
130 private:
131     QJNIObjectPrivate m_networkInfo;
132 };
133 
134 class AndroidConnectivityManager : public QObject
135 {
136     Q_OBJECT
137 public:
138     static AndroidConnectivityManager *getInstance();
139     ~AndroidConnectivityManager();
140 
141     AndroidNetworkInfo getActiveNetworkInfo() const;
142     QList<AndroidNetworkInfo> getAllNetworkInfo() const;
143     bool getBackgroundDataSetting() const;
144     AndroidNetworkInfo getNetworkInfo(int networkType) const;
145     int getNetworkPreference() const;
146     bool isActiveNetworkMetered() const;
147     static bool isNetworkTypeValid(int networkType);
148     bool requestRouteToHost(int networkType, int hostAddress);
149     void setNetworkPreference(int preference);
150     int startUsingNetworkFeature(int networkType, const QString &feature);
151     int stopUsingNetworkFeature(int networkType, const QString &feature);
isValid()152     inline bool isValid() const
153     {
154         return m_connectivityManager.isValid();
155     }
156 
157     Q_SIGNAL void activeNetworkChanged();
158 
159 private:
160     friend struct AndroidConnectivityManagerInstance;
161     AndroidConnectivityManager();
162     bool registerNatives(JNIEnv *env);
163     QJNIObjectPrivate m_connectivityManager;
164 };
165 
166 QT_END_NAMESPACE
167 
168 #endif // ANDROIDCONNECTIVITYMANAGER_H
169