/** * Copyright 2011-2015 John Ericksen * * 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 org.androidtransfuse.model.manifest; import org.androidtransfuse.model.Mergeable; import org.androidtransfuse.processor.MergeCollection; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.ArrayList; import java.util.List; /** * attributes: * xmlns:android="http://schemas.android.com/apk/res/android" * package="string" * android:sharedUserId="string" * android:sharedUserLabel="string resource" * android:versionCode="integer" * android:versionName="string" * android:installLocation=["auto" | "internalOnly" | "preferExternal"] * * must contain: * <application> * * can contain: * <instrumentation> * <permission> * <permission-group> * <permission-tree> * <uses-configuration> * <uses-permission> * <uses-sdk> * <compatible-screens> * * @author John Ericksen */ @XmlRootElement(name = "manifest") @XmlType(propOrder = { // root manifest element attributes "applicationPackage", "sharedUserId", "sharedUserLabel", "versionCode", "versionName", "installLocation", // top level elements "usesPermissions", "permissions", "permissionTrees", "permissionGroups", "instrumentations", "usesSDKs", "usesConfigurations", "usesFeatures", "supportsScreens", "compatibleScreens", "applications" } ) public class Manifest extends Mergeable { private String applicationPackage; private String sharedUserId; private String sharedUserLabel; private Integer versionCode; private String versionName; private InstallLocation installLocation; private List<UsesPermission> usesPermissions = new ArrayList<UsesPermission>(); private List<UsesSDK> usesSDKs = new ArrayList<UsesSDK>(); private List<Application> applications = new ArrayList<Application>(); private List<Instrumentation> instrumentations = new ArrayList<Instrumentation>(); private List<Permission> permissions = new ArrayList<Permission>(); private List<PermissionGroup> permissionGroups = new ArrayList<PermissionGroup>(); private List<PermissionTree> permissionTrees = new ArrayList<PermissionTree>(); private List<SupportsScreens> supportsScreens = new ArrayList<SupportsScreens>(); private List<UsesFeature> usesFeatures = new ArrayList<UsesFeature>(); private List<UsesConfiguration> usesConfigurations = new ArrayList<UsesConfiguration>(); private List<CompatibleScreens> compatibleScreens = new ArrayList<CompatibleScreens>(); @XmlAttribute(name = "package") public String getApplicationPackage() { return applicationPackage; } public void setApplicationPackage(String applicationPackage) { this.applicationPackage = applicationPackage; } @XmlAttribute(name = "sharedUserId", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getSharedUserId() { return sharedUserId; } public void setSharedUserId(String sharedUserId) { this.sharedUserId = sharedUserId; } @XmlAttribute(name = "sharedUserLabel", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getSharedUserLabel() { return sharedUserLabel; } public void setSharedUserLabel(String sharedUserLabel) { this.sharedUserLabel = sharedUserLabel; } @XmlAttribute(name = "versionCode", namespace = ManifestNamespaceMapper.ANDROID_URI) public Integer getVersionCode() { return versionCode; } public void setVersionCode(Integer versionCode) { this.versionCode = versionCode; } @XmlAttribute(name = "versionName", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getVersionName() { return versionName; } public void setVersionName(String versionName) { this.versionName = versionName; } @XmlAttribute(name = "installLocation", namespace = ManifestNamespaceMapper.ANDROID_URI) @XmlJavaTypeAdapter(LabeledConverter.InstallLocationConverter.class) public InstallLocation getInstallLocation() { return installLocation; } public void setInstallLocation(InstallLocation installLocation) { this.installLocation = installLocation; } @MergeCollection(collectionType = ArrayList.class, type = Application.class) @XmlElement(name = "application") public List<Application> getApplications() { return applications; } public void setApplications(List<Application> applications) { this.applications = applications; } @XmlElement(name = "instrumentation") public List<Instrumentation> getInstrumentations() { return instrumentations; } public void setInstrumentations(List<Instrumentation> instrumentations) { this.instrumentations = instrumentations; } @XmlElement(name = "permission") public List<Permission> getPermissions() { return permissions; } @MergeCollection(collectionType = ArrayList.class, type = Permission.class) public void setPermissions(List<Permission> permissions) { this.permissions = permissions; } @XmlElement(name = "permission-group") public List<PermissionGroup> getPermissionGroups() { return permissionGroups; } public void setPermissionGroups(List<PermissionGroup> permissionGroups) { this.permissionGroups = permissionGroups; } @XmlElement(name = "permission-tree") public List<PermissionTree> getPermissionTrees() { return permissionTrees; } public void setPermissionTrees(List<PermissionTree> permissionTrees) { this.permissionTrees = permissionTrees; } @XmlElement(name = "uses-configuration") public List<UsesConfiguration> getUsesConfigurations() { return usesConfigurations; } public void setUsesConfigurations(List<UsesConfiguration> usesConfigurations) { this.usesConfigurations = usesConfigurations; } @MergeCollection(collectionType = ArrayList.class, type = UsesPermission.class) @XmlElement(name = "uses-permission") public List<UsesPermission> getUsesPermissions() { return usesPermissions; } public void setUsesPermissions(List<UsesPermission> usesPermissions) { this.usesPermissions = usesPermissions; } @MergeCollection(collectionType = ArrayList.class, type = UsesSDK.class) @XmlElement(name = "uses-sdk") public List<UsesSDK> getUsesSDKs() { return usesSDKs; } public void setUsesSDKs(List<UsesSDK> usesSDKs) { this.usesSDKs = usesSDKs; } @XmlElement(name = "supports-screens") public List<SupportsScreens> getSupportsScreens() { return supportsScreens; } public void setSupportsScreens(List<SupportsScreens> supportsScreens) { this.supportsScreens = supportsScreens; } @MergeCollection(collectionType = ArrayList.class, type = UsesFeature.class) @XmlElement(name = "uses-feature") public List<UsesFeature> getUsesFeatures() { return usesFeatures; } public void setUsesFeatures(List<UsesFeature> usesFeatures) { this.usesFeatures = usesFeatures; } @XmlElement(name = "compatible-screens") public List<CompatibleScreens> getCompatibleScreens() { return compatibleScreens; } public void setCompatibleScreens(List<CompatibleScreens> compatibleScreens) { this.compatibleScreens = compatibleScreens; } public void updatePackages() { if(applicationPackage != null){ for (Application application : applications) { application.updatePackage(applicationPackage); } } } }