Merge "Fixed NPE when local or remote port range does not exist" am: 4e6d04a608 am: f4e93e2890

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1944225

Change-Id: Iea1531d9ca76e1df07442d2b3a286bf7ce475cb8
diff --git a/telephony/java/android/telephony/data/QosBearerFilter.java b/telephony/java/android/telephony/data/QosBearerFilter.java
index 5f5762b..d6f0cb0 100644
--- a/telephony/java/android/telephony/data/QosBearerFilter.java
+++ b/telephony/java/android/telephony/data/QosBearerFilter.java
@@ -18,6 +18,7 @@
 
 import android.annotation.IntDef;
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.net.LinkAddress;
 import android.os.Parcel;
 import android.os.Parcelable;
@@ -35,11 +36,10 @@
  * @hide
  */
 public final class QosBearerFilter implements Parcelable {
-
-    private List<LinkAddress> localAddresses;
-    private List<LinkAddress> remoteAddresses;
-    private PortRange localPort;
-    private PortRange remotePort;
+    private @NonNull List<LinkAddress> localAddresses;
+    private @NonNull List<LinkAddress> remoteAddresses;
+    private @Nullable PortRange localPort;
+    private @Nullable PortRange remotePort;
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
@@ -56,13 +56,12 @@
     public static final int QOS_PROTOCOL_AH = android.hardware.radio.V1_6.QosProtocol.AH;
     public static final int QOS_MIN_PORT = android.hardware.radio.V1_6.QosPortRange.MIN;
     /**
-     * Hardcoded inplace of android.hardware.radio.V1_6.QosPortRange.MAX as it
+     * Hardcoded in place of android.hardware.radio.V1_6.QosPortRange.MAX as it
      * returns -1 due to uint16_t to int conversion in java. (TODO: Fix the HAL)
      */
     public static final int QOS_MAX_PORT = 65535; // android.hardware.radio.V1_6.QosPortRange.MIN;
 
-    @QosProtocol
-    private int protocol;
+    private @QosProtocol int protocol;
 
     private int typeOfServiceMask;
 
@@ -85,8 +84,7 @@
     public static final int QOS_FILTER_DIRECTION_BIDIRECTIONAL =
             android.hardware.radio.V1_6.QosFilterDirection.BIDIRECTIONAL;
 
-    @QosBearerFilterDirection
-    private int filterDirection;
+    private @QosBearerFilterDirection int filterDirection;
 
     /**
      * Specified the order in which the filter needs to be matched.
@@ -94,9 +92,10 @@
      */
     private int precedence;
 
-    public QosBearerFilter(List<LinkAddress> localAddresses, List<LinkAddress> remoteAddresses,
-            PortRange localPort, PortRange remotePort, int protocol, int tos,
-            long flowLabel, long spi, int direction, int precedence) {
+    public QosBearerFilter(@NonNull List<LinkAddress> localAddresses,
+            @NonNull List<LinkAddress> remoteAddresses, @Nullable PortRange localPort,
+            @Nullable PortRange remotePort, @QosProtocol int protocol, int tos, long flowLabel,
+            long spi, @QosBearerFilterDirection int direction, int precedence) {
         this.localAddresses = new ArrayList<>();
         this.localAddresses.addAll(localAddresses);
         this.remoteAddresses = new ArrayList<>();
@@ -111,19 +110,19 @@
         this.precedence = precedence;
     }
 
-    public List<LinkAddress> getLocalAddresses() {
+    public @NonNull List<LinkAddress> getLocalAddresses() {
         return localAddresses;
     }
 
-    public List<LinkAddress> getRemoteAddresses() {
+    public @NonNull List<LinkAddress> getRemoteAddresses() {
         return remoteAddresses;
     }
 
-    public PortRange getLocalPortRange() {
+    public @Nullable PortRange getLocalPortRange() {
         return localPort;
     }
 
-    public PortRange getRemotePortRange() {
+    public @Nullable PortRange getRemotePortRange() {
         return remotePort;
     }
 
@@ -245,8 +244,8 @@
                 && localAddresses.containsAll(other.localAddresses)
                 && remoteAddresses.size() == other.remoteAddresses.size()
                 && remoteAddresses.containsAll(other.remoteAddresses)
-                && localPort.equals(other.localPort)
-                && remotePort.equals(other.remotePort)
+                && Objects.equals(localPort, other.localPort)
+                && Objects.equals(remotePort, other.remotePort)
                 && protocol == other.protocol
                 && typeOfServiceMask == other.typeOfServiceMask
                 && flowLabel == other.flowLabel