Loading core/java/android/net/ConnectivityManager.java +36 −64 Original line number Original line Diff line number Diff line Loading @@ -2259,116 +2259,82 @@ public class ConnectivityManager { @Override @Override public void handleMessage(Message message) { public void handleMessage(Message message) { Log.d(TAG, "CM callback handler got msg " + message.what); Log.d(TAG, "CM callback handler got msg " + message.what); NetworkRequest request = (NetworkRequest) getObject(message, NetworkRequest.class); Network network = (Network) getObject(message, Network.class); switch (message.what) { switch (message.what) { case CALLBACK_PRECHECK: { case CALLBACK_PRECHECK: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "PRECHECK"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); callback.onPreCheck(network); if (callbacks != null) { callbacks.onPreCheck((Network)getObject(message, Network.class)); } else { Log.e(TAG, "callback not found for PRECHECK message"); } } break; break; } } case CALLBACK_AVAILABLE: { case CALLBACK_AVAILABLE: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "AVAILABLE"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); callback.onAvailable(network); if (callbacks != null) { callbacks.onAvailable((Network)getObject(message, Network.class)); } else { Log.e(TAG, "callback not found for AVAILABLE message"); } } break; break; } } case CALLBACK_LOSING: { case CALLBACK_LOSING: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "LOSING"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); callback.onLosing(network, message.arg1); if (callbacks != null) { callbacks.onLosing((Network)getObject(message, Network.class), message.arg1); } else { Log.e(TAG, "callback not found for LOSING message"); } } break; break; } } case CALLBACK_LOST: { case CALLBACK_LOST: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "LOST"); NetworkRequest.class); if (callback != null) { callback.onLost(network); NetworkCallback callbacks = getCallbacks(request); if (callbacks != null) { callbacks.onLost((Network)getObject(message, Network.class)); } else { Log.e(TAG, "callback not found for LOST message"); } } break; break; } } case CALLBACK_UNAVAIL: { case CALLBACK_UNAVAIL: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "UNAVAIL"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = null; callback.onUnavailable(); synchronized(mCallbackMap) { callbacks = mCallbackMap.get(request); } if (callbacks != null) { callbacks.onUnavailable(); } else { Log.e(TAG, "callback not found for UNAVAIL message"); } } break; break; } } case CALLBACK_CAP_CHANGED: { case CALLBACK_CAP_CHANGED: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "CAP_CHANGED"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); if (callbacks != null) { Network network = (Network)getObject(message, Network.class); NetworkCapabilities cap = (NetworkCapabilities)getObject(message, NetworkCapabilities cap = (NetworkCapabilities)getObject(message, NetworkCapabilities.class); NetworkCapabilities.class); callbacks.onCapabilitiesChanged(network, cap); callback.onCapabilitiesChanged(network, cap); } else { Log.e(TAG, "callback not found for CAP_CHANGED message"); } } break; break; } } case CALLBACK_IP_CHANGED: { case CALLBACK_IP_CHANGED: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "IP_CHANGED"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); if (callbacks != null) { Network network = (Network)getObject(message, Network.class); LinkProperties lp = (LinkProperties)getObject(message, LinkProperties lp = (LinkProperties)getObject(message, LinkProperties.class); LinkProperties.class); callbacks.onLinkPropertiesChanged(network, lp); callback.onLinkPropertiesChanged(network, lp); } else { Log.e(TAG, "callback not found for IP_CHANGED message"); } } break; break; } } case CALLBACK_RELEASED: { case CALLBACK_RELEASED: { NetworkRequest req = (NetworkRequest)getObject(message, NetworkRequest.class); NetworkCallback callback = null; NetworkCallback callbacks = null; synchronized(mCallbackMap) { synchronized(mCallbackMap) { callbacks = mCallbackMap.remove(req); callback = mCallbackMap.remove(request); } } if (callbacks != null) { if (callback != null) { synchronized(mRefCount) { synchronized(mRefCount) { if (mRefCount.decrementAndGet() == 0) { if (mRefCount.decrementAndGet() == 0) { getLooper().quit(); getLooper().quit(); } } } } } else { } else { Log.e(TAG, "callback not found for CANCELED message"); Log.e(TAG, "callback not found for RELEASED message"); } } break; break; } } case CALLBACK_EXIT: { case CALLBACK_EXIT: { Log.d(TAG, "Listener quiting"); Log.d(TAG, "Listener quitting"); getLooper().quit(); getLooper().quit(); break; break; } } Loading @@ -2382,10 +2348,16 @@ public class ConnectivityManager { private Object getObject(Message msg, Class c) { private Object getObject(Message msg, Class c) { return msg.getData().getParcelable(c.getSimpleName()); return msg.getData().getParcelable(c.getSimpleName()); } } private NetworkCallback getCallbacks(NetworkRequest req) { private NetworkCallback getCallback(NetworkRequest req, String name) { NetworkCallback callback; synchronized(mCallbackMap) { synchronized(mCallbackMap) { return mCallbackMap.get(req); callback = mCallbackMap.get(req); } if (callback == null) { Log.e(TAG, "callback not found for " + name + " message"); } } return callback; } } } } Loading Loading
core/java/android/net/ConnectivityManager.java +36 −64 Original line number Original line Diff line number Diff line Loading @@ -2259,116 +2259,82 @@ public class ConnectivityManager { @Override @Override public void handleMessage(Message message) { public void handleMessage(Message message) { Log.d(TAG, "CM callback handler got msg " + message.what); Log.d(TAG, "CM callback handler got msg " + message.what); NetworkRequest request = (NetworkRequest) getObject(message, NetworkRequest.class); Network network = (Network) getObject(message, Network.class); switch (message.what) { switch (message.what) { case CALLBACK_PRECHECK: { case CALLBACK_PRECHECK: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "PRECHECK"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); callback.onPreCheck(network); if (callbacks != null) { callbacks.onPreCheck((Network)getObject(message, Network.class)); } else { Log.e(TAG, "callback not found for PRECHECK message"); } } break; break; } } case CALLBACK_AVAILABLE: { case CALLBACK_AVAILABLE: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "AVAILABLE"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); callback.onAvailable(network); if (callbacks != null) { callbacks.onAvailable((Network)getObject(message, Network.class)); } else { Log.e(TAG, "callback not found for AVAILABLE message"); } } break; break; } } case CALLBACK_LOSING: { case CALLBACK_LOSING: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "LOSING"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); callback.onLosing(network, message.arg1); if (callbacks != null) { callbacks.onLosing((Network)getObject(message, Network.class), message.arg1); } else { Log.e(TAG, "callback not found for LOSING message"); } } break; break; } } case CALLBACK_LOST: { case CALLBACK_LOST: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "LOST"); NetworkRequest.class); if (callback != null) { callback.onLost(network); NetworkCallback callbacks = getCallbacks(request); if (callbacks != null) { callbacks.onLost((Network)getObject(message, Network.class)); } else { Log.e(TAG, "callback not found for LOST message"); } } break; break; } } case CALLBACK_UNAVAIL: { case CALLBACK_UNAVAIL: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "UNAVAIL"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = null; callback.onUnavailable(); synchronized(mCallbackMap) { callbacks = mCallbackMap.get(request); } if (callbacks != null) { callbacks.onUnavailable(); } else { Log.e(TAG, "callback not found for UNAVAIL message"); } } break; break; } } case CALLBACK_CAP_CHANGED: { case CALLBACK_CAP_CHANGED: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "CAP_CHANGED"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); if (callbacks != null) { Network network = (Network)getObject(message, Network.class); NetworkCapabilities cap = (NetworkCapabilities)getObject(message, NetworkCapabilities cap = (NetworkCapabilities)getObject(message, NetworkCapabilities.class); NetworkCapabilities.class); callbacks.onCapabilitiesChanged(network, cap); callback.onCapabilitiesChanged(network, cap); } else { Log.e(TAG, "callback not found for CAP_CHANGED message"); } } break; break; } } case CALLBACK_IP_CHANGED: { case CALLBACK_IP_CHANGED: { NetworkRequest request = (NetworkRequest)getObject(message, NetworkCallback callback = getCallback(request, "IP_CHANGED"); NetworkRequest.class); if (callback != null) { NetworkCallback callbacks = getCallbacks(request); if (callbacks != null) { Network network = (Network)getObject(message, Network.class); LinkProperties lp = (LinkProperties)getObject(message, LinkProperties lp = (LinkProperties)getObject(message, LinkProperties.class); LinkProperties.class); callbacks.onLinkPropertiesChanged(network, lp); callback.onLinkPropertiesChanged(network, lp); } else { Log.e(TAG, "callback not found for IP_CHANGED message"); } } break; break; } } case CALLBACK_RELEASED: { case CALLBACK_RELEASED: { NetworkRequest req = (NetworkRequest)getObject(message, NetworkRequest.class); NetworkCallback callback = null; NetworkCallback callbacks = null; synchronized(mCallbackMap) { synchronized(mCallbackMap) { callbacks = mCallbackMap.remove(req); callback = mCallbackMap.remove(request); } } if (callbacks != null) { if (callback != null) { synchronized(mRefCount) { synchronized(mRefCount) { if (mRefCount.decrementAndGet() == 0) { if (mRefCount.decrementAndGet() == 0) { getLooper().quit(); getLooper().quit(); } } } } } else { } else { Log.e(TAG, "callback not found for CANCELED message"); Log.e(TAG, "callback not found for RELEASED message"); } } break; break; } } case CALLBACK_EXIT: { case CALLBACK_EXIT: { Log.d(TAG, "Listener quiting"); Log.d(TAG, "Listener quitting"); getLooper().quit(); getLooper().quit(); break; break; } } Loading @@ -2382,10 +2348,16 @@ public class ConnectivityManager { private Object getObject(Message msg, Class c) { private Object getObject(Message msg, Class c) { return msg.getData().getParcelable(c.getSimpleName()); return msg.getData().getParcelable(c.getSimpleName()); } } private NetworkCallback getCallbacks(NetworkRequest req) { private NetworkCallback getCallback(NetworkRequest req, String name) { NetworkCallback callback; synchronized(mCallbackMap) { synchronized(mCallbackMap) { return mCallbackMap.get(req); callback = mCallbackMap.get(req); } if (callback == null) { Log.e(TAG, "callback not found for " + name + " message"); } } return callback; } } } } Loading