Merge \"Unbreak unregisterNetworkCallback.\" into nyc-mr1-dev
am: f9b050ed9e

Change-Id: I35ee16554e17c503b1f5628629c2c0a48d85d399
diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java
index 5ac24d5..847d82b 100644
--- a/core/java/android/net/NetworkRequest.java
+++ b/core/java/android/net/NetworkRequest.java
@@ -19,6 +19,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
+import java.util.Objects;
+
 /**
  * Defines a request for a network, made through {@link NetworkRequest.Builder} and used
  * to request a network via {@link ConnectivityManager#requestNetwork} or listen for changes
@@ -264,7 +266,7 @@
         dest.writeParcelable(networkCapabilities, flags);
         dest.writeInt(legacyType);
         dest.writeInt(requestId);
-        // type intentionally not preserved across process boundaries.
+        dest.writeString(type.name());
     }
     public static final Creator<NetworkRequest> CREATOR =
         new Creator<NetworkRequest>() {
@@ -272,8 +274,8 @@
                 NetworkCapabilities nc = (NetworkCapabilities)in.readParcelable(null);
                 int legacyType = in.readInt();
                 int requestId = in.readInt();
-                // type intentionally not preserved across process boundaries.
-                NetworkRequest result = new NetworkRequest(nc, legacyType, requestId, Type.NONE);
+                Type type = Type.valueOf(in.readString());  // IllegalArgumentException if invalid.
+                NetworkRequest result = new NetworkRequest(nc, legacyType, requestId, type);
                 return result;
             }
             public NetworkRequest[] newArray(int size) {
@@ -311,13 +313,10 @@
         return (that.legacyType == this.legacyType &&
                 that.requestId == this.requestId &&
                 that.type == this.type &&
-                ((that.networkCapabilities == null && this.networkCapabilities == null) ||
-                 (that.networkCapabilities != null &&
-                  that.networkCapabilities.equals(this.networkCapabilities))));
+                Objects.equals(that.networkCapabilities, this.networkCapabilities));
     }
 
     public int hashCode() {
-        return requestId + (legacyType * 1013) +
-                (networkCapabilities.hashCode() * 1051) + type.hashCode() * 17;
+        return Objects.hash(requestId, legacyType, networkCapabilities, type);
     }
 }
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 3fb35d6..fb5b3f8 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -3836,6 +3836,13 @@
         }
     }
 
+    private void ensureNetworkRequestHasType(NetworkRequest request) {
+        if (request.type == NetworkRequest.Type.NONE) {
+            throw new IllegalArgumentException(
+                    "All NetworkRequests in ConnectivityService must have a type");
+        }
+    }
+
     /**
      * Tracks info about the requester.
      * Also used to notice when the calling process dies so we can self-expire
@@ -3851,7 +3858,7 @@
 
         NetworkRequestInfo(NetworkRequest r, PendingIntent pi) {
             request = r;
-            ensureRequestHasType();
+            ensureNetworkRequestHasType(request);
             mPendingIntent = pi;
             messenger = null;
             mBinder = null;
@@ -3864,7 +3871,7 @@
             super();
             messenger = m;
             request = r;
-            ensureRequestHasType();
+            ensureNetworkRequestHasType(request);
             mBinder = binder;
             mPid = getCallingPid();
             mUid = getCallingUid();
@@ -3878,13 +3885,6 @@
             }
         }
 
-        private void ensureRequestHasType() {
-            if (request.type == NetworkRequest.Type.NONE) {
-                throw new IllegalArgumentException(
-                        "All NetworkRequests in ConnectivityService must have a type");
-            }
-        }
-
         private void enforceRequestCountLimit() {
             synchronized (mUidToNetworkRequestCount) {
                 int networkRequests = mUidToNetworkRequestCount.get(mUid, 0) + 1;
@@ -4138,6 +4138,7 @@
 
     @Override
     public void releaseNetworkRequest(NetworkRequest networkRequest) {
+        ensureNetworkRequestHasType(networkRequest);
         mHandler.sendMessage(mHandler.obtainMessage(EVENT_RELEASE_NETWORK_REQUEST, getCallingUid(),
                 0, networkRequest));
     }