Use separate catch for getTcpKeepalivePacket

Having a combined catch block causes the code to be "optimized" by R8 to
just throw a NullPointerException, with smali code:

  const/4 p0, 0x0
  throw p0

Workaround the issue by having separate catch blocks instead.

Bug: 217391956
Bug: 226127213
Test: atest ConnectivityManagerTest
Change-Id: Ib51fc66c44e1c2baa1f7ba4d1b0c2d1c94c3591d
diff --git a/service/src/com/android/server/connectivity/TcpKeepaliveController.java b/service/src/com/android/server/connectivity/TcpKeepaliveController.java
index acfbb3c..a9cb2fa 100644
--- a/service/src/com/android/server/connectivity/TcpKeepaliveController.java
+++ b/service/src/com/android/server/connectivity/TcpKeepaliveController.java
@@ -124,7 +124,12 @@
             final TcpKeepalivePacketDataParcelable tcpDetails = switchToRepairMode(fd);
             // TODO: consider building a TcpKeepalivePacketData directly from switchToRepairMode
             return fromStableParcelable(tcpDetails);
-        } catch (InvalidPacketException | InvalidSocketException e) {
+        // Use separate catch blocks: a combined catch would get wrongly optimized by R8
+        // (b/226127213).
+        } catch (InvalidSocketException e) {
+            switchOutOfRepairMode(fd);
+            throw e;
+        } catch (InvalidPacketException e) {
             switchOutOfRepairMode(fd);
             throw e;
         }