Expose remaining PackageState APIs for ART
- isApex temporarily while the underlying flags refactor is ongoing
- getFirstInstallTime so ART can track app use times for an LRU cache
- isOverlay to allow `isLoadableInOtherProcesses` utility, although ART
will likely not need to worry about this flag
API-Coverage-Bug: 262593427
Bug: 256637152
Change-Id: I748f77f2edd6f6469394f6152f4429b5c92d5101
diff --git a/services/api/current.txt b/services/api/current.txt
index 090a449..81d8dfd 100644
--- a/services/api/current.txt
+++ b/services/api/current.txt
@@ -145,6 +145,7 @@
method public boolean isRequestLegacyExternalStorage();
method public boolean isRequiredForAllUsers();
method public boolean isResetEnabledSettingsOnAppDataCleared();
+ method public boolean isResourceOverlay();
method public boolean isRestoreAnyVersion();
method public boolean isSignedWithPlatformKey();
method public boolean isSupportsExtraLargeScreens();
@@ -179,12 +180,14 @@
method @Nullable public String getSecondaryCpuAbi();
method @NonNull public com.android.server.pm.pkg.PackageUserState getStateForUser(@NonNull android.os.UserHandle);
method @NonNull public java.util.List<com.android.server.pm.pkg.SharedLibrary> getUsesLibraries();
+ method public boolean isApex();
method public boolean isPrivileged();
method public boolean isSystem();
method public boolean isUpdatedSystemApp();
}
public interface PackageUserState {
+ method public long getFirstInstallTimeMillis();
method public boolean isInstalled();
}
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 0a59c19..f433d6ad 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -1481,8 +1481,8 @@
: mPermissionManager.getGrantedPermissions(ps.getPackageName(), userId);
PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags,
- state.getFirstInstallTime(), ps.getLastUpdateTime(), permissions, state, userId,
- ps);
+ state.getFirstInstallTimeMillis(), ps.getLastUpdateTime(), permissions, state,
+ userId, ps);
if (packageInfo == null) {
return null;
@@ -1499,7 +1499,7 @@
pi.setLongVersionCode(ps.getVersionCode());
SharedUserApi sharedUser = mSettings.getSharedUserFromPackageName(pi.packageName);
pi.sharedUserId = (sharedUser != null) ? sharedUser.getName() : null;
- pi.firstInstallTime = state.getFirstInstallTime();
+ pi.firstInstallTime = state.getFirstInstallTimeMillis();
pi.lastUpdateTime = ps.getLastUpdateTime();
ApplicationInfo ai = new ApplicationInfo();
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index c1298ff..b825ec4 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -6460,7 +6460,7 @@
List<String> targetPackages = new ArrayList<>();
PackageManagerService.this.forEachPackageState(snapshot(), packageState -> {
final AndroidPackage pkg = packageState.getPkg();
- if (pkg != null && !pkg.isOverlay()) {
+ if (pkg != null && !pkg.isResourceOverlay()) {
targetPackages.add(pkg.getPackageName());
}
});
diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java
index 433e7a1..877b112 100644
--- a/services/core/java/com/android/server/pm/PackageSetting.java
+++ b/services/core/java/com/android/server/pm/PackageSetting.java
@@ -328,7 +328,7 @@
int[] userIds) {
for (int userId = 0; userId < userIds.length; userId++) {
final long previousFirstInstallTime =
- replacedPkgSetting.getUserStateOrDefault(userId).getFirstInstallTime();
+ replacedPkgSetting.getUserStateOrDefault(userId).getFirstInstallTimeMillis();
if (previousFirstInstallTime != 0) {
modifyUserState(userId).setFirstInstallTime(previousFirstInstallTime);
}
@@ -897,7 +897,7 @@
? null : otherState.getDisabledComponentsNoCopy().untrackedStorage(),
otherState.getInstallReason(), otherState.getUninstallReason(),
otherState.getHarmfulAppWarning(), otherState.getSplashScreenTheme(),
- otherState.getFirstInstallTime());
+ otherState.getFirstInstallTimeMillis());
}
WatchedArraySet<String> getEnabledComponents(int userId) {
@@ -1091,7 +1091,7 @@
PackageProto.UserInfoProto.LAST_DISABLED_APP_CALLER,
state.getLastDisableAppCaller());
proto.write(PackageProto.UserInfoProto.FIRST_INSTALL_TIME_MS,
- state.getFirstInstallTime());
+ state.getFirstInstallTimeMillis());
proto.end(userToken);
}
}
@@ -1386,6 +1386,13 @@
return AndroidPackageUtils.getHiddenApiEnforcementPolicy(getAndroidPackage(), this);
}
+ @Override
+ public boolean isApex() {
+ // TODO(b/256637152):
+ // TODO(b/243839669): Use a flag tracked directly in PackageSetting
+ return getAndroidPackage() != null && getAndroidPackage().isApex();
+ }
+
// Code below generated by codegen v1.0.23.
diff --git a/services/core/java/com/android/server/pm/ScanPackageUtils.java b/services/core/java/com/android/server/pm/ScanPackageUtils.java
index 386e403..830b096c 100644
--- a/services/core/java/com/android/server/pm/ScanPackageUtils.java
+++ b/services/core/java/com/android/server/pm/ScanPackageUtils.java
@@ -406,7 +406,7 @@
final long scanFileTime = getLastModifiedTime(parsedPackage);
final long existingFirstInstallTime = userId == UserHandle.USER_ALL
? PackageStateUtils.getEarliestFirstInstallTime(pkgSetting.getUserStates())
- : pkgSetting.readUserState(userId).getFirstInstallTime();
+ : pkgSetting.readUserState(userId).getFirstInstallTimeMillis();
if (currentTime != 0) {
if (existingFirstInstallTime == 0) {
pkgSetting.setFirstInstallTime(currentTime, userId)
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 321c5c6..6ebef20 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -2272,7 +2272,7 @@
ustate.getInstallReason());
}
serializer.attributeLongHex(null, ATTR_FIRST_INSTALL_TIME,
- ustate.getFirstInstallTime());
+ ustate.getFirstInstallTimeMillis());
if (ustate.getUninstallReason() != PackageManager.UNINSTALL_REASON_UNKNOWN) {
serializer.attributeInt(null, ATTR_UNINSTALL_REASON,
ustate.getUninstallReason());
@@ -4773,7 +4773,7 @@
pw.print(",");
pw.print(lastDisabledAppCaller != null ? lastDisabledAppCaller : "?");
pw.print(",");
- pw.print(ps.readUserState(user.id).getFirstInstallTime());
+ pw.print(ps.readUserState(user.id).getFirstInstallTimeMillis());
pw.print(",");
pw.println();
}
@@ -5122,7 +5122,7 @@
final PackageUserStateInternal pus = ps.readUserState(user.id);
pw.print(" firstInstallTime=");
- date.setTime(pus.getFirstInstallTime());
+ date.setTime(pus.getFirstInstallTimeMillis());
pw.println(sdf.format(date));
pw.print(" uninstallReason=");
diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
index ff993ea..41ed4db 100644
--- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
+++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java
@@ -917,7 +917,7 @@
@Nullable PackageStateInternal pkgSetting) {
// @formatter:off
int pkgWithoutStateFlags = flag(pkg.isStaticSharedLibrary(), ApplicationInfo.PRIVATE_FLAG_STATIC_SHARED_LIBRARY)
- | flag(pkg.isOverlay(), ApplicationInfo.PRIVATE_FLAG_IS_RESOURCE_OVERLAY)
+ | flag(pkg.isResourceOverlay(), ApplicationInfo.PRIVATE_FLAG_IS_RESOURCE_OVERLAY)
| flag(pkg.isIsolatedSplitLoading(), ApplicationInfo.PRIVATE_FLAG_ISOLATED_SPLIT_LOADING)
| flag(pkg.isHasDomainUrls(), ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS)
| flag(pkg.isProfileableByShell(), ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL)
diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
index e361c93..4137366 100644
--- a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
+++ b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java
@@ -1624,7 +1624,7 @@
}
@Override
- public boolean isOverlay() {
+ public boolean isResourceOverlay() {
return getBoolean(Booleans.OVERLAY);
}
@@ -2117,7 +2117,7 @@
}
@Override
- public PackageImpl setOverlay(boolean value) {
+ public PackageImpl setResourceOverlay(boolean value) {
return setBoolean(Booleans.OVERLAY, value);
}
diff --git a/services/core/java/com/android/server/pm/pkg/AndroidPackage.java b/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
index 49f85e9..78091bc 100644
--- a/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
+++ b/services/core/java/com/android/server/pm/pkg/AndroidPackage.java
@@ -572,6 +572,13 @@
boolean isResetEnabledSettingsOnAppDataCleared();
/**
+ * @see ApplicationInfo#PRIVATE_FLAG_IS_RESOURCE_OVERLAY
+ * @see ApplicationInfo#isResourceOverlay()
+ * @see R.styleable#AndroidManifestResourceOverlay
+ */
+ boolean isResourceOverlay();
+
+ /**
* @see ApplicationInfo#FLAG_RESTORE_ANY_VERSION
* @see R.styleable#AndroidManifestApplication_restoreAnyVersion
*/
@@ -1415,14 +1422,6 @@
boolean isHasDomainUrls();
/**
- * @see ApplicationInfo#PRIVATE_FLAG_IS_RESOURCE_OVERLAY
- * @see ApplicationInfo#isResourceOverlay()
- * @see R.styleable#AndroidManifestResourceOverlay
- * @hide
- */
- boolean isOverlay();
-
- /**
* @see PackageInfo#mOverlayIsStatic
* @hide
*/
diff --git a/services/core/java/com/android/server/pm/pkg/PackageState.java b/services/core/java/com/android/server/pm/pkg/PackageState.java
index 7335a46..5fdead0 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageState.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageState.java
@@ -163,6 +163,9 @@
@NonNull
List<SharedLibrary> getUsesLibraries();
+ /** Whether this represents an APEX module. This is different from an APK inside an APEX. */
+ boolean isApex();
+
/**
* @see ApplicationInfo#PRIVATE_FLAG_PRIVILEGED
*/
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java b/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java
index 43d019a..8dee8ee 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java
@@ -301,9 +301,10 @@
}
@Override
- public int getSharedUserAppId() {
- return mSharedUserAppId;
+ public boolean isApex() {
+ return getAndroidPackage() != null && getAndroidPackage().isApex();
}
+
/**
* @hide
*/
@@ -372,7 +373,7 @@
private final int mUninstallReason;
@Nullable
private final String mSplashScreenTheme;
- private final long mFirstInstallTime;
+ private final long mFirstInstallTimeMillis;
private UserStateImpl(@NonNull PackageUserState userState) {
mCeDataInode = userState.getCeDataInode();
@@ -394,7 +395,7 @@
setBoolean(Booleans.STOPPED, userState.isStopped());
setBoolean(Booleans.SUSPENDED, userState.isSuspended());
setBoolean(Booleans.VIRTUAL_PRELOAD, userState.isVirtualPreload());
- mFirstInstallTime = userState.getFirstInstallTime();
+ mFirstInstallTimeMillis = userState.getFirstInstallTimeMillis();
}
@Override
@@ -538,8 +539,8 @@
}
@DataClass.Generated.Member
- public long getFirstInstallTime() {
- return mFirstInstallTime;
+ public long getFirstInstallTimeMillis() {
+ return mFirstInstallTimeMillis;
}
@DataClass.Generated.Member
@@ -549,10 +550,10 @@
}
@DataClass.Generated(
- time = 1666719622708L,
+ time = 1671671043891L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java",
- inputSignatures = "private int mBooleans\nprivate final long mCeDataInode\nprivate final @android.annotation.NonNull android.util.ArraySet<java.lang.String> mDisabledComponents\nprivate final @android.content.pm.PackageManager.DistractionRestriction int mDistractionFlags\nprivate final @android.annotation.NonNull android.util.ArraySet<java.lang.String> mEnabledComponents\nprivate final int mEnabledState\nprivate final @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate final @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate final @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprivate final @android.annotation.NonNull android.content.pm.overlay.OverlayPaths mOverlayPaths\nprivate final @android.annotation.NonNull java.util.Map<java.lang.String,android.content.pm.overlay.OverlayPaths> mSharedLibraryOverlayPaths\nprivate final @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate final @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate final long mFirstInstallTime\npublic static com.android.server.pm.pkg.PackageUserState copy(com.android.server.pm.pkg.PackageUserState)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @java.lang.Override boolean isHidden()\npublic @java.lang.Override boolean isInstalled()\npublic @java.lang.Override boolean isInstantApp()\npublic @java.lang.Override boolean isNotLaunched()\npublic @java.lang.Override boolean isStopped()\npublic @java.lang.Override boolean isSuspended()\npublic @java.lang.Override boolean isVirtualPreload()\npublic @java.lang.Override boolean isComponentEnabled(java.lang.String)\npublic @java.lang.Override boolean isComponentDisabled(java.lang.String)\npublic @java.lang.Override android.content.pm.overlay.OverlayPaths getAllOverlayPaths()\nclass UserStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageUserState]\nprivate static final int HIDDEN\nprivate static final int INSTALLED\nprivate static final int INSTANT_APP\nprivate static final int NOT_LAUNCHED\nprivate static final int STOPPED\nprivate static final int SUSPENDED\nprivate static final int VIRTUAL_PRELOAD\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)")
+ inputSignatures = "private int mBooleans\nprivate final long mCeDataInode\nprivate final @android.annotation.NonNull android.util.ArraySet<java.lang.String> mDisabledComponents\nprivate final @android.content.pm.PackageManager.DistractionRestriction int mDistractionFlags\nprivate final @android.annotation.NonNull android.util.ArraySet<java.lang.String> mEnabledComponents\nprivate final int mEnabledState\nprivate final @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate final @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate final @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprivate final @android.annotation.NonNull android.content.pm.overlay.OverlayPaths mOverlayPaths\nprivate final @android.annotation.NonNull java.util.Map<java.lang.String,android.content.pm.overlay.OverlayPaths> mSharedLibraryOverlayPaths\nprivate final @android.content.pm.PackageManager.UninstallReason int mUninstallReason\nprivate final @android.annotation.Nullable java.lang.String mSplashScreenTheme\nprivate final long mFirstInstallTimeMillis\npublic static com.android.server.pm.pkg.PackageUserState copy(com.android.server.pm.pkg.PackageUserState)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @java.lang.Override boolean isHidden()\npublic @java.lang.Override boolean isInstalled()\npublic @java.lang.Override boolean isInstantApp()\npublic @java.lang.Override boolean isNotLaunched()\npublic @java.lang.Override boolean isStopped()\npublic @java.lang.Override boolean isSuspended()\npublic @java.lang.Override boolean isVirtualPreload()\npublic @java.lang.Override boolean isComponentEnabled(java.lang.String)\npublic @java.lang.Override boolean isComponentDisabled(java.lang.String)\npublic @java.lang.Override android.content.pm.overlay.OverlayPaths getAllOverlayPaths()\nclass UserStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageUserState]\nprivate static final int HIDDEN\nprivate static final int INSTALLED\nprivate static final int INSTANT_APP\nprivate static final int NOT_LAUNCHED\nprivate static final int STOPPED\nprivate static final int SUSPENDED\nprivate static final int VIRTUAL_PRELOAD\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)")
@Deprecated
private void __metadata() {}
@@ -663,6 +664,11 @@
}
@DataClass.Generated.Member
+ public int getSharedUserAppId() {
+ return mSharedUserAppId;
+ }
+
+ @DataClass.Generated.Member
public @NonNull String[] getUsesSdkLibraries() {
return mUsesSdkLibraries;
}
@@ -714,10 +720,10 @@
}
@DataClass.Generated(
- time = 1666719622749L,
+ time = 1671671043929L,
codegenVersion = "1.0.23",
sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java",
- inputSignatures = "private int mBooleans\nprivate final @android.annotation.Nullable com.android.server.pm.pkg.AndroidPackage mAndroidPackage\nprivate final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.Nullable java.lang.String mVolumeUuid\nprivate final int mAppId\nprivate final int mCategoryOverride\nprivate final @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate final @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy int mHiddenApiEnforcementPolicy\nprivate final long mLastModifiedTime\nprivate final long mLastUpdateTime\nprivate final long mLongVersionCode\nprivate final @android.annotation.NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mMimeGroups\nprivate final @android.annotation.NonNull java.io.File mPath\nprivate final @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSeInfo\nprivate final boolean mHasSharedUser\nprivate final int mSharedUserAppId\nprivate final @android.annotation.NonNull java.lang.String[] mUsesSdkLibraries\nprivate final @android.annotation.NonNull long[] mUsesSdkLibrariesVersionsMajor\nprivate final @android.annotation.NonNull java.lang.String[] mUsesStaticLibraries\nprivate final @android.annotation.NonNull long[] mUsesStaticLibrariesVersions\nprivate final @android.annotation.NonNull java.util.List<com.android.server.pm.pkg.SharedLibrary> mUsesLibraries\nprivate final @android.annotation.NonNull java.util.List<java.lang.String> mUsesLibraryFiles\nprivate final @android.annotation.NonNull long[] mLastPackageUsageTime\nprivate final @android.annotation.NonNull android.content.pm.SigningInfo mSigningInfo\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserState> mUserStates\npublic static com.android.server.pm.pkg.PackageState copy(com.android.server.pm.pkg.PackageStateInternal)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @java.lang.Override boolean isExternalStorage()\npublic @java.lang.Override boolean isForceQueryableOverride()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @java.lang.Override boolean isInstallPermissionsFixed()\npublic @java.lang.Override boolean isOdm()\npublic @java.lang.Override boolean isOem()\npublic @java.lang.Override boolean isPrivileged()\npublic @java.lang.Override boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic @java.lang.Override boolean isSystem()\npublic @java.lang.Override boolean isSystemExt()\npublic @java.lang.Override boolean isUpdateAvailable()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @java.lang.Override boolean isVendor()\npublic @java.lang.Override long getVersionCode()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override int getSharedUserAppId()\nclass PackageStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageState]\nprivate static final int SYSTEM\nprivate static final int EXTERNAL_STORAGE\nprivate static final int PRIVILEGED\nprivate static final int OEM\nprivate static final int VENDOR\nprivate static final int PRODUCT\nprivate static final int SYSTEM_EXT\nprivate static final int REQUIRED_FOR_SYSTEM_USER\nprivate static final int ODM\nprivate static final int FORCE_QUERYABLE_OVERRIDE\nprivate static final int HIDDEN_UNTIL_INSTALLED\nprivate static final int INSTALL_PERMISSIONS_FIXED\nprivate static final int UPDATE_AVAILABLE\nprivate static final int UPDATED_SYSTEM_APP\nprivate static final int APK_IN_UPDATED_APEX\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)")
+ inputSignatures = "private int mBooleans\nprivate final @android.annotation.Nullable com.android.server.pm.pkg.AndroidPackage mAndroidPackage\nprivate final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.Nullable java.lang.String mVolumeUuid\nprivate final int mAppId\nprivate final int mCategoryOverride\nprivate final @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate final @android.content.pm.ApplicationInfo.HiddenApiEnforcementPolicy int mHiddenApiEnforcementPolicy\nprivate final long mLastModifiedTime\nprivate final long mLastUpdateTime\nprivate final long mLongVersionCode\nprivate final @android.annotation.NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>> mMimeGroups\nprivate final @android.annotation.NonNull java.io.File mPath\nprivate final @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSeInfo\nprivate final boolean mHasSharedUser\nprivate final int mSharedUserAppId\nprivate final @android.annotation.NonNull java.lang.String[] mUsesSdkLibraries\nprivate final @android.annotation.NonNull long[] mUsesSdkLibrariesVersionsMajor\nprivate final @android.annotation.NonNull java.lang.String[] mUsesStaticLibraries\nprivate final @android.annotation.NonNull long[] mUsesStaticLibrariesVersions\nprivate final @android.annotation.NonNull java.util.List<com.android.server.pm.pkg.SharedLibrary> mUsesLibraries\nprivate final @android.annotation.NonNull java.util.List<java.lang.String> mUsesLibraryFiles\nprivate final @android.annotation.NonNull long[] mLastPackageUsageTime\nprivate final @android.annotation.NonNull android.content.pm.SigningInfo mSigningInfo\nprivate final @android.annotation.NonNull android.util.SparseArray<com.android.server.pm.pkg.PackageUserState> mUserStates\npublic static com.android.server.pm.pkg.PackageState copy(com.android.server.pm.pkg.PackageStateInternal)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @android.annotation.NonNull @java.lang.Override com.android.server.pm.pkg.PackageUserState getStateForUser(android.os.UserHandle)\npublic @java.lang.Override boolean isExternalStorage()\npublic @java.lang.Override boolean isForceQueryableOverride()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @java.lang.Override boolean isInstallPermissionsFixed()\npublic @java.lang.Override boolean isOdm()\npublic @java.lang.Override boolean isOem()\npublic @java.lang.Override boolean isPrivileged()\npublic @java.lang.Override boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic @java.lang.Override boolean isSystem()\npublic @java.lang.Override boolean isSystemExt()\npublic @java.lang.Override boolean isUpdateAvailable()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isApkInUpdatedApex()\npublic @java.lang.Override boolean isVendor()\npublic @java.lang.Override long getVersionCode()\npublic @java.lang.Override boolean hasSharedUser()\npublic @java.lang.Override boolean isApex()\nclass PackageStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageState]\nprivate static final int SYSTEM\nprivate static final int EXTERNAL_STORAGE\nprivate static final int PRIVILEGED\nprivate static final int OEM\nprivate static final int VENDOR\nprivate static final int PRODUCT\nprivate static final int SYSTEM_EXT\nprivate static final int REQUIRED_FOR_SYSTEM_USER\nprivate static final int ODM\nprivate static final int FORCE_QUERYABLE_OVERRIDE\nprivate static final int HIDDEN_UNTIL_INSTALLED\nprivate static final int INSTALL_PERMISSIONS_FIXED\nprivate static final int UPDATE_AVAILABLE\nprivate static final int UPDATED_SYSTEM_APP\nprivate static final int APK_IN_UPDATED_APEX\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)")
@Deprecated
private void __metadata() {}
diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java b/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java
index 9749cfa..1d2c5ec 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageStateUtils.java
@@ -87,7 +87,7 @@
}
long earliestFirstInstallTime = Long.MAX_VALUE;
for (int i = 0; i < userStatesInternal.size(); i++) {
- final long firstInstallTime = userStatesInternal.valueAt(i).getFirstInstallTime();
+ final long firstInstallTime = userStatesInternal.valueAt(i).getFirstInstallTimeMillis();
if (firstInstallTime != 0 && firstInstallTime < earliestFirstInstallTime) {
earliestFirstInstallTime = firstInstallTime;
}
diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserState.java b/services/core/java/com/android/server/pm/pkg/PackageUserState.java
index 366f8e5..2048d65 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageUserState.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageUserState.java
@@ -16,6 +16,7 @@
package com.android.server.pm.pkg;
+import android.annotation.CurrentTimeMillisLong;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
@@ -50,6 +51,16 @@
*/
boolean isInstalled();
+ /**
+ * In epoch milliseconds. The timestamp of the first install of the app of the particular user
+ * on the device, surviving past app updates. Different users might have a different first
+ * install time.
+ * <p/>
+ * This does not survive full removal of the app (i.e., uninstalls for all users).
+ */
+ @CurrentTimeMillisLong
+ long getFirstInstallTimeMillis();
+
// Methods below this comment are not yet exposed as API
/**
@@ -206,15 +217,4 @@
*/
@Nullable
String getSplashScreenTheme();
-
- /**
- * In epoch milliseconds. The timestamp of the first install of the app of the particular user
- * on the device, surviving past app updates. Different users might have a different first
- * install time.
- * <p/>
- * This does not survive full removal of the app (i.e., uninstalls for all users).
- *
- * @hide
- */
- long getFirstInstallTime();
}
diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java b/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java
index 2d2e062..73fb672 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageUserStateDefault.java
@@ -136,7 +136,7 @@
}
@Override
- public long getFirstInstallTime() {
+ public long getFirstInstallTimeMillis() {
return 0;
}
diff --git a/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java b/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java
index b3deb1c..ed4aab9 100644
--- a/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java
+++ b/services/core/java/com/android/server/pm/pkg/PackageUserStateImpl.java
@@ -691,7 +691,7 @@
}
@DataClass.Generated.Member
- public long getFirstInstallTime() {
+ public long getFirstInstallTimeMillis() {
return mFirstInstallTime;
}
diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java
index 12dfef4..69f2716 100644
--- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java
+++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackage.java
@@ -171,7 +171,7 @@
ParsingPackage setAllowTaskReparenting(boolean allowTaskReparenting);
- ParsingPackage setOverlay(boolean isOverlay);
+ ParsingPackage setResourceOverlay(boolean isResourceOverlay);
ParsingPackage setBackupInForeground(boolean backupInForeground);
diff --git a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java
index 2a2640d..995b9e5 100644
--- a/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java
+++ b/services/core/java/com/android/server/pm/pkg/parsing/ParsingPackageUtils.java
@@ -2828,7 +2828,7 @@
return input.skip(message);
}
- return input.success(pkg.setOverlay(true)
+ return input.success(pkg.setResourceOverlay(true)
.setOverlayTarget(target)
.setOverlayPriority(priority)
.setOverlayTargetOverlayableName(
diff --git a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java
index f80ead6..811d6e2 100644
--- a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java
+++ b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java
@@ -832,11 +832,12 @@
PackageStateInternal firstPkgSetting = snapshot.getPackageStateInternal(first);
PackageStateInternal secondPkgSetting = snapshot.getPackageStateInternal(second);
- long firstInstallTime = firstPkgSetting == null
- ? -1L : firstPkgSetting.getUserStateOrDefault(userId).getFirstInstallTime();
- long secondInstallTime = secondPkgSetting == null
- ? -1L
- : secondPkgSetting.getUserStateOrDefault(userId).getFirstInstallTime();
+ long firstInstallTime =
+ firstPkgSetting == null ? -1L : firstPkgSetting.getUserStateOrDefault(
+ userId).getFirstInstallTimeMillis();
+ long secondInstallTime =
+ secondPkgSetting == null ? -1L : secondPkgSetting.getUserStateOrDefault(
+ userId).getFirstInstallTimeMillis();
if (firstInstallTime != secondInstallTime) {
return (int) (firstInstallTime - secondInstallTime);
@@ -1974,7 +1975,7 @@
if (pkgSetting == null) {
continue;
}
- long installTime = pkgSetting.getUserStateOrDefault(userId).getFirstInstallTime();
+ long installTime = pkgSetting.getUserStateOrDefault(userId).getFirstInstallTimeMillis();
if (installTime > latestInstall) {
latestInstall = installTime;
filteredPackages.clear();
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java
index 7c4b9f8..5e5e7e3 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/AppsFilterImplTest.java
@@ -865,7 +865,7 @@
.addOverlayable("overlayableName", actorName)
.hideAsParsed();
var overlay = pkg("com.some.package.overlay")
- .setOverlay(true)
+ .setResourceOverlay(true)
.setOverlayTarget(target.getPackageName())
.setOverlayTargetOverlayableName("overlayableName")
.hideAsParsed();
@@ -952,7 +952,7 @@
.addOverlayable("overlayableName", actorName)
.hideAsParsed();
var overlay = pkg("com.some.package.overlay")
- .setOverlay(true)
+ .setResourceOverlay(true)
.setOverlayTarget(target.getPackageName())
.setOverlayTargetOverlayableName("overlayableName")
.hideAsParsed();
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java
index b20e1dd..6a1ccc5 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageManagerSettingsTests.java
@@ -1547,7 +1547,7 @@
: oldUserState.getOverlayPaths() == null)
&& userState.getCeDataInode() == oldUserState.getCeDataInode()
&& userState.getDistractionFlags() == oldUserState.getDistractionFlags()
- && userState.getFirstInstallTime() == oldUserState.getFirstInstallTime()
+ && userState.getFirstInstallTimeMillis() == oldUserState.getFirstInstallTimeMillis()
&& userState.getEnabledState() == oldUserState.getEnabledState()
&& userState.getHarmfulAppWarning().equals(oldUserState.getHarmfulAppWarning())
&& userState.getInstallReason() == oldUserState.getInstallReason()
diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt
index 1619856..e73868c 100644
--- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt
+++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt
@@ -239,7 +239,7 @@
AndroidPackage::isMultiArch,
AndroidPackage::isNativeLibraryRootRequiresIsa,
AndroidPackage::isOnBackInvokedCallbackEnabled,
- AndroidPackage::isOverlay,
+ AndroidPackage::isResourceOverlay,
AndroidPackage::isOverlayIsStatic,
AndroidPackage::isPartiallyDirectBootAware,
AndroidPackage::isPersistent,
diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt
index c22bb53..86c4335 100644
--- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt
+++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt
@@ -30,7 +30,6 @@
import android.util.ArraySet
import android.util.SparseArray
import com.android.server.pm.parsing.pkg.AndroidPackageInternal
-import com.android.server.pm.pkg.AndroidPackage
import com.android.server.pm.pkg.PackageStateInternal
import com.android.server.pm.pkg.PackageUserStateInternal
import com.android.server.pm.pkg.component.ParsedActivityImpl
@@ -301,7 +300,7 @@
whenever(isInstalled) { true }
whenever(isSuspended) { false }
whenever(isInstantApp) { false }
- whenever(firstInstallTime) {0L}
+ whenever(firstInstallTimeMillis) {0L}
}
})
val pkg2 = mockPkgState(PKG_TWO, UUID_TWO, listOf(DOMAIN_1, DOMAIN_2))
diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt b/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt
index 7be4921..1352ade 100644
--- a/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt
+++ b/services/tests/servicestests/src/com/android/server/om/OverlayReferenceMapperTests.kt
@@ -236,13 +236,13 @@
whenever(packageName) { "$TARGET_PACKAGE_NAME$increment" }
whenever(overlayables) { mapOf("overlayableName$increment" to ACTOR_NAME) }
whenever(toString()) { "Package{$packageName}" }
- whenever(isOverlay) { false }
+ whenever(isResourceOverlay) { false }
}
private fun mockOverlay(increment: Int = 0) = mockThrowOnUnmocked<AndroidPackage> {
whenever(packageName) { "$OVERLAY_PACKAGE_NAME$increment" }
whenever(overlayables) { emptyMap<String, String>() }
whenever(toString()) { "Package{$packageName}" }
- whenever(isOverlay) { true }
+ whenever(isResourceOverlay) { true }
}
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
index b7729bb..cca924e 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserSystemPackageInstallerTest.java
@@ -397,7 +397,7 @@
// Static overlay for allowlisted package1 -> should be installed, like package1
final AndroidPackage overlayPackage1 = ((ParsedPackage) PackageImpl.forTesting(overlayName1)
- .setOverlay(true)
+ .setResourceOverlay(true)
.setOverlayIsStatic(true)
.setOverlayTarget(packageName1)
.hideAsParsed())
@@ -405,7 +405,7 @@
// Static overlay for non-allowlisted package2 -> should not be installed, like package2
final AndroidPackage overlayPackage2 = ((ParsedPackage) PackageImpl.forTesting(overlayName2)
- .setOverlay(true)
+ .setResourceOverlay(true)
.setOverlayIsStatic(true)
.setOverlayTarget(packageName2)
.hideAsParsed())
@@ -413,7 +413,7 @@
// Non-static overlay for package1 -> not explicitly allowlisted, so shouldn't be installed
final AndroidPackage overlayPackage3 = ((ParsedPackage) PackageImpl.forTesting(overlayName3)
- .setOverlay(true)
+ .setResourceOverlay(true)
.setOverlayIsStatic(false) // non-static
.setOverlayTarget(packageName1)
.hideAsParsed())