/* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.content.pm; import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Intent; import com.android.internal.util.DataClass; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * Contains fields required for archived package installation, * i.e. installation without an APK. */ @DataClass(genBuilder = false, genConstructor = false, genSetters = true) @FlaggedApi(Flags.FLAG_ARCHIVING) public final class ArchivedPackageInfo { /** Name of the package as used to identify it in the system */ private @NonNull String mPackageName; /** Signing certificates used to sign the package. */ private @NonNull SigningInfo mSigningInfo; /** * The version number of the package, as specified by the <manifest>tag's * {@link android.R.styleable#AndroidManifest_versionCode versionCode} attribute. */ private int mVersionCode = 0; /** * The major version number of the package, as specified by the <manifest>tag's * {@link android.R.styleable#AndroidManifest_versionCode versionCodeMajor} attribute. */ private int mVersionCodeMajor = 0; /** * This is the SDK version number that the application is targeting, as specified by the * <manifest> tag's {@link android.R.styleable#AndroidManifestUsesSdk_targetSdkVersion} * attribute. */ private int mTargetSdkVersion = 0; /** * Package data will default to device protected storage. Specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifestApplication_defaultToDeviceProtectedStorage} * attribute. */ private @Nullable String mDefaultToDeviceProtectedStorage; /** * If {@code true} this app would like to run under the legacy storage model. Specified by the * <manifest> tag's * {@link android.R.styleable#AndroidManifestApplication_requestLegacyExternalStorage} * attribute. */ private @Nullable String mRequestLegacyExternalStorage; /** * If {@code true} the user is prompted to keep the app's data on uninstall. Specified by the * <manifest> tag's * {@link android.R.styleable#AndroidManifestApplication_hasFragileUserData} attribute. */ private @Nullable String mUserDataFragile; /** * List of the package's activities that specify {@link Intent#ACTION_MAIN} and * {@link Intent#CATEGORY_LAUNCHER}. * @see LauncherApps#getActivityList */ private @NonNull List mLauncherActivities; public ArchivedPackageInfo(@NonNull String packageName, @NonNull SigningInfo signingInfo, @NonNull List launcherActivities) { Objects.requireNonNull(packageName); Objects.requireNonNull(signingInfo); Objects.requireNonNull(launcherActivities); this.mPackageName = packageName; this.mSigningInfo = signingInfo; this.mLauncherActivities = launcherActivities; } /** * Constructs the archived package from parcel. * @hide */ public ArchivedPackageInfo(@NonNull ArchivedPackageParcel parcel) { mPackageName = parcel.packageName; mSigningInfo = new SigningInfo(parcel.signingDetails); mVersionCode = parcel.versionCode; mVersionCodeMajor = parcel.versionCodeMajor; mTargetSdkVersion = parcel.targetSdkVersion; mDefaultToDeviceProtectedStorage = parcel.defaultToDeviceProtectedStorage; mRequestLegacyExternalStorage = parcel.requestLegacyExternalStorage; mUserDataFragile = parcel.userDataFragile; mLauncherActivities = new ArrayList<>(); if (parcel.archivedActivities != null) { for (var activityParcel : parcel.archivedActivities) { mLauncherActivities.add(new ArchivedActivityInfo(activityParcel)); } } } /* @hide */ ArchivedPackageParcel getParcel() { var parcel = new ArchivedPackageParcel(); parcel.packageName = mPackageName; parcel.signingDetails = mSigningInfo.getSigningDetails(); parcel.versionCode = mVersionCode; parcel.versionCodeMajor = mVersionCodeMajor; parcel.targetSdkVersion = mTargetSdkVersion; parcel.defaultToDeviceProtectedStorage = mDefaultToDeviceProtectedStorage; parcel.requestLegacyExternalStorage = mRequestLegacyExternalStorage; parcel.userDataFragile = mUserDataFragile; parcel.archivedActivities = new ArchivedActivityParcel[mLauncherActivities.size()]; for (int i = 0, size = parcel.archivedActivities.length; i < size; ++i) { parcel.archivedActivities[i] = mLauncherActivities.get(i).getParcel(); } return parcel; } // Code below generated by codegen v1.0.23. // // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code // // To regenerate run: // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/ArchivedPackageInfo.java // // To exclude the generated code from IntelliJ auto-formatting enable (one-time): // Settings > Editor > Code Style > Formatter Control //@formatter:off /** * Name of the package as used to identify it in the system */ @DataClass.Generated.Member public @NonNull String getPackageName() { return mPackageName; } /** * Signing certificates used to sign the package. */ @DataClass.Generated.Member public @NonNull SigningInfo getSigningInfo() { return mSigningInfo; } /** * The version number of the package, as specified by the <manifest>tag's * {@link android.R.styleable#AndroidManifest_versionCode versionCode} attribute. */ @DataClass.Generated.Member public int getVersionCode() { return mVersionCode; } /** * The major version number of the package, as specified by the <manifest>tag's * {@link android.R.styleable#AndroidManifest_versionCode versionCodeMajor} attribute. */ @DataClass.Generated.Member public int getVersionCodeMajor() { return mVersionCodeMajor; } /** * This is the SDK version number that the application is targeting, as specified by the * <manifest> tag's {@link android.R.styleable#AndroidManifestUsesSdk_targetSdkVersion} * attribute. */ @DataClass.Generated.Member public int getTargetSdkVersion() { return mTargetSdkVersion; } /** * Package data will default to device protected storage. Specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifestApplication_defaultToDeviceProtectedStorage} * attribute. */ @DataClass.Generated.Member public @Nullable String getDefaultToDeviceProtectedStorage() { return mDefaultToDeviceProtectedStorage; } /** * If {@code true} this app would like to run under the legacy storage model. Specified by the * <manifest> tag's * {@link android.R.styleable#AndroidManifestApplication_requestLegacyExternalStorage} * attribute. */ @DataClass.Generated.Member public @Nullable String getRequestLegacyExternalStorage() { return mRequestLegacyExternalStorage; } /** * If {@code true} the user is prompted to keep the app's data on uninstall. Specified by the * <manifest> tag's * {@link android.R.styleable#AndroidManifestApplication_hasFragileUserData} attribute. */ @DataClass.Generated.Member public @Nullable String getUserDataFragile() { return mUserDataFragile; } /** * List of the package's activities that specify {@link Intent#ACTION_MAIN} and * {@link Intent#CATEGORY_LAUNCHER}. * * @see LauncherApps#getActivityList */ @DataClass.Generated.Member public @NonNull List getLauncherActivities() { return mLauncherActivities; } /** * Name of the package as used to identify it in the system */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setPackageName(@NonNull String value) { mPackageName = value; com.android.internal.util.AnnotationValidations.validate( NonNull.class, null, mPackageName); return this; } /** * Signing certificates used to sign the package. */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setSigningInfo(@NonNull SigningInfo value) { mSigningInfo = value; com.android.internal.util.AnnotationValidations.validate( NonNull.class, null, mSigningInfo); return this; } /** * The version number of the package, as specified by the <manifest>tag's * {@link android.R.styleable#AndroidManifest_versionCode versionCode} attribute. */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setVersionCode( int value) { mVersionCode = value; return this; } /** * The major version number of the package, as specified by the <manifest>tag's * {@link android.R.styleable#AndroidManifest_versionCode versionCodeMajor} attribute. */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setVersionCodeMajor( int value) { mVersionCodeMajor = value; return this; } /** * This is the SDK version number that the application is targeting, as specified by the * <manifest> tag's {@link android.R.styleable#AndroidManifestUsesSdk_targetSdkVersion} * attribute. */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setTargetSdkVersion( int value) { mTargetSdkVersion = value; return this; } /** * Package data will default to device protected storage. Specified by the <manifest> * tag's {@link android.R.styleable#AndroidManifestApplication_defaultToDeviceProtectedStorage} * attribute. */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setDefaultToDeviceProtectedStorage(@NonNull String value) { mDefaultToDeviceProtectedStorage = value; return this; } /** * If {@code true} this app would like to run under the legacy storage model. Specified by the * <manifest> tag's * {@link android.R.styleable#AndroidManifestApplication_requestLegacyExternalStorage} * attribute. */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setRequestLegacyExternalStorage(@NonNull String value) { mRequestLegacyExternalStorage = value; return this; } /** * If {@code true} the user is prompted to keep the app's data on uninstall. Specified by the * <manifest> tag's * {@link android.R.styleable#AndroidManifestApplication_hasFragileUserData} attribute. */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setUserDataFragile(@NonNull String value) { mUserDataFragile = value; return this; } /** * List of the package's activities that specify {@link Intent#ACTION_MAIN} and * {@link Intent#CATEGORY_LAUNCHER}. * * @see LauncherApps#getActivityList */ @DataClass.Generated.Member public @NonNull ArchivedPackageInfo setLauncherActivities(@NonNull List value) { mLauncherActivities = value; com.android.internal.util.AnnotationValidations.validate( NonNull.class, null, mLauncherActivities); return this; } @DataClass.Generated( time = 1698789995536L, codegenVersion = "1.0.23", sourceFile = "frameworks/base/core/java/android/content/pm/ArchivedPackageInfo.java", inputSignatures = "private @android.annotation.NonNull java.lang.String mPackageName\nprivate @android.annotation.NonNull android.content.pm.SigningInfo mSigningInfo\nprivate int mVersionCode\nprivate int mVersionCodeMajor\nprivate int mTargetSdkVersion\nprivate @android.annotation.Nullable java.lang.String mDefaultToDeviceProtectedStorage\nprivate @android.annotation.Nullable java.lang.String mRequestLegacyExternalStorage\nprivate @android.annotation.Nullable java.lang.String mUserDataFragile\nprivate @android.annotation.NonNull java.util.List mLauncherActivities\n android.content.pm.ArchivedPackageParcel getParcel()\nclass ArchivedPackageInfo extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=false, genConstructor=false, genSetters=true)") @Deprecated private void __metadata() {} //@formatter:on // End of generated code }