blob: c38672cfc93c4a5211976854a53d264122bd9792 [file] [log] [blame]
/*
* Copyright (C) 2019 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 com.android.server.pm;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageParser;
import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
class PackageBuilder {
final PackageParser.Package mPkg;
PackageBuilder(String packageName) {
mPkg = new PackageParser.Package(packageName);
}
PackageBuilder setApplicationInfoCodePath(String codePath) {
mPkg.applicationInfo.setCodePath(codePath);
return this;
}
PackageBuilder setApplicationInfoResourcePath(String resourcePath) {
mPkg.applicationInfo.setResourcePath(resourcePath);
return this;
}
PackageBuilder setCodePath(String codePath) {
mPkg.codePath = codePath;
return this;
}
PackageBuilder setBaseCodePath(String baseCodePath) {
mPkg.baseCodePath = baseCodePath;
return this;
}
PackageBuilder addUsesStaticLibrary(String name, long version) {
mPkg.usesStaticLibraries = ArrayUtils.add(mPkg.usesStaticLibraries, name);
mPkg.usesStaticLibrariesVersions =
ArrayUtils.appendLong(mPkg.usesStaticLibrariesVersions, version);
return this;
}
PackageBuilder setApplicationInfoNativeLibraryRootDir(String dir) {
mPkg.applicationInfo.nativeLibraryRootDir = dir;
return this;
}
PackageBuilder setStaticSharedLib(String staticSharedLibName, long staticSharedLibVersion) {
mPkg.staticSharedLibVersion = staticSharedLibVersion;
mPkg.staticSharedLibName = staticSharedLibName;
return this;
}
PackageBuilder setManifestPackageName(String manifestPackageName) {
mPkg.manifestPackageName = manifestPackageName;
return this;
}
PackageBuilder setVersionCodeMajor(int versionCodeMajor) {
mPkg.mVersionCodeMajor = versionCodeMajor;
return this;
}
PackageBuilder setVersionCode(int versionCode) {
mPkg.mVersionCode = versionCode;
return this;
}
PackageBuilder addSplitCodePath(String splitCodePath) {
mPkg.splitCodePaths =
ArrayUtils.appendElement(String.class, mPkg.splitCodePaths, splitCodePath);
return this;
}
PackageBuilder setApplicationInfoVolumeUuid(String volumeUuid) {
mPkg.applicationInfo.volumeUuid = volumeUuid;
return this;
}
PackageBuilder addLibraryName(String libraryName) {
mPkg.libraryNames = ArrayUtils.add(mPkg.libraryNames, libraryName);
return this;
}
PackageBuilder setRealPackageName(String realPackageName) {
mPkg.mRealPackage = realPackageName;
return this;
}
PackageBuilder setCpuAbiOVerride(String cpuAbiOverride) {
mPkg.cpuAbiOverride = cpuAbiOverride;
return this;
}
PackageBuilder addPermissionRequest(String permissionName) {
mPkg.requestedPermissions.add(permissionName);
return this;
}
PackageParser.Package build() {
return mPkg;
}
public PackageBuilder addApplicationInfoFlag(int flag) {
mPkg.applicationInfo.flags |= flag;
return this;
}
public PackageBuilder setApplicationInfoTargetSdkVersion(int versionCode) {
mPkg.applicationInfo.targetSdkVersion = versionCode;
return this;
}
public PackageBuilder setQueriesIntents(Collection<Intent> queriesIntents) {
mPkg.mQueriesIntents = new ArrayList<>(queriesIntents);
return this;
}
public PackageBuilder setQueriesIntents(Intent... intents) {
return setQueriesIntents(Arrays.asList(intents));
}
public PackageBuilder setQueriesPackages(Collection<String> queriesPackages) {
mPkg.mQueriesPackages = new ArrayList<>(queriesPackages);
return this;
}
public PackageBuilder setQueriesPackages(String... queriesPackages) {
return setQueriesPackages(Arrays.asList(queriesPackages));
}
public PackageBuilder setForceQueryable(boolean forceQueryable) {
mPkg.mForceQueryable = forceQueryable;
return this;
}
public interface ParseComponentArgsCreator {
PackageParser.ParseComponentArgs create(PackageParser.Package pkg);
}
public PackageBuilder addActivity(ParseComponentArgsCreator argsCreator, ActivityInfo info) {
mPkg.activities.add(new PackageParser.Activity(argsCreator.create(mPkg), info));
return this;
}
public interface ActivityIntentInfoCreator {
PackageParser.ActivityIntentInfo create(PackageParser.Activity activity);
}
public PackageBuilder addActivityIntentInfo(
int activityIndex, ActivityIntentInfoCreator creator) {
final PackageParser.Activity activity = mPkg.activities.get(activityIndex);
activity.intents.add(creator.create(activity));
return this;
}
}