Reapply "Allow spoofing signingInfo for microG Companion/Services"

- Spoof PackageInfo signingInfo + signatures so that
  G suite apps do not complain anymore.

Compared to the previous CalyxOS patch, this fixes:
E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
E AndroidRuntime: java.lang.NullPointerException: Attempt to read from field 'android.content.pm.Signature[] android.content.pm.PackageInfo.signatures' on a null object reference in method 'android.content.pm.PackageInfo com.android.server.pm.ComputerEngine.generatePackageInfo(com.android.server.pm.pkg.PackageStateInternal, long, int)'

Co-authored-by: althafvly <althafvly@gmail.com>
Co-authored-by: Michael Bestas <mkbestas@gmail.com>
Original-Change-Id: I86f182c9e1d18b0e997803842577a90ef740cfd1
Change-Id: Ie480255ed3bd80809803698752cafb3a2ecc3a33
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 64c0b9d..83ddb9f 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -167,6 +167,7 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.nio.charset.StandardCharsets;
+import java.security.cert.CertificateException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -1544,6 +1545,21 @@
                 return null;
             }
 
+            if (isMicroG) {
+                try {
+                    packageInfo.signingInfo = new SigningInfo(
+                            new SigningDetails(
+                                    packageInfo.signatures,
+                                    SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V3,
+                                    SigningDetails.toSigningKeys(packageInfo.signatures),
+                                    null
+                            )
+                    );
+                } catch (CertificateException e) {
+                    Slog.e(TAG, "Caught an exception when creating signing keys: ", e);
+                }
+            }
+
             packageInfo.packageName = packageInfo.applicationInfo.packageName =
                     resolveExternalPackageName(p);