use shell to open v4 signature file

BUG: 133435829
Test: atest PackageManagerShellCommandIncrementalTest
Change-Id: I8e57b00f042f8b6c85d5f905460dd2da6199accc
(cherry picked from commit cdbcb34c2babcd2523acbe3d359855fe1155e7c3)
diff --git a/core/java/android/os/incremental/V4Signature.java b/core/java/android/os/incremental/V4Signature.java
index 17adfc8..6d334f5 100644
--- a/core/java/android/os/incremental/V4Signature.java
+++ b/core/java/android/os/incremental/V4Signature.java
@@ -16,12 +16,12 @@
 
 package android.os.incremental;
 
+import android.os.ParcelFileDescriptor;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 
 /**
@@ -41,11 +41,12 @@
     /**
      * Construct a V4Signature from .idsig file.
      */
-    public static V4Signature readFrom(File file) {
-        try (DataInputStream stream = new DataInputStream(new FileInputStream(file))) {
+    public static V4Signature readFrom(ParcelFileDescriptor pfd) throws IOException {
+        final ParcelFileDescriptor dupedFd = pfd.dup();
+        final ParcelFileDescriptor.AutoCloseInputStream fdInputStream =
+                new ParcelFileDescriptor.AutoCloseInputStream(dupedFd);
+        try (DataInputStream stream = new DataInputStream(fdInputStream)) {
             return readFrom(stream);
-        } catch (IOException e) {
-            return null;
         }
     }