Loading services/core/java/com/android/server/pm/PackageManagerService.java +12 −21 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET; import static android.content.pm.PackageManager.INSTALL_EXTERNAL; import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS; import static android.content.pm.PackageManager.INSTALL_FAILED_CONFLICTING_PROVIDER; import static android.content.pm.PackageManager.INSTALL_FAILED_DEXOPT; import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE; import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION; import static android.content.pm.PackageManager.INSTALL_FAILED_EPHEMERAL_INVALID; Loading Loading @@ -94,8 +93,6 @@ import android.app.AppGlobals; import android.app.IActivityManager; import android.app.admin.IDevicePolicyManager; import android.app.backup.IBackupManager; import android.app.usage.UsageStats; import android.app.usage.UsageStatsManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -16842,14 +16839,12 @@ public class PackageManagerService extends IPackageManager.Stub { mPendingBroadcasts.remove(userHandle); } synchronized (mInstallLock) { if (mInstaller != null) { final StorageManager storage = mContext.getSystemService(StorageManager.class); for (VolumeInfo vol : storage.getWritablePrivateVolumes()) { final String volumeUuid = vol.getFsUuid(); if (DEBUG_INSTALL) Slog.d(TAG, "Removing user data on volume " + volumeUuid); mInstaller.removeUserDataDirs(volumeUuid, userHandle); } } synchronized (mPackages) { removeUnusedPackagesLILPw(userManager, userHandle); } Loading Loading @@ -16910,19 +16905,15 @@ public class PackageManagerService extends IPackageManager.Stub { /** Called by UserManagerService */ void createNewUser(int userHandle) { if (mInstaller != null) { synchronized (mInstallLock) { synchronized (mPackages) { mInstaller.createUserConfig(userHandle); mSettings.createNewUserLILPw(this, mInstaller, userHandle); } mSettings.createNewUserLI(this, mInstaller, userHandle); } synchronized (mPackages) { applyFactoryDefaultBrowserLPw(userHandle); primeDomainVerificationsLPw(userHandle); } } } void newUserCreated(final int userHandle) { mDefaultPermissionPolicy.grantDefaultPermissions(userHandle); services/core/java/com/android/server/pm/Settings.java +38 −12 Original line number Diff line number Diff line Loading @@ -3644,22 +3644,48 @@ final class Settings { } } void createNewUserLILPw(PackageManagerService service, Installer installer, int userHandle) { for (PackageSetting ps : mPackages.values()) { void createNewUserLI(@NonNull PackageManagerService service, @NonNull Installer installer, int userHandle) { String[] volumeUuids; String[] names; int[] uids; String[] seinfos; int packagesCount; synchronized (mPackages) { Collection<PackageSetting> packages = mPackages.values(); packagesCount = packages.size(); volumeUuids = new String[packagesCount]; names = new String[packagesCount]; uids = new int[packagesCount]; seinfos = new String[packagesCount]; Iterator<PackageSetting> packagesIterator = packages.iterator(); for (int i = 0; i < packagesCount; i++) { PackageSetting ps = packagesIterator.next(); if (ps.pkg == null || ps.pkg.applicationInfo == null) { continue; } // Only system apps are initially installed. ps.setInstalled((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0, userHandle); // Need to create a data directory for all apps under this user. installer.createUserData(ps.volumeUuid, ps.name, UserHandle.getUid(userHandle, ps.appId), userHandle, ps.pkg.applicationInfo.seinfo); ps.setInstalled(ps.isSystem(), userHandle); // Need to create a data directory for all apps under this user. Accumulate all // required args and call the installer after mPackages lock has been released volumeUuids[i] = ps.volumeUuid; names[i] = ps.name; uids[i] = UserHandle.getUid(userHandle, ps.appId); seinfos[i] = ps.pkg.applicationInfo.seinfo; } } for (int i = 0; i < packagesCount; i++) { if (names[i] == null) { continue; } installer.createUserData(volumeUuids[i], names[i], uids[i], userHandle, seinfos[i]); } synchronized (mPackages) { applyDefaultPreferredAppsLPw(service, userHandle); writePackageRestrictionsLPr(userHandle); writePackageListLPr(userHandle); } } void removeUserLPw(int userId) { Set<Entry<String, PackageSetting>> entries = mPackages.entrySet(); Loading Loading
services/core/java/com/android/server/pm/PackageManagerService.java +12 −21 Original line number Diff line number Diff line Loading @@ -34,7 +34,6 @@ import static android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET; import static android.content.pm.PackageManager.INSTALL_EXTERNAL; import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS; import static android.content.pm.PackageManager.INSTALL_FAILED_CONFLICTING_PROVIDER; import static android.content.pm.PackageManager.INSTALL_FAILED_DEXOPT; import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE; import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION; import static android.content.pm.PackageManager.INSTALL_FAILED_EPHEMERAL_INVALID; Loading Loading @@ -94,8 +93,6 @@ import android.app.AppGlobals; import android.app.IActivityManager; import android.app.admin.IDevicePolicyManager; import android.app.backup.IBackupManager; import android.app.usage.UsageStats; import android.app.usage.UsageStatsManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -16842,14 +16839,12 @@ public class PackageManagerService extends IPackageManager.Stub { mPendingBroadcasts.remove(userHandle); } synchronized (mInstallLock) { if (mInstaller != null) { final StorageManager storage = mContext.getSystemService(StorageManager.class); for (VolumeInfo vol : storage.getWritablePrivateVolumes()) { final String volumeUuid = vol.getFsUuid(); if (DEBUG_INSTALL) Slog.d(TAG, "Removing user data on volume " + volumeUuid); mInstaller.removeUserDataDirs(volumeUuid, userHandle); } } synchronized (mPackages) { removeUnusedPackagesLILPw(userManager, userHandle); } Loading Loading @@ -16910,19 +16905,15 @@ public class PackageManagerService extends IPackageManager.Stub { /** Called by UserManagerService */ void createNewUser(int userHandle) { if (mInstaller != null) { synchronized (mInstallLock) { synchronized (mPackages) { mInstaller.createUserConfig(userHandle); mSettings.createNewUserLILPw(this, mInstaller, userHandle); } mSettings.createNewUserLI(this, mInstaller, userHandle); } synchronized (mPackages) { applyFactoryDefaultBrowserLPw(userHandle); primeDomainVerificationsLPw(userHandle); } } } void newUserCreated(final int userHandle) { mDefaultPermissionPolicy.grantDefaultPermissions(userHandle);
services/core/java/com/android/server/pm/Settings.java +38 −12 Original line number Diff line number Diff line Loading @@ -3644,22 +3644,48 @@ final class Settings { } } void createNewUserLILPw(PackageManagerService service, Installer installer, int userHandle) { for (PackageSetting ps : mPackages.values()) { void createNewUserLI(@NonNull PackageManagerService service, @NonNull Installer installer, int userHandle) { String[] volumeUuids; String[] names; int[] uids; String[] seinfos; int packagesCount; synchronized (mPackages) { Collection<PackageSetting> packages = mPackages.values(); packagesCount = packages.size(); volumeUuids = new String[packagesCount]; names = new String[packagesCount]; uids = new int[packagesCount]; seinfos = new String[packagesCount]; Iterator<PackageSetting> packagesIterator = packages.iterator(); for (int i = 0; i < packagesCount; i++) { PackageSetting ps = packagesIterator.next(); if (ps.pkg == null || ps.pkg.applicationInfo == null) { continue; } // Only system apps are initially installed. ps.setInstalled((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0, userHandle); // Need to create a data directory for all apps under this user. installer.createUserData(ps.volumeUuid, ps.name, UserHandle.getUid(userHandle, ps.appId), userHandle, ps.pkg.applicationInfo.seinfo); ps.setInstalled(ps.isSystem(), userHandle); // Need to create a data directory for all apps under this user. Accumulate all // required args and call the installer after mPackages lock has been released volumeUuids[i] = ps.volumeUuid; names[i] = ps.name; uids[i] = UserHandle.getUid(userHandle, ps.appId); seinfos[i] = ps.pkg.applicationInfo.seinfo; } } for (int i = 0; i < packagesCount; i++) { if (names[i] == null) { continue; } installer.createUserData(volumeUuids[i], names[i], uids[i], userHandle, seinfos[i]); } synchronized (mPackages) { applyDefaultPreferredAppsLPw(service, userHandle); writePackageRestrictionsLPr(userHandle); writePackageListLPr(userHandle); } } void removeUserLPw(int userId) { Set<Entry<String, PackageSetting>> entries = mPackages.entrySet(); Loading