Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51432796 authored by Narayan Kamath's avatar Narayan Kamath Committed by android-build-merger
Browse files

Merge "PackageManagerService: Change getCompressedFiles to reflect the new layout." into oc-mr1-dev

am: 169a6516

Change-Id: Ia24b10abb0aa30f088cad00b2e4d56e95f136922
parents b0c86534 169a6516
Loading
Loading
Loading
Loading
+39 −3
Original line number Diff line number Diff line
@@ -456,6 +456,8 @@ public class PackageManagerService extends IPackageManager.Stub
    private static final String STATIC_SHARED_LIB_DELIMITER = "_";
    /** Extension of the compressed packages */
    private final static String COMPRESSED_EXTENSION = ".gz";
    /** Suffix of stub packages on the system partition */
    private final static String STUB_SUFFIX = "-Stub";
    private static final int[] EMPTY_INT_ARRAY = new int[0];
@@ -3191,12 +3193,46 @@ public class PackageManagerService extends IPackageManager.Stub
    }
    private File[] getCompressedFiles(String codePath) {
        return new File(codePath).listFiles(new FilenameFilter() {
        final File stubCodePath = new File(codePath);
        final String stubName = stubCodePath.getName();
        // The layout of a compressed package on a given partition is as follows :
        //
        // Compressed artifacts:
        //
        // /partition/ModuleName/foo.gz
        // /partation/ModuleName/bar.gz
        //
        // Stub artifact:
        //
        // /partition/ModuleName-Stub/ModuleName-Stub.apk
        //
        // In other words, stub is on the same partition as the compressed artifacts
        // and in a directory that's suffixed with "-Stub".
        int idx = stubName.lastIndexOf(STUB_SUFFIX);
        if (idx < 0 || (stubName.length() != (idx + STUB_SUFFIX.length()))) {
            return null;
        }
        final File stubParentDir = stubCodePath.getParentFile();
        if (stubParentDir == null) {
            Slog.e(TAG, "Unable to determine stub parent dir for codePath: " + codePath);
            return null;
        }
        final File compressedPath = new File(stubParentDir, stubName.substring(0, idx));
        final File[] files = compressedPath.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.toLowerCase().endsWith(COMPRESSED_EXTENSION);
            }
        });
        if (DEBUG_COMPRESSION && files != null && files.length > 0) {
            Slog.i(TAG, "getCompressedFiles[" + codePath + "]: " + Arrays.toString(files));
        }
        return files;
    }
    private boolean compressedFileExists(String codePath) {
@@ -3213,7 +3249,7 @@ public class PackageManagerService extends IPackageManager.Stub
        final File[] compressedFiles = getCompressedFiles(pkg.codePath);
        if (compressedFiles == null || compressedFiles.length == 0) {
            if (DEBUG_COMPRESSION) {
                Slog.i(TAG, "No files to decompress");
                Slog.i(TAG, "No files to decompress: " + pkg.baseCodePath);
            }
            return null;
        }
@@ -11079,7 +11115,7 @@ public class PackageManagerService extends IPackageManager.Stub
                    r.info.encryptionAware = r.info.directBootAware = true;
                }
            }
            if (compressedFileExists(pkg.baseCodePath)) {
            if (compressedFileExists(pkg.codePath)) {
                pkg.isStub = true;
            }
        } else {