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}