diff options
| -rw-r--r-- | services/core/java/com/android/server/integrity/model/AppInstallMetadata.java | 155 |
1 files changed, 140 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/integrity/model/AppInstallMetadata.java b/services/core/java/com/android/server/integrity/model/AppInstallMetadata.java index 814b8e1d783b..660bd2e0d62e 100644 --- a/services/core/java/com/android/server/integrity/model/AppInstallMetadata.java +++ b/services/core/java/com/android/server/integrity/model/AppInstallMetadata.java @@ -16,29 +16,154 @@ package com.android.server.integrity.model; +import static com.android.internal.util.Preconditions.checkArgument; +import static com.android.internal.util.Preconditions.checkNotNull; + +import android.annotation.Nullable; + /** * The app install metadata. * * <p>The integrity component retrieves metadata for app installs from package manager, passing it * to the rule evaluation engine to evaluate the metadata against the rules. + * + * <p>Instances of this class are immutable. */ public final class AppInstallMetadata { - final String mPackageName; + private final String mPackageName; // Raw string encoding for the SHA-256 hash of the certificate of the app. - final String mAppCertificate; - final String mInstallerName; + private final String mAppCertificate; + private final String mInstallerName; // Raw string encoding for the SHA-256 hash of the certificate of the installer. - final String mInstallerCertificate; - final int mVersionCode; - final boolean mIsPreInstalled; - - public AppInstallMetadata(String packageName, String appCertificate, String installerName, - String installerCertificate, int versionCode, boolean isPreInstalled) { - this.mPackageName = packageName; - this.mAppCertificate = appCertificate; - this.mInstallerName = installerName; - this.mInstallerCertificate = installerCertificate; - this.mVersionCode = versionCode; - this.mIsPreInstalled = isPreInstalled; + private final String mInstallerCertificate; + private final int mVersionCode; + private final boolean mIsPreInstalled; + + private AppInstallMetadata(Builder builder) { + this.mPackageName = builder.mPackageName; + this.mAppCertificate = builder.mAppCertificate; + this.mInstallerName = builder.mInstallerName; + this.mInstallerCertificate = builder.mInstallerCertificate; + this.mVersionCode = builder.mVersionCode; + this.mIsPreInstalled = builder.mIsPreInstalled; + } + + public String getPackageName() { + return mPackageName; + } + + public String getAppCertificate() { + return mAppCertificate; + } + + @Nullable + public String getInstallerName() { + return mInstallerName; + } + + @Nullable + public String getInstallerCertificate() { + return mInstallerCertificate; + } + + /** + * @see AppInstallMetadata.Builder#setVersionCode(int) + */ + public int getVersionCode() { + return mVersionCode; + } + + /** + * @see AppInstallMetadata.Builder#setIsPreInstalled(boolean) + */ + public boolean isPreInstalled() { + return mIsPreInstalled; + } + + /** + * Builder class for constructing {@link AppInstallMetadata} objects. + */ + public static final class Builder { + private String mPackageName; + private String mAppCertificate; + private String mInstallerName; + private String mInstallerCertificate; + private int mVersionCode; + private boolean mIsPreInstalled; + + /** + * Set package name of the app to be installed. + * + * @see AppInstallMetadata#getPackageName() + */ + public Builder setPackageName(String packageName) { + this.mPackageName = checkNotNull(packageName); + return this; + } + + /** + * Set certificate of the app to be installed. + * + * <p>It is represented as the raw string encoding for the SHA-256 hash of the certificate + * of the app. + * + * @see AppInstallMetadata#getAppCertificate() + */ + public Builder setAppCertificate(String appCertificate) { + this.mAppCertificate = checkNotNull(appCertificate); + return this; + } + + /** + * Set name of the installer installing the app. + * + * @see AppInstallMetadata#getInstallerName() + */ + public Builder setInstallerName(String installerName) { + this.mInstallerName = checkNotNull(installerName); + return this; + } + + /** + * Set certificate of the installer installing the app. + * + * <p>It is represented as the raw string encoding for the SHA-256 hash of the certificate + * of the installer. + * + * @see AppInstallMetadata#getInstallerCertificate() + */ + public Builder setInstallerCertificate(String installerCertificate) { + this.mInstallerCertificate = checkNotNull(installerCertificate); + return this; + } + + /** + * Set version code of the app to be installed. + * + * @see AppInstallMetadata#getVersionCode() + */ + public Builder setVersionCode(int versionCode) { + this.mVersionCode = versionCode; + return this; + } + + /** + * Set whether the app is pre-installed on the device or not. + * + * @see AppInstallMetadata#isPreInstalled() + */ + public Builder setIsPreInstalled(boolean isPreInstalled) { + this.mIsPreInstalled = isPreInstalled; + return this; + } + + /** + * Build {@link AppInstallMetadata}. + */ + public AppInstallMetadata build() { + checkArgument(mPackageName != null); + checkArgument(mAppCertificate != null); + return new AppInstallMetadata(this); + } } } |