ConnectivityMonitor.java 源代码
package com.unity3d.services.core.connectivity;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
import com.unity3d.services.core.log.DeviceLog;
import com.unity3d.services.core.properties.ClientProperties;
import com.unity3d.services.core.webview.WebViewApp;
import com.unity3d.services.core.webview.WebViewEventCategory;
import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class ConnectivityMonitor {
private static int _connected = -1;
private static Set<IConnectivityListener> _listeners = null;
private static boolean _listening = false;
private static int _networkType = -1;
private static boolean _webappMonitoring;
private static boolean _wifi;
public static class AnonymousClass1 {
static final int[] $SwitchMap$com$unity3d$services$core$connectivity$ConnectivityEvent;
static {
int[] iArr = new int[ConnectivityEvent.values().length];
$SwitchMap$com$unity3d$services$core$connectivity$ConnectivityEvent = iArr;
try {
iArr[ConnectivityEvent.CONNECTED.ordinal()] = 1;
} catch (NoSuchFieldError unused) {
}
try {
$SwitchMap$com$unity3d$services$core$connectivity$ConnectivityEvent[ConnectivityEvent.DISCONNECTED.ordinal()] = 2;
} catch (NoSuchFieldError unused2) {
}
try {
$SwitchMap$com$unity3d$services$core$connectivity$ConnectivityEvent[ConnectivityEvent.NETWORK_CHANGE.ordinal()] = 3;
} catch (NoSuchFieldError unused3) {
}
}
}
public static void addListener(IConnectivityListener iConnectivityListener) {
if (_listeners == null) {
_listeners = Collections.newSetFromMap(new ConcurrentHashMap());
}
_listeners.add(iConnectivityListener);
updateListeningStatus();
}
public static void connected() {
if (_connected == 1) {
return;
}
DeviceLog.debug("Unity Ads connectivity change: connected");
initConnectionStatus();
Set<IConnectivityListener> set = _listeners;
if (set != null) {
Iterator<IConnectivityListener> it = set.iterator();
while (it.hasNext()) {
it.next().onConnected();
}
}
sendToWebview(ConnectivityEvent.CONNECTED, _wifi, _networkType);
}
public static void connectionStatusChanged() {
NetworkInfo activeNetworkInfo;
int i6;
boolean z6 = true;
if (_connected == 1 && (activeNetworkInfo = ((ConnectivityManager) ClientProperties.getApplicationContext().getSystemService("connectivity")).getActiveNetworkInfo()) != null && activeNetworkInfo.isConnected()) {
if (activeNetworkInfo.getType() != 1) {
z6 = false;
}
try {
i6 = ((TelephonyManager) ClientProperties.getApplicationContext().getSystemService("phone")).getNetworkType();
} catch (SecurityException unused) {
DeviceLog.warning("Unity Ads was not able to get current network type due to missing permission");
i6 = -1;
}
boolean z7 = _wifi;
if (z6 == z7 && (i6 == _networkType || z7)) {
return;
}
_wifi = z6;
_networkType = i6;
DeviceLog.debug("Unity Ads connectivity change: network change");
sendToWebview(ConnectivityEvent.NETWORK_CHANGE, z6, i6);
}
}
public static void disconnected() {
if (_connected == 0) {
return;
}
_connected = 0;
DeviceLog.debug("Unity Ads connectivity change: disconnected");
Set<IConnectivityListener> set = _listeners;
if (set != null) {
Iterator<IConnectivityListener> it = set.iterator();
while (it.hasNext()) {
it.next().onDisconnected();
}
}
sendToWebview(ConnectivityEvent.DISCONNECTED, false, 0);
}
private static void initConnectionStatus() {
ConnectivityManager connectivityManager = (ConnectivityManager) ClientProperties.getApplicationContext().getSystemService("connectivity");
if (connectivityManager == null) {
return;
}
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
boolean z6 = false;
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
_connected = 1;
if (activeNetworkInfo.getType() == 1) {
z6 = true;
}
_wifi = z6;
if (!z6) {
try {
_networkType = ((TelephonyManager) ClientProperties.getApplicationContext().getSystemService("phone")).getNetworkType();
return;
} catch (SecurityException unused) {
DeviceLog.warning("Unity Ads was not able to get current network type due to missing permission");
return;
}
}
return;
}
_connected = 0;
}
public static void removeListener(IConnectivityListener iConnectivityListener) {
Set<IConnectivityListener> set = _listeners;
if (set == null) {
return;
}
set.remove(iConnectivityListener);
updateListeningStatus();
}
private static void sendToWebview(ConnectivityEvent connectivityEvent, boolean z6, int i6) {
WebViewApp currentApp;
if (_webappMonitoring && (currentApp = WebViewApp.getCurrentApp()) != null && currentApp.isWebAppLoaded()) {
int i7 = AnonymousClass1.$SwitchMap$com$unity3d$services$core$connectivity$ConnectivityEvent[connectivityEvent.ordinal()];
if (i7 != 1) {
if (i7 != 2) {
if (i7 == 3) {
if (z6) {
currentApp.sendEvent(WebViewEventCategory.CONNECTIVITY, ConnectivityEvent.NETWORK_CHANGE, Boolean.valueOf(z6), 0);
return;
} else {
currentApp.sendEvent(WebViewEventCategory.CONNECTIVITY, ConnectivityEvent.NETWORK_CHANGE, Boolean.valueOf(z6), Integer.valueOf(i6));
return;
}
}
return;
}
currentApp.sendEvent(WebViewEventCategory.CONNECTIVITY, ConnectivityEvent.DISCONNECTED, new Object[0]);
return;
}
if (z6) {
currentApp.sendEvent(WebViewEventCategory.CONNECTIVITY, ConnectivityEvent.CONNECTED, Boolean.valueOf(z6), 0);
} else {
currentApp.sendEvent(WebViewEventCategory.CONNECTIVITY, ConnectivityEvent.CONNECTED, Boolean.valueOf(z6), Integer.valueOf(i6));
}
}
}
public static void setConnectionMonitoring(boolean z6) {
_webappMonitoring = z6;
updateListeningStatus();
}
private static void startListening() {
if (_listening) {
return;
}
_listening = true;
initConnectionStatus();
ConnectivityNetworkCallback.register();
}
public static void stopAll() {
_listeners = null;
_webappMonitoring = false;
updateListeningStatus();
}
private static void stopListening() {
if (!_listening) {
return;
}
_listening = false;
ConnectivityNetworkCallback.unregister();
}
private static void updateListeningStatus() {
Set<IConnectivityListener> set;
if (!_webappMonitoring && ((set = _listeners) == null || set.isEmpty())) {
stopListening();
} else {
startListening();
}
}
}