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

Commit ee379aac authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Fix issue #2512507: Shortcuts and Widgets lost on upgrading from Eclair to FRE70D"

parents 8ee1d97c 806da1d4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -353,6 +353,7 @@ public class PackageParser {
    public final static int PARSE_IGNORE_PROCESSES = 1<<3;
    public final static int PARSE_FORWARD_LOCK = 1<<4;
    public final static int PARSE_ON_SDCARD = 1<<5;
    public final static int PARSE_IS_SYSTEM_DIR = 1<<6;

    public int getParseError() {
        return mParseError;
+11 −24
Original line number Diff line number Diff line
@@ -851,7 +851,8 @@ class PackageManagerService extends IPackageManager.Stub {
            mFrameworkInstallObserver = new AppDirObserver(
                mFrameworkDir.getPath(), OBSERVER_EVENTS, true);
            mFrameworkInstallObserver.startWatching();
            scanDirLI(mFrameworkDir, PackageParser.PARSE_IS_SYSTEM,
            scanDirLI(mFrameworkDir, PackageParser.PARSE_IS_SYSTEM
                    | PackageParser.PARSE_IS_SYSTEM_DIR,
                    scanMode | SCAN_NO_DEX);
            
            // Collect all system packages.
@@ -859,7 +860,8 @@ class PackageManagerService extends IPackageManager.Stub {
            mSystemInstallObserver = new AppDirObserver(
                mSystemAppDir.getPath(), OBSERVER_EVENTS, true);
            mSystemInstallObserver.startWatching();
            scanDirLI(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM, scanMode);
            scanDirLI(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM
                    | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode);
            
            if (mInstaller != null) {
                if (DEBUG_UPGRADE) Log.v(TAG, "Running installd update commands");
@@ -2711,8 +2713,6 @@ class PackageManagerService extends IPackageManager.Stub {
        SharedUserSetting suid = null;
        PackageSetting pkgSetting = null;

        boolean removeExisting = false;

        if ((pkg.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) {
            // Only system apps can use these features.
            pkg.mOriginalPackages = null;
@@ -2903,7 +2903,7 @@ class PackageManagerService extends IPackageManager.Stub {

            if (!verifySignaturesLP(pkgSetting, pkg, parseFlags,
                    (scanMode&SCAN_UPDATE_SIGNATURE) != 0)) {
                if ((parseFlags&PackageParser.PARSE_IS_SYSTEM) == 0) {
                if ((parseFlags&PackageParser.PARSE_IS_SYSTEM_DIR) == 0) {
                    mLastScanError = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
                    return null;
                }
@@ -2922,7 +2922,10 @@ class PackageManagerService extends IPackageManager.Stub {
                        return null;
                    }
                }
                removeExisting = true;
                // File a report about this.
                String msg = "System package " + pkg.packageName
                        + " signature changed; retaining data.";
                reportSettingsProblem(Log.WARN, msg);
            }

            // Verify that this new package doesn't have any content providers
@@ -2955,23 +2958,6 @@ class PackageManagerService extends IPackageManager.Stub {

        final String pkgName = pkg.packageName;
        
        if (removeExisting) {
            boolean useEncryptedFSDir = useEncryptedFilesystemForPackage(pkg);
            if (mInstaller != null) {
                int ret = mInstaller.remove(pkgName, useEncryptedFSDir);
                if (ret != 0) {
                    String msg = "System package " + pkg.packageName
                            + " could not have data directory erased after signature change.";
                    reportSettingsProblem(Log.WARN, msg);
                    mLastScanError = PackageManager.INSTALL_FAILED_REPLACE_COULDNT_DELETE;
                    return null;
                }
            }
            Slog.w(TAG, "System package " + pkg.packageName
                    + " signature changed: existing data removed.");
            mLastScanError = PackageManager.INSTALL_SUCCEEDED;
        }

        if (pkg.mAdoptPermissions != null) {
            // This package wants to adopt ownership of permissions from
            // another package.
@@ -4500,7 +4486,8 @@ class PackageManagerService extends IPackageManager.Stub {
                if ((event&ADD_EVENTS) != 0) {
                    if (p == null) {
                        p = scanPackageLI(fullPath,
                                (mIsRom ? PackageParser.PARSE_IS_SYSTEM : 0) |
                                (mIsRom ? PackageParser.PARSE_IS_SYSTEM
                                        | PackageParser.PARSE_IS_SYSTEM_DIR: 0) |
                                PackageParser.PARSE_CHATTY |
                                PackageParser.PARSE_MUST_BE_APK,
                                SCAN_MONITOR | SCAN_NO_PATHS);