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

Commit 82cac7ce authored by Todd Kennedy's avatar Todd Kennedy Committed by android-build-merger
Browse files

Merge "Use per user info for seinfo" into pi-dev

am: ce5f2b3e

Change-Id: I01dbd963e683fac472a58d6610fde40dc6fb79f2
parents 5bbbbfd5 ce5f2b3e
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.SELinuxUtil;
import android.content.pm.ServiceInfo;
import android.content.pm.SharedLibraryInfo;
import android.content.pm.Signature;
@@ -10458,6 +10459,14 @@ public class PackageManagerService extends IPackageManager.Stub
            reportSettingsProblem(Log.WARN, msg);
        }
        final int userId = (user == null ? UserHandle.USER_SYSTEM : user.getIdentifier());
        // for existing packages, change the install state; but, only if it's explicitly specified
        if (!createNewPackage) {
            final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0;
            final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0;
            setInstantAppForUser(pkgSetting, userId, instantApp, fullApp);
        }
        if (disabledPkgSetting != null) {
            pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
        }
@@ -10480,6 +10489,8 @@ public class PackageManagerService extends IPackageManager.Stub
        pkg.applicationInfo.seInfo = SELinuxMMAC.getSeInfo(pkg, isPrivileged,
                pkg.applicationInfo.targetSandboxVersion, targetSdkVersion);
        pkg.applicationInfo.seInfoUser = SELinuxUtil.assignSeinfoUser(pkgSetting.readUserState(
                userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId));
        pkg.mExtras = pkgSetting;
        pkg.applicationInfo.processName = fixProcessName(
@@ -13954,7 +13965,7 @@ public class PackageManagerService extends IPackageManager.Stub
        return PackageManager.INSTALL_SUCCEEDED;
    }
    void setInstantAppForUser(PackageSetting pkgSetting, int userId,
    static void setInstantAppForUser(PackageSetting pkgSetting, int userId,
            boolean instantApp, boolean fullApp) {
        // no state specified; do nothing
        if (!instantApp && !fullApp) {
@@ -16463,10 +16474,6 @@ public class PackageManagerService extends IPackageManager.Stub
                        childPs.oldCodePaths = ps.oldCodePaths;
                    }
                }
                // set instant app status, but, only if it's explicitly specified
                final boolean instantApp = (scanFlags & SCAN_AS_INSTANT_APP) != 0;
                final boolean fullApp = (scanFlags & SCAN_AS_FULL_APP) != 0;
                setInstantAppForUser(ps, user.getIdentifier(), instantApp, fullApp);
                prepareAppDataAfterInstallLIF(newPackage);
                addedPkg = true;
                mDexManager.notifyPackageUpdated(newPackage.packageName,
@@ -22433,17 +22440,25 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
                    + Integer.toHexString(flags));
        }
        final PackageSetting ps;
        synchronized (mPackages) {
            ps = mSettings.mPackages.get(pkg.packageName);
        }
        final String volumeUuid = pkg.volumeUuid;
        final String packageName = pkg.packageName;
        final ApplicationInfo app = pkg.applicationInfo;
        final ApplicationInfo app = (ps == null)
                ? pkg.applicationInfo
                : PackageParser.generateApplicationInfo(pkg, 0, ps.readUserState(userId), userId);
        final int appId = UserHandle.getAppId(app.uid);
        Preconditions.checkNotNull(app.seInfo);
        final String seInfo = app.seInfo + (app.seInfoUser != null ? app.seInfoUser : "");
        long ceDataInode = -1;
        try {
            ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags,
                    appId, app.seInfo, app.targetSdkVersion);
                    appId, seInfo, app.targetSdkVersion);
        } catch (InstallerException e) {
            if (app.isSystemApp()) {
                logCriticalInfo(Log.ERROR, "Failed to create app data for " + packageName
@@ -22451,7 +22466,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
                destroyAppDataLeafLIF(pkg, userId, flags);
                try {
                    ceDataInode = mInstaller.createAppData(volumeUuid, packageName, userId, flags,
                            appId, app.seInfo, app.targetSdkVersion);
                            appId, seInfo, app.targetSdkVersion);
                    logCriticalInfo(Log.DEBUG, "Recovery succeeded!");
                } catch (InstallerException e2) {
                    logCriticalInfo(Log.DEBUG, "Recovery failed!");
@@ -22474,7 +22489,6 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
        if ((flags & StorageManager.FLAG_STORAGE_CE) != 0 && ceDataInode != -1) {
            // TODO: mark this structure as dirty so we persist it!
            synchronized (mPackages) {
                final PackageSetting ps = mSettings.mPackages.get(packageName);
                if (ps != null) {
                    ps.setCeDataInode(ceDataInode, userId);
                }