diff options
3 files changed, 16 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index 5105fd384367..ada6659b4a94 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -2231,8 +2231,9 @@ final class InstallPackageHelper { // by apexd to be more accurate. installRequest.setScannedPackageSettingFirstInstallTimeFromReplaced( deletedPkgSetting, allUsers); - installRequest.setScannedPackageSettingLastUpdateTime( - System.currentTimeMillis()); + long currentTime = System.currentTimeMillis(); + installRequest.setScannedPackageSettingLastUpdateTime(currentTime); + installRequest.setScannedPackageSettingFirstInstallTime(currentTime); installRequest.getRemovedInfo().mBroadcastAllowList = mPm.mAppsFilter.getVisibilityAllowList(mPm.snapshotComputer(), diff --git a/services/core/java/com/android/server/pm/InstallRequest.java b/services/core/java/com/android/server/pm/InstallRequest.java index dd2583a0db1d..ae7749b7dfe1 100644 --- a/services/core/java/com/android/server/pm/InstallRequest.java +++ b/services/core/java/com/android/server/pm/InstallRequest.java @@ -58,6 +58,7 @@ import com.android.server.art.model.DexoptResult; import com.android.server.pm.pkg.AndroidPackage; import com.android.server.pm.pkg.PackageState; import com.android.server.pm.pkg.PackageStateInternal; +import com.android.server.pm.pkg.PackageUserStateInternal; import java.io.File; import java.util.ArrayList; @@ -867,6 +868,14 @@ final class InstallRequest { mScanResult.mPkgSetting.setLastUpdateTime(lastUpdateTim); } + public void setScannedPackageSettingFirstInstallTime(long firstInstallTime) { + assertScanResultExists(); + PackageUserStateInternal userState = mScanResult.mPkgSetting.getUserStates().get(mUserId); + if (userState != null && userState.getFirstInstallTimeMillis() == 0) { + mScanResult.mPkgSetting.setFirstInstallTime(firstInstallTime, mUserId); + } + } + public void setRemovedAppId(int appId) { if (mRemovedInfo != null) { mRemovedInfo.mUid = appId; diff --git a/services/core/java/com/android/server/pm/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java index 61fddbae0d22..0802e9ee50bc 100644 --- a/services/core/java/com/android/server/pm/ScanPackageUtils.java +++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java @@ -443,17 +443,16 @@ final class ScanPackageUtils { // Take care of first install / last update times. final long scanFileTime = getLastModifiedTime(parsedPackage); - final long existingFirstInstallTime = userId == UserHandle.USER_ALL - ? PackageStateUtils.getEarliestFirstInstallTime(pkgSetting.getUserStates()) - : pkgSetting.readUserState(userId).getFirstInstallTimeMillis(); + final long earliestFirstInstallTime = + PackageStateUtils.getEarliestFirstInstallTime((pkgSetting.getUserStates())); if (currentTime != 0) { - if (existingFirstInstallTime == 0) { + if (earliestFirstInstallTime == 0) { pkgSetting.setFirstInstallTime(currentTime, userId) .setLastUpdateTime(currentTime); } else if ((scanFlags & SCAN_UPDATE_TIME) != 0) { pkgSetting.setLastUpdateTime(currentTime); } - } else if (existingFirstInstallTime == 0) { + } else if (earliestFirstInstallTime == 0) { // We need *something*. Take time stamp of the file. pkgSetting.setFirstInstallTime(scanFileTime, userId) .setLastUpdateTime(scanFileTime); |