Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db95a609 authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

Simplify network callback handling code.

Change-Id: I2490ad754bf2a1282f27302c8556fb19983cc6b1
parent 0708693f
Loading
Loading
Loading
Loading
+36 −64
Original line number Original line Diff line number Diff line
@@ -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;
                }
                }
@@ -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;
        }
        }
    }
    }