/** * 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.annotations.LaunchMode; import org.androidtransfuse.annotations.ScreenOrientation; import org.androidtransfuse.annotations.UIOptions; import org.androidtransfuse.annotations.WindowSoftInputMode; import org.androidtransfuse.model.Identified; import org.androidtransfuse.model.Mergeable; import org.androidtransfuse.processor.Merge; import org.androidtransfuse.processor.MergeCollection; import org.apache.commons.lang.builder.EqualsBuilder; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.ArrayList; import java.util.List; /** * attributes: * android:allowTaskReparenting=["true" | "false"] * android:alwaysRetainTaskState=["true" | "false"] * android:clearTaskOnLaunch=["true" | "false"] * android:configChanges=["mcc", "mnc", "locale", * "touchscreen", "keyboard", "keyboardHidden", * "navigation", "screenLayout", "fontScale", "uiMode", * "orientation", "screenSize", "smallestScreenSize"] * android:enabled=["true" | "false"] * android:excludeFromRecents=["true" | "false"] * android:exported=["true" | "false"] * android:finishOnTaskLaunch=["true" | "false"] * android:hardwareAccelerated=["true" | "false"] * android:icon="drawable resource" * android:label="string resource" * android:launchMode=["multiple" | "singleTop" | * "singleTask" | "singleInstance"] * android:multiprocess=["true" | "false"] * android:name="string" * android:noHistory=["true" | "false"] * android:permission="string" * android:process="string" * android:screenOrientation=["unspecified" | "user" | "behind" | * "landscape" | "portrait" | * "reverseLandscape" | "reversePortrait" | * "sensorLandscape" | "sensorPortrait" | * "sensor" | "fullSensor" | "nosensor"] * android:stateNotNeeded=["true" | "false"] * android:taskAffinity="string" * android:theme="resource or theme" * android:uiOptions=["none" | "splitActionBarWhenNarrow"] * android:windowSoftInputMode=["stateUnspecified", * "stateUnchanged", "stateHidden", * "stateAlwaysHidden", "stateVisible", * "stateAlwaysVisible", "adjustUnspecified", * "adjustResize", "adjustPan"] * * can contain: * <intent-filter> * <meta-data> * * @author John Ericksen */ public class Activity extends Mergeable implements Comparable<Activity>, Identified { private Boolean allowTaskReparenting; private Boolean alwaysRetainTaskState; private Boolean clearTaskOnLaunch; private String configChanges; private Boolean enabled; private Boolean excludeFromRecents; private Boolean exported; private Boolean finishOnTaskLaunch; private Boolean hardwareAccelerated; private String icon; private String label; private LaunchMode launchMode; private Boolean multiprocess; private String name; private Boolean noHistory; private String permission; private String process; private ScreenOrientation screenOrientation; private Boolean stateNotNeeded; private String taskAffinity; private String theme; private UIOptions uiOptions; private WindowSoftInputMode windowSoftInputMode; private List<IntentFilter> intentFilters = new ArrayList<IntentFilter>(); private List<MetaData> metaData = new ArrayList<MetaData>(); @Merge("t") @XmlAttribute(name = "allowTaskReparenting", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getAllowTaskReparenting() { return allowTaskReparenting; } public void setAllowTaskReparenting(Boolean allowTaskReparenting) { this.allowTaskReparenting = allowTaskReparenting; } @Merge("s") @XmlAttribute(name = "alwaysRetainTaskState", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getAlwaysRetainTaskState() { return alwaysRetainTaskState; } public void setAlwaysRetainTaskState(Boolean alwaysRetainTaskState) { this.alwaysRetainTaskState = alwaysRetainTaskState; } @Merge("c") @XmlAttribute(name = "clearTaskOnLaunch", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getClearTaskOnLaunch() { return clearTaskOnLaunch; } public void setClearTaskOnLaunch(Boolean clearTaskOnLaunch) { this.clearTaskOnLaunch = clearTaskOnLaunch; } @Merge("a") @XmlAttribute(name = "configChanges", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getConfigChanges() { return configChanges; } public void setConfigChanges(String configChanges) { this.configChanges = configChanges; } @Merge("e") @XmlAttribute(name = "enabled", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getEnabled() { return enabled; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } @Merge("r") @XmlAttribute(name = "excludeFromRecents", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getExcludeFromRecents() { return excludeFromRecents; } public void setExcludeFromRecents(Boolean excludeFromRecents) { this.excludeFromRecents = excludeFromRecents; } @Merge("x") @XmlAttribute(name = "exported", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getExported() { return exported; } public void setExported(Boolean exported) { this.exported = exported; } @Merge("f") @XmlAttribute(name = "finishOnTaskLaunch", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getFinishOnTaskLaunch() { return finishOnTaskLaunch; } public void setFinishOnTaskLaunch(Boolean finishOnTaskLaunch) { this.finishOnTaskLaunch = finishOnTaskLaunch; } @Merge("j") @XmlAttribute(name = "hardwareAccelerated", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getHardwareAccelerated() { return hardwareAccelerated; } public void setHardwareAccelerated(Boolean hardwareAccelerated) { this.hardwareAccelerated = hardwareAccelerated; } @Merge("i") @XmlAttribute(name = "icon", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } @Merge("l") @XmlAttribute(name = "label", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } @Merge("u") @XmlAttribute(name = "launchMode", namespace = ManifestNamespaceMapper.ANDROID_URI) @XmlJavaTypeAdapter(LabeledConverter.LaunchModeConverter.class) public LaunchMode getLaunchMode() { return launchMode; } public void setLaunchMode(LaunchMode launchMode) { this.launchMode = launchMode; } @Merge("m") @XmlAttribute(name = "multiprocess", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getMultiprocess() { return multiprocess; } public void setMultiprocess(Boolean multiprocess) { this.multiprocess = multiprocess; } @Merge("n") @XmlAttribute(name = "name", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getName() { return name; } public void setName(String name) { this.name = name; } @Merge("v") @XmlAttribute(name = "noHistory", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getNoHistory() { return noHistory; } public void setNoHistory(Boolean noHistory) { this.noHistory = noHistory; } @Merge("p") @XmlAttribute(name = "permission", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getPermission() { return permission; } public void setPermission(String permission) { this.permission = permission; } @Merge("o") @XmlAttribute(name = "process", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getProcess() { return process; } public void setProcess(String process) { this.process = process; } @Merge("g") @XmlAttribute(name = "screenOrientation", namespace = ManifestNamespaceMapper.ANDROID_URI) @XmlJavaTypeAdapter(LabeledConverter.ScreenOrientationConverter.class) public ScreenOrientation getScreenOrientation() { return screenOrientation; } public void setScreenOrientation(ScreenOrientation screenOrientation) { this.screenOrientation = screenOrientation; } @Merge("d") @XmlAttribute(name = "stateNotNeeded", namespace = ManifestNamespaceMapper.ANDROID_URI) public Boolean getStateNotNeeded() { return stateNotNeeded; } public void setStateNotNeeded(Boolean stateNotNeeded) { this.stateNotNeeded = stateNotNeeded; } @Merge("y") @XmlAttribute(name = "taskAffinity", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getTaskAffinity() { return taskAffinity; } public void setTaskAffinity(String taskAffinity) { this.taskAffinity = taskAffinity; } @Merge("h") @XmlAttribute(name = "theme", namespace = ManifestNamespaceMapper.ANDROID_URI) public String getTheme() { return theme; } public void setTheme(String theme) { this.theme = theme; } @Merge("b") @XmlAttribute(name = "uiOptions", namespace = ManifestNamespaceMapper.ANDROID_URI) @XmlJavaTypeAdapter(LabeledConverter.UIOptionsConverter.class) public UIOptions getUiOptions() { return uiOptions; } public void setUiOptions(UIOptions uiOptions) { this.uiOptions = uiOptions; } @Merge("w") @XmlAttribute(name = "windowSoftInputMode", namespace = ManifestNamespaceMapper.ANDROID_URI) @XmlJavaTypeAdapter(LabeledConverter.WindowSoftInputModeConverter.class) public WindowSoftInputMode getWindowSoftInputMode() { return windowSoftInputMode; } public void setWindowSoftInputMode(WindowSoftInputMode windowSoftInputMode) { this.windowSoftInputMode = windowSoftInputMode; } @MergeCollection(collectionType = ArrayList.class, type = IntentFilter.class) @XmlElement(name = "intent-filter") public List<IntentFilter> getIntentFilters() { return intentFilters; } public void setIntentFilters(List<IntentFilter> intentFilters) { this.intentFilters = intentFilters; } @MergeCollection(collectionType = ArrayList.class, type = MetaData.class) @XmlElement(name = "meta-data") public List<MetaData> getMetaData() { return metaData; } public void setMetaData(List<MetaData> metaData) { this.metaData = metaData; } @Override public boolean equals(Object obj) { if (!(obj instanceof Activity)) { return false; } if (this == obj) { return true; } Activity rhs = (Activity) obj; return new EqualsBuilder() .append(name, rhs.name) .isEquals(); } @Override public int hashCode() { return name.hashCode(); } @Override @XmlTransient public String getIdentifier() { return name; } @Override public int compareTo(Activity activity) { return getName().compareTo(activity.getName()); } public void updatePackage(String manifestPackage){ if(name != null && name.startsWith(manifestPackage) && containsTag("n")){ name = name.substring(manifestPackage.length()); } } }