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

Commit dba33db5 authored by Hugo Benichi's avatar Hugo Benichi
Browse files

ConnectivityManager: remove obsolete callback types

This patch also:
  - suppresses callback triggers from ConnectivityService for these
    obsolete callback types.
  - marginally refactors callCallbackForRequest().

Test: runtest frameworks-net
Change-Id: Idfb75640732943c599de4975f252f706d21ad594
parent a0385686
Loading
Loading
Loading
Loading
+3 −17
Original line number Diff line number Diff line
@@ -2692,18 +2692,12 @@ public class ConnectivityManager {
    public static final int CALLBACK_CAP_CHANGED         = BASE + 6;
    /** @hide */
    public static final int CALLBACK_IP_CHANGED          = BASE + 7;
    // TODO: consider deleting CALLBACK_RELEASED and shifting following enum codes down by 1.
    /** @hide */
    public static final int CALLBACK_RELEASED            = BASE + 8;
    // TODO: consider deleting CALLBACK_EXIT and shifting following enum codes down by 1.
    /** @hide */
    public static final int CALLBACK_EXIT                = BASE + 9;
    /** @hide obj = NetworkCapabilities, arg1 = seq number */
    private static final int EXPIRE_LEGACY_REQUEST       = BASE + 10;
    private static final int EXPIRE_LEGACY_REQUEST       = BASE + 8;
    /** @hide */
    public static final int CALLBACK_SUSPENDED           = BASE + 11;
    public static final int CALLBACK_SUSPENDED           = BASE + 9;
    /** @hide */
    public static final int CALLBACK_RESUMED             = BASE + 12;
    public static final int CALLBACK_RESUMED             = BASE + 10;

    /** @hide */
    public static String getCallbackName(int whichCallback) {
@@ -2715,8 +2709,6 @@ public class ConnectivityManager {
            case CALLBACK_UNAVAIL:      return "CALLBACK_UNAVAIL";
            case CALLBACK_CAP_CHANGED:  return "CALLBACK_CAP_CHANGED";
            case CALLBACK_IP_CHANGED:   return "CALLBACK_IP_CHANGED";
            case CALLBACK_RELEASED:     return "CALLBACK_RELEASED";
            case CALLBACK_EXIT:         return "CALLBACK_EXIT";
            case EXPIRE_LEGACY_REQUEST: return "EXPIRE_LEGACY_REQUEST";
            case CALLBACK_SUSPENDED:    return "CALLBACK_SUSPENDED";
            case CALLBACK_RESUMED:      return "CALLBACK_RESUMED";
@@ -2810,12 +2802,6 @@ public class ConnectivityManager {
                    }
                    break;
                }
                case CALLBACK_RELEASED: {
                    break;
                }
                case CALLBACK_EXIT: {
                    break;
                }
                case EXPIRE_LEGACY_REQUEST: {
                    expireRequest((NetworkCapabilities)message.obj, message.arg1);
                    break;
+34 −24
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
@@ -2550,25 +2551,32 @@ public class ConnectivityService extends IConnectivityManager.Stub
    }

    private void handleTimedOutNetworkRequest(final NetworkRequestInfo nri) {
        if (mNetworkRequests.get(nri.request) != null && mNetworkForRequestId.get(
                nri.request.requestId) == null) {
            handleRemoveNetworkRequest(nri, ConnectivityManager.CALLBACK_UNAVAIL);
        if (mNetworkRequests.get(nri.request) == null) {
            return;
        }
        if (mNetworkForRequestId.get(nri.request.requestId) != null) {
            return;
        }

    private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) {
        final NetworkRequestInfo nri = getNriForAppRequest(
                request, callingUid, "release NetworkRequest");
        if (nri != null) {
            handleRemoveNetworkRequest(nri, ConnectivityManager.CALLBACK_RELEASED);
        if (VDBG || (DBG && nri.request.isRequest())) {
            log("releasing " + nri.request + " (timeout)");
        }
        handleRemoveNetworkRequest(nri);
        callCallbackForRequest(nri, null, ConnectivityManager.CALLBACK_UNAVAIL, 0);
    }

    private void handleRemoveNetworkRequest(final NetworkRequestInfo nri, final int whichCallback) {
        final String logCallbackType = ConnectivityManager.getCallbackName(whichCallback);
    private void handleReleaseNetworkRequest(NetworkRequest request, int callingUid) {
        final NetworkRequestInfo nri =
                getNriForAppRequest(request, callingUid, "release NetworkRequest");
        if (nri == null) {
            return;
        }
        if (VDBG || (DBG && nri.request.isRequest())) {
            log("releasing " + nri.request + " (" + logCallbackType + ")");
            log("releasing " + nri.request + " (release request)");
        }
        handleRemoveNetworkRequest(nri);
    }

    private void handleRemoveNetworkRequest(final NetworkRequestInfo nri) {
        nri.unlinkDeathRecipient();
        mNetworkRequests.remove(nri.request);
        synchronized (mUidToNetworkRequestCount) {
@@ -2664,7 +2672,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
                }
            }
        }
        callCallbackForRequest(nri, null, whichCallback, 0);
    }

    @Override
@@ -4722,16 +4729,17 @@ public class ConnectivityService extends IConnectivityManager.Stub
        releasePendingNetworkRequestWithDelay(pendingIntent);
    }

    private void callCallbackForRequest(NetworkRequestInfo nri,
    private static void callCallbackForRequest(NetworkRequestInfo nri,
            NetworkAgentInfo networkAgent, int notificationType, int arg1) {
        if (nri.messenger == null) return;  // Default request has no msgr
        if (nri.messenger == null) {
            return;  // Default request has no msgr
        }
        Bundle bundle = new Bundle();
        bundle.putParcelable(NetworkRequest.class.getSimpleName(),
                new NetworkRequest(nri.request));
        // TODO: check if defensive copies of data is needed.
        putParcelable(bundle, new NetworkRequest(nri.request));
        Message msg = Message.obtain();
        if (notificationType != ConnectivityManager.CALLBACK_UNAVAIL &&
                notificationType != ConnectivityManager.CALLBACK_RELEASED) {
            bundle.putParcelable(Network.class.getSimpleName(), networkAgent.network);
        if (notificationType != ConnectivityManager.CALLBACK_UNAVAIL) {
            putParcelable(bundle, networkAgent.network);
        }
        switch (notificationType) {
            case ConnectivityManager.CALLBACK_LOSING: {
@@ -4739,13 +4747,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
                break;
            }
            case ConnectivityManager.CALLBACK_CAP_CHANGED: {
                bundle.putParcelable(NetworkCapabilities.class.getSimpleName(),
                        new NetworkCapabilities(networkAgent.networkCapabilities));
                putParcelable(bundle, new NetworkCapabilities(networkAgent.networkCapabilities));
                break;
            }
            case ConnectivityManager.CALLBACK_IP_CHANGED: {
                bundle.putParcelable(LinkProperties.class.getSimpleName(),
                        new LinkProperties(networkAgent.linkProperties));
                putParcelable(bundle, new LinkProperties(networkAgent.linkProperties));
                break;
            }
        }
@@ -4763,6 +4769,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
        }
    }

    private static <T extends Parcelable> void putParcelable(Bundle bundle, T t) {
        bundle.putParcelable(t.getClass().getSimpleName(), t);
    }

    private void teardownUnneededNetwork(NetworkAgentInfo nai) {
        if (nai.numRequestNetworkRequests() != 0) {
            for (int i = 0; i < nai.numNetworkRequests(); i++) {