QNI:Android: unify behavior of callbacks
The first callback added for the android backend does not have the value as a parameter which is something the other callbacks have. Change it so it does. And promote the lambda to a real function. Change-Id: I06f10f7c79f33a5ea3154f2fc6d20d550cd7eca7 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>bb10
parent
589389843c
commit
5b8a4c2063
|
|
@ -53,13 +53,14 @@ import android.os.Build;
|
|||
public class QtAndroidNetworkInformation {
|
||||
private static final String LOG_TAG = "QtAndroidNetworkInformation";
|
||||
|
||||
private static native void connectivityChanged();
|
||||
private static native void connectivityChanged(AndroidConnectivity connectivity);
|
||||
private static native void behindCaptivePortalChanged(boolean state);
|
||||
private static native void transportMediumChanged(Transport transportMedium);
|
||||
|
||||
private static QtNetworkInformationCallback m_callback = null;
|
||||
private static final Object m_lock = new Object();
|
||||
|
||||
// Keep synchronized with AndroidConnectivity in androidconnectivitymanager.h
|
||||
enum AndroidConnectivity {
|
||||
Connected, Unknown, Disconnected
|
||||
}
|
||||
|
|
@ -131,7 +132,7 @@ public class QtAndroidNetworkInformation {
|
|||
private void setState(AndroidConnectivity s) {
|
||||
if (previousState != s) {
|
||||
previousState = s;
|
||||
connectivityChanged();
|
||||
connectivityChanged(s);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ public:
|
|||
private:
|
||||
Q_DISABLE_COPY_MOVE(QAndroidNetworkInformationBackend);
|
||||
|
||||
void updateConnectivity(AndroidConnectivityManager::AndroidConnectivity connectivity);
|
||||
void updateTransportMedium(AndroidConnectivityManager::AndroidTransport transport);
|
||||
|
||||
bool m_valid = false;
|
||||
|
|
@ -115,21 +116,8 @@ QAndroidNetworkInformationBackend::QAndroidNetworkInformationBackend()
|
|||
return;
|
||||
m_valid = true;
|
||||
setReachability(QNetworkInformation::Reachability::Unknown);
|
||||
connect(conman, &AndroidConnectivityManager::connectivityChanged, this, [this, conman]() {
|
||||
static const auto mapState = [](AndroidConnectivityManager::AndroidConnectivity state) {
|
||||
switch (state) {
|
||||
case AndroidConnectivityManager::AndroidConnectivity::Connected:
|
||||
return QNetworkInformation::Reachability::Online;
|
||||
case AndroidConnectivityManager::AndroidConnectivity::Disconnected:
|
||||
return QNetworkInformation::Reachability::Disconnected;
|
||||
case AndroidConnectivityManager::AndroidConnectivity::Unknown:
|
||||
default:
|
||||
return QNetworkInformation::Reachability::Unknown;
|
||||
}
|
||||
};
|
||||
|
||||
setReachability(mapState(conman->networkConnectivity()));
|
||||
});
|
||||
connect(conman, &AndroidConnectivityManager::connectivityChanged, this,
|
||||
&QAndroidNetworkInformationBackend::updateConnectivity);
|
||||
|
||||
connect(conman, &AndroidConnectivityManager::captivePortalChanged, this,
|
||||
&QAndroidNetworkInformationBackend::setBehindCaptivePortal);
|
||||
|
|
@ -138,6 +126,25 @@ QAndroidNetworkInformationBackend::QAndroidNetworkInformationBackend()
|
|||
&QAndroidNetworkInformationBackend::updateTransportMedium);
|
||||
}
|
||||
|
||||
void QAndroidNetworkInformationBackend::updateConnectivity(
|
||||
AndroidConnectivityManager::AndroidConnectivity connectivity)
|
||||
{
|
||||
using AndroidConnectivity = AndroidConnectivityManager::AndroidConnectivity;
|
||||
static const auto mapState = [](AndroidConnectivity state) {
|
||||
switch (state) {
|
||||
case AndroidConnectivity::Connected:
|
||||
return QNetworkInformation::Reachability::Online;
|
||||
case AndroidConnectivity::Disconnected:
|
||||
return QNetworkInformation::Reachability::Disconnected;
|
||||
case AndroidConnectivity::Unknown:
|
||||
default:
|
||||
return QNetworkInformation::Reachability::Unknown;
|
||||
}
|
||||
};
|
||||
|
||||
setReachability(mapState(connectivity));
|
||||
}
|
||||
|
||||
void QAndroidNetworkInformationBackend::updateTransportMedium(
|
||||
AndroidConnectivityManager::AndroidTransport transport)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,11 +56,13 @@ Q_GLOBAL_STATIC(AndroidConnectivityManagerInstance, androidConnManagerInstance)
|
|||
static const char networkInformationClass[] =
|
||||
"org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation";
|
||||
|
||||
static void networkConnectivityChanged(JNIEnv *env, jobject obj)
|
||||
static void networkConnectivityChanged(JNIEnv *env, jobject obj, jobject enumValue)
|
||||
{
|
||||
Q_UNUSED(env);
|
||||
Q_UNUSED(obj);
|
||||
Q_EMIT androidConnManagerInstance->connManager->connectivityChanged();
|
||||
const jint value = QJniObject(enumValue).callMethod<jint>("ordinal");
|
||||
const auto connectivity = static_cast<AndroidConnectivityManager::AndroidConnectivity>(value);
|
||||
Q_EMIT androidConnManagerInstance->connManager->connectivityChanged(connectivity);
|
||||
}
|
||||
|
||||
static void behindCaptivePortalChanged(JNIEnv *env, jobject obj, jboolean state)
|
||||
|
|
@ -110,30 +112,6 @@ AndroidConnectivityManager::~AndroidConnectivityManager()
|
|||
"(Landroid/content/Context;)V", QAndroidApplication::context());
|
||||
}
|
||||
|
||||
AndroidConnectivityManager::AndroidConnectivity AndroidConnectivityManager::networkConnectivity()
|
||||
{
|
||||
QJniEnvironment env;
|
||||
QJniObject networkReceiver(networkInformationClass);
|
||||
jclass clazz = env->GetObjectClass(networkReceiver.object());
|
||||
static const QByteArray functionSignature =
|
||||
QByteArray(QByteArray("()L") + networkInformationClass + "$AndroidConnectivity;");
|
||||
QJniObject enumObject =
|
||||
QJniObject::callStaticObjectMethod(clazz, "state", functionSignature.data());
|
||||
if (!enumObject.isValid())
|
||||
return AndroidConnectivityManager::AndroidConnectivity::Unknown;
|
||||
|
||||
QJniObject enumName = enumObject.callObjectMethod<jstring>("name");
|
||||
if (!enumName.isValid())
|
||||
return AndroidConnectivityManager::AndroidConnectivity::Unknown;
|
||||
|
||||
QString name = enumName.toString();
|
||||
if (name == u"Connected")
|
||||
return AndroidConnectivity::Connected;
|
||||
if (name == u"Disconnected")
|
||||
return AndroidConnectivity::Disconnected;
|
||||
return AndroidConnectivity::Unknown;
|
||||
}
|
||||
|
||||
bool AndroidConnectivityManager::registerNatives()
|
||||
{
|
||||
QJniEnvironment env;
|
||||
|
|
@ -141,12 +119,15 @@ bool AndroidConnectivityManager::registerNatives()
|
|||
if (!networkReceiver.isValid())
|
||||
return false;
|
||||
|
||||
const QByteArray connectivityEnumSig =
|
||||
QByteArray("(L") + networkInformationClass + "$AndroidConnectivity;)V";
|
||||
const QByteArray transportEnumSig =
|
||||
QByteArray("(L") + networkInformationClass + "$Transport;)V";
|
||||
|
||||
jclass clazz = env->GetObjectClass(networkReceiver.object());
|
||||
static JNINativeMethod methods[] = {
|
||||
{ "connectivityChanged", "()V", reinterpret_cast<void *>(networkConnectivityChanged) },
|
||||
{ "connectivityChanged", connectivityEnumSig.data(),
|
||||
reinterpret_cast<void *>(networkConnectivityChanged) },
|
||||
{ "behindCaptivePortalChanged", "(Z)V",
|
||||
reinterpret_cast<void *>(behindCaptivePortalChanged) },
|
||||
{ "transportMediumChanged", transportEnumSig.data(),
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ class AndroidConnectivityManager : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
// Keep synchronized with AndroidConnectivity in QtAndroidNetworkInformation.java
|
||||
enum class AndroidConnectivity { Connected, Unknown, Disconnected };
|
||||
Q_ENUM(AndroidConnectivity);
|
||||
|
||||
|
|
@ -68,11 +69,10 @@ public:
|
|||
static AndroidConnectivityManager *getInstance();
|
||||
~AndroidConnectivityManager();
|
||||
|
||||
AndroidConnectivity networkConnectivity();
|
||||
inline bool isValid() const { return m_connectivityManager.isValid(); }
|
||||
|
||||
Q_SIGNALS:
|
||||
void connectivityChanged();
|
||||
void connectivityChanged(AndroidConnectivity connectivity);
|
||||
void captivePortalChanged(bool state);
|
||||
void transportMediumChanged(AndroidTransport transport);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue