001/**
002 * Copyright 2013 John Ericksen
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *    http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.androidtransfuse.model.manifest;
017
018import org.androidtransfuse.annotations.UIOptions;
019import org.androidtransfuse.model.Identified;
020import org.androidtransfuse.model.Mergeable;
021import org.androidtransfuse.processor.Merge;
022import org.androidtransfuse.processor.MergeCollection;
023
024import javax.xml.bind.annotation.XmlAttribute;
025import javax.xml.bind.annotation.XmlElement;
026import javax.xml.bind.annotation.XmlTransient;
027import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
028import java.util.ArrayList;
029import java.util.List;
030
031/**
032 * attributes
033 * android:allowTaskReparenting=["true" | "false"]
034 * android:backupAgent="string"
035 * android:debuggable=["true" | "false"]
036 * android:description="string resource"
037 * android:enabled=["true" | "false"]
038 * android:hasCode=["true" | "false"]
039 * android:hardwareAccelerated=["true" | "false"]
040 * android:icon="drawable resource"
041 * android:killAfterRestore=["true" | "false"]
042 * android:label="string resource"
043 * android:logo="drawable resource"
044 * android:manageSpaceActivity="string"
045 * android:name="string"
046 * android:permission="string"
047 * android:persistent=["true" | "false"]
048 * android:process="string"
049 * android:restoreAnyVersion=["true" | "false"]
050 * android:taskAffinity="string"
051 * android:theme="resource or theme"
052 * android:uiOptions=["none" | "splitActionBarWhenNarrow"]
053 * <p/>
054 * can contain:
055 * <activity>
056 * <activity-alias>
057 * <service>
058 * <receiver>
059 * <provider>
060 * <uses-library>
061 *
062 * @author John Ericksen
063 */
064public class Application extends Mergeable implements Identified {
065
066    private Boolean allowTaskReparenting;
067    private String backupAgent;
068    private Boolean debuggable;
069    private String description;
070    private Boolean enabled;
071    private Boolean hasCode;
072    private Boolean hardwareAccelerated;
073    private String icon;
074    private Boolean killAfterRestore;
075    private String label;
076    private String logo;
077    private String manageSpaceActivity;
078    private String name;
079    private String permission;
080    private Boolean persistent;
081    private String process;
082    private Boolean restoreAnyVersion;
083    private String taskAffinity;
084    private String theme;
085    private UIOptions uiOptions;
086    private Boolean allowBackup;
087    private Boolean largeHeap;
088    private Boolean supportsRtl;
089    private Boolean restrictedAccountType;
090    private Boolean vmSafeMode;
091    private Boolean testOnly;
092    private String requiredAccountType;
093    private List<Activity> activities = new ArrayList<Activity>();
094    private List<ActivityAlias> activityAliases = new ArrayList<ActivityAlias>();
095    private List<Service> services = new ArrayList<Service>();
096    private List<Receiver> receivers = new ArrayList<Receiver>();
097    private List<Provider> providers = new ArrayList<Provider>();
098    private List<UsesLibrary> usesLibraries = new ArrayList<UsesLibrary>();
099    private List<MetaData> metaData = new ArrayList<MetaData>();
100
101    @Merge("r")
102    @XmlAttribute(name = "allowTaskReparenting", namespace = ManifestNamespaceMapper.ANDROID_URI)
103    public Boolean getAllowTaskReparenting() {
104        return allowTaskReparenting;
105    }
106
107    public void setAllowTaskReparenting(Boolean allowTaskReparenting) {
108        this.allowTaskReparenting = allowTaskReparenting;
109    }
110
111    @Merge("a")
112    @XmlAttribute(name = "backupAgent", namespace = ManifestNamespaceMapper.ANDROID_URI)
113    public String getBackupAgent() {
114        return backupAgent;
115    }
116
117    public void setBackupAgent(String backupAgent) {
118        this.backupAgent = backupAgent;
119    }
120
121    @Merge("b")
122    @XmlAttribute(name = "debuggable", namespace = ManifestNamespaceMapper.ANDROID_URI)
123    public Boolean getDebuggable() {
124        return debuggable;
125    }
126
127    public void setDebuggable(Boolean debuggable) {
128        this.debuggable = debuggable;
129    }
130
131    @Merge("d")
132    @XmlAttribute(name = "description", namespace = ManifestNamespaceMapper.ANDROID_URI)
133    public String getDescription() {
134        return description;
135    }
136
137    public void setDescription(String description) {
138        this.description = description;
139    }
140
141    @Merge("e")
142    @XmlAttribute(name = "enabled", namespace = ManifestNamespaceMapper.ANDROID_URI)
143    public Boolean getEnabled() {
144        return enabled;
145    }
146
147    public void setEnabled(Boolean enabled) {
148        this.enabled = enabled;
149    }
150
151    @Merge("c")
152    @XmlAttribute(name = "hasCode", namespace = ManifestNamespaceMapper.ANDROID_URI)
153    public Boolean getHasCode() {
154        return hasCode;
155    }
156
157    public void setHasCode(Boolean hasCode) {
158        this.hasCode = hasCode;
159    }
160
161    @Merge("h")
162    @XmlAttribute(name = "hardwareAccelerated", namespace = ManifestNamespaceMapper.ANDROID_URI)
163    public Boolean getHardwareAccelerated() {
164        return hardwareAccelerated;
165    }
166
167    public void setHardwareAccelerated(Boolean hardwareAccelerated) {
168        this.hardwareAccelerated = hardwareAccelerated;
169    }
170
171    @Merge("i")
172    @XmlAttribute(name = "icon", namespace = ManifestNamespaceMapper.ANDROID_URI)
173    public String getIcon() {
174        return icon;
175    }
176
177    public void setIcon(String icon) {
178        this.icon = icon;
179    }
180
181    @Merge("k")
182    @XmlAttribute(name = "killAfterRestore", namespace = ManifestNamespaceMapper.ANDROID_URI)
183    public Boolean getKillAfterRestore() {
184        return killAfterRestore;
185    }
186
187    public void setKillAfterRestore(Boolean killAfterRestore) {
188        this.killAfterRestore = killAfterRestore;
189    }
190
191    @Merge("l")
192    @XmlAttribute(name = "label", namespace = ManifestNamespaceMapper.ANDROID_URI)
193    public String getLabel() {
194        return label;
195    }
196
197    public void setLabel(String label) {
198        this.label = label;
199    }
200
201    @Merge("o")
202    @XmlAttribute(name = "logo", namespace = ManifestNamespaceMapper.ANDROID_URI)
203    public String getLogo() {
204        return logo;
205    }
206
207    public void setLogo(String logo) {
208        this.logo = logo;
209    }
210
211    @Merge("s")
212    @XmlAttribute(name = "manageSpaceActivity", namespace = ManifestNamespaceMapper.ANDROID_URI)
213    public String getManageSpaceActivity() {
214        return manageSpaceActivity;
215    }
216
217    public void setManageSpaceActivity(String manageSpaceActivity) {
218        this.manageSpaceActivity = manageSpaceActivity;
219    }
220
221    @Merge("n")
222    @XmlAttribute(name = "name", namespace = ManifestNamespaceMapper.ANDROID_URI)
223    public String getName() {
224        return name;
225    }
226
227    public void setName(String name) {
228        this.name = name;
229    }
230
231    @Merge("m")
232    @XmlAttribute(name = "permission", namespace = ManifestNamespaceMapper.ANDROID_URI)
233    public String getPermission() {
234        return permission;
235    }
236
237    public void setPermission(String permission) {
238        this.permission = permission;
239    }
240
241    @Merge("x")
242    @XmlAttribute(name = "persistent", namespace = ManifestNamespaceMapper.ANDROID_URI)
243    public Boolean getPersistent() {
244        return persistent;
245    }
246
247    public void setPersistent(Boolean persistent) {
248        this.persistent = persistent;
249    }
250
251    @Merge("p")
252    @XmlAttribute(name = "process", namespace = ManifestNamespaceMapper.ANDROID_URI)
253    public String getProcess() {
254        return process;
255    }
256
257    public void setProcess(String process) {
258        this.process = process;
259    }
260
261    @Merge("v")
262    @XmlAttribute(name = "restoreAnyVersion", namespace = ManifestNamespaceMapper.ANDROID_URI)
263    public Boolean getRestoreAnyVersion() {
264        return restoreAnyVersion;
265    }
266
267    public void setRestoreAnyVersion(Boolean restoreAnyVersion) {
268        this.restoreAnyVersion = restoreAnyVersion;
269    }
270
271    @Merge("f")
272    @XmlAttribute(name = "taskAffinity", namespace = ManifestNamespaceMapper.ANDROID_URI)
273    public String getTaskAffinity() {
274        return taskAffinity;
275    }
276
277    public void setTaskAffinity(String taskAffinity) {
278        this.taskAffinity = taskAffinity;
279    }
280
281    @Merge("t")
282    @XmlAttribute(name = "theme", namespace = ManifestNamespaceMapper.ANDROID_URI)
283    public String getTheme() {
284        return theme;
285    }
286
287    public void setTheme(String theme) {
288        this.theme = theme;
289    }
290
291    @Merge("u")
292    @XmlAttribute(name = "uiOptions", namespace = ManifestNamespaceMapper.ANDROID_URI)
293    @XmlJavaTypeAdapter(LabeledConverter.UIOptionsConverter.class)
294    public UIOptions getUiOptions() {
295        return uiOptions;
296    }
297
298    public void setUiOptions(UIOptions uiOptions) {
299        this.uiOptions = uiOptions;
300    }
301
302    @MergeCollection(collectionType = ArrayList.class, type = Activity.class)
303    @XmlElement(name = "activity")
304    public List<Activity> getActivities() {
305        return activities;
306    }
307
308    public void setActivities(List<Activity> activities) {
309        this.activities = activities;
310    }
311
312    @XmlElement(name = "activity-alias")
313    public List<ActivityAlias> getActivityAliases() {
314        return activityAliases;
315    }
316
317    public void setActivityAliases(List<ActivityAlias> activityAliases) {
318        this.activityAliases = activityAliases;
319    }
320
321    @MergeCollection(collectionType = ArrayList.class, type = Service.class)
322    @XmlElement(name = "service")
323    public List<Service> getServices() {
324        return services;
325    }
326
327    public void setServices(List<Service> services) {
328        this.services = services;
329    }
330
331    @MergeCollection(collectionType = ArrayList.class, type = Receiver.class)
332    @XmlElement(name = "receiver")
333    public List<Receiver> getReceivers() {
334        return receivers;
335    }
336
337    public void setReceivers(List<Receiver> receivers) {
338        this.receivers = receivers;
339    }
340
341    @MergeCollection(collectionType = ArrayList.class, type = MetaData.class)
342    @XmlElement(name = "meta-data")
343    public List<MetaData> getMetaData() {
344        return metaData;
345    }
346
347    public void setMetaData(List<MetaData> metaData) {
348        this.metaData = metaData;
349    }
350
351    @XmlElement(name = "provider")
352    public List<Provider> getProviders() {
353        return providers;
354    }
355
356    public void setProviders(List<Provider> providers) {
357        this.providers = providers;
358    }
359
360    @XmlElement(name = "uses-library")
361    public List<UsesLibrary> getUsesLibraries() {
362        return usesLibraries;
363    }
364
365    public void setUsesLibraries(List<UsesLibrary> usesLibraries) {
366        this.usesLibraries = usesLibraries;
367    }
368
369    @Merge("ab")
370    @XmlAttribute(name = "allowBackup", namespace = ManifestNamespaceMapper.ANDROID_URI)
371    public Boolean getAllowBackup() {
372        return allowBackup;
373    }
374
375    public void setAllowBackup(Boolean allowBackup) {
376        this.allowBackup = allowBackup;
377    }
378
379    @Merge("lh")
380    @XmlAttribute(name = "largeHeap", namespace = ManifestNamespaceMapper.ANDROID_URI)
381    public Boolean getLargeHeap() {
382        return largeHeap;
383    }
384
385    public void setLargeHeap(Boolean largeHeap) {
386        this.largeHeap = largeHeap;
387    }
388
389    @Merge("rt")
390    @XmlAttribute(name = "supportsRtl", namespace = ManifestNamespaceMapper.ANDROID_URI)
391    public Boolean getSupportsRtl() {
392        return supportsRtl;
393    }
394
395    public void setSupportsRtl(Boolean supportsRtl) {
396        this.supportsRtl = supportsRtl;
397    }
398
399    @Merge("ra")
400    @XmlAttribute(name = "restrictedAccountType", namespace = ManifestNamespaceMapper.ANDROID_URI)
401    public Boolean getRestrictedAccountType() {
402        return restrictedAccountType;
403    }
404
405    public void setRestrictedAccountType(Boolean restrictedAccountType) {
406        this.restrictedAccountType = restrictedAccountType;
407    }
408
409    @Merge("vm")
410    @XmlAttribute(name = "vmSafeMode", namespace = ManifestNamespaceMapper.ANDROID_URI)
411    public Boolean getVmSafeMode() {
412        return vmSafeMode;
413    }
414
415    public void setVmSafeMode(Boolean vmSafeMode) {
416        this.vmSafeMode = vmSafeMode;
417    }
418
419    @Merge("to")
420    @XmlAttribute(name = "testOnly", namespace = ManifestNamespaceMapper.ANDROID_URI)
421    public Boolean getTestOnly() {
422        return testOnly;
423    }
424
425    public void setTestOnly(Boolean testOnly) {
426        this.testOnly = testOnly;
427    }
428
429    @Merge("rc")
430    @XmlAttribute(name = "requiredAccountType", namespace = ManifestNamespaceMapper.ANDROID_URI)
431    public String getRequiredAccountType() {
432        return requiredAccountType;
433    }
434
435    public void setRequiredAccountType(String requiredAccountType) {
436        this.requiredAccountType = requiredAccountType;
437    }
438
439    @Override
440    @XmlTransient
441    public String getIdentifier() {
442        return name;
443    }
444
445    public void updatePackage(String manifestPackage) {
446        if(name != null && name.startsWith(manifestPackage) && containsTag("n")){
447            name = name.substring(manifestPackage.length());
448        }
449
450        if(activities != null){
451            for (Activity activity : activities) {
452                activity.updatePackage(manifestPackage);
453            }
454        }
455
456        if(services != null){
457            for (Service service : services) {
458                service.updatePackage(manifestPackage);
459            }
460        }
461
462        if(receivers != null){
463            for (Receiver receiver : receivers) {
464                receiver.updatePackage(manifestPackage);
465            }
466        }
467    }
468}