diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 803c97a47688d..0624b67e697d0 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -2252,7 +2252,7 @@ final class InstallPackageHelper { } } installRequest.setName(pkgName); - installRequest.setUid(pkg.getUid()); + installRequest.setAppId(pkg.getUid()); installRequest.setPkg(pkg); installRequest.setReturnCode(PackageManager.INSTALL_SUCCEEDED); //to update install status @@ -2737,7 +2737,7 @@ final class InstallPackageHelper { } Bundle extras = new Bundle(); - extras.putInt(Intent.EXTRA_UID, request.getUid()); + extras.putInt(Intent.EXTRA_UID, request.getAppId()); if (update) { extras.putBoolean(Intent.EXTRA_REPLACING, true); } @@ -2760,7 +2760,7 @@ final class InstallPackageHelper { // Send PACKAGE_ADDED broadcast for users that see the package for the first time // sendPackageAddedForNewUsers also deals with system apps - int appId = UserHandle.getAppId(request.getUid()); + int appId = UserHandle.getAppId(request.getAppId()); boolean isSystem = request.isInstallSystem(); mPm.sendPackageAddedForNewUsers(mPm.snapshotComputer(), packageName, isSystem || virtualPreload, virtualPreload /*startReceiver*/, appId, @@ -2905,9 +2905,9 @@ final class InstallPackageHelper { } if (allNewUsers && !update) { - mPm.notifyPackageAdded(packageName, request.getUid()); + mPm.notifyPackageAdded(packageName, request.getAppId()); } else { - mPm.notifyPackageChanged(packageName, request.getUid()); + mPm.notifyPackageChanged(packageName, request.getAppId()); } // Log current value of "unknown sources" setting diff --git a/services/core/java/com/android/server/pm/InstallRequest.java b/services/core/java/com/android/server/pm/InstallRequest.java index c6cdc4cd350d2..878c1c1597977 100644 --- a/services/core/java/com/android/server/pm/InstallRequest.java +++ b/services/core/java/com/android/server/pm/InstallRequest.java @@ -81,7 +81,7 @@ final class InstallRequest { /** Package Installed Info */ @Nullable private String mName; - private int mUid = INVALID_UID; + private int mAppId = INVALID_UID; // The set of users that originally had this package installed. @Nullable private int[] mOrigUsers; @@ -158,7 +158,7 @@ final class InstallRequest { mUserId = user.getIdentifier(); } else { // APEX - mUserId = INVALID_UID; + mUserId = UserHandle.USER_SYSTEM; } mInstallArgs = null; mParsedPackage = parsedPackage; @@ -367,8 +367,8 @@ final class InstallRequest { return mOrigUsers; } - public int getUid() { - return mUid; + public int getAppId() { + return mAppId; } @Nullable @@ -648,8 +648,8 @@ final class InstallRequest { mPkg = pkg; } - public void setUid(int uid) { - mUid = uid; + public void setAppId(int appId) { + mAppId = appId; } public void setNewUsers(int[] newUsers) { @@ -773,10 +773,10 @@ final class InstallRequest { } } - public void onInstallCompleted(int userId) { + public void onInstallCompleted() { if (getReturnCode() == INSTALL_SUCCEEDED) { if (mPackageMetrics != null) { - mPackageMetrics.onInstallSucceed(userId); + mPackageMetrics.onInstallSucceed(); } } } diff --git a/services/core/java/com/android/server/pm/InstallingSession.java b/services/core/java/com/android/server/pm/InstallingSession.java index eb3b29ce4b710..439b542595543 100644 --- a/services/core/java/com/android/server/pm/InstallingSession.java +++ b/services/core/java/com/android/server/pm/InstallingSession.java @@ -535,7 +535,7 @@ class InstallingSession { mInstallPackageHelper.installPackagesTraced(installRequests); for (InstallRequest request : installRequests) { - request.onInstallCompleted(mUser.getIdentifier()); + request.onInstallCompleted(); doPostInstall(request); } } diff --git a/services/core/java/com/android/server/pm/PackageMetrics.java b/services/core/java/com/android/server/pm/PackageMetrics.java index 8252a9fa65c5f..d4c1256bd8f9c 100644 --- a/services/core/java/com/android/server/pm/PackageMetrics.java +++ b/services/core/java/com/android/server/pm/PackageMetrics.java @@ -19,9 +19,11 @@ package com.android.server.pm; import static android.os.Process.INVALID_UID; import android.annotation.IntDef; +import android.app.ActivityManager; import android.app.admin.SecurityLog; import android.content.pm.PackageManager; import android.content.pm.parsing.ApkLiteParseUtils; +import android.os.UserHandle; import android.util.Pair; import android.util.SparseArray; @@ -68,8 +70,8 @@ final class PackageMetrics { mInstallRequest = installRequest; } - public void onInstallSucceed(int userId) { - reportInstallationToSecurityLog(userId); + public void onInstallSucceed() { + reportInstallationToSecurityLog(mInstallRequest.getUserId()); reportInstallationStats(true /* success */); } @@ -110,10 +112,11 @@ final class PackageMetrics { } } + FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_INSTALLATION_SESSION_REPORTED, mInstallRequest.getSessionId() /* session_id */, packageName /* package_name */, - mInstallRequest.getUid() /* uid */, + getUid(mInstallRequest.getAppId(), mInstallRequest.getUserId()) /* uid */, newUsers /* user_ids */, userManagerInternal.getUserTypesForStatsd(newUsers) /* user_types */, originalUsers /* original_user_ids */, @@ -140,6 +143,13 @@ final class PackageMetrics { ); } + private static int getUid(int appId, int userId) { + if (userId == UserHandle.USER_ALL) { + userId = ActivityManager.getCurrentUser(); + } + return UserHandle.getUid(userId, appId); + } + private long getApksSize(File apkDir) { // TODO(b/249294752): also count apk sizes for failed installs final AtomicLong apksSize = new AtomicLong(); @@ -218,9 +228,9 @@ final class PackageMetrics { final int[] originalUsers = info.mOrigUsers; final int[] originalUserTypes = userManagerInternal.getUserTypesForStatsd(originalUsers); FrameworkStatsLog.write(FrameworkStatsLog.PACKAGE_UNINSTALLATION_REPORTED, - info.mUid, removedUsers, removedUserTypes, originalUsers, originalUserTypes, - deleteFlags, PackageManager.DELETE_SUCCEEDED, info.mIsRemovedPackageSystemUpdate, - !info.mRemovedForAllUsers); + getUid(info.mUid, userId), removedUsers, removedUserTypes, originalUsers, + originalUserTypes, deleteFlags, PackageManager.DELETE_SUCCEEDED, + info.mIsRemovedPackageSystemUpdate, !info.mRemovedForAllUsers); final String packageName = info.mRemovedPackage; final long versionCode = info.mRemovedPackageVersionCode; reportUninstallationToSecurityLog(packageName, versionCode, userId);