Home | History | Annotate | Download | only in manifest
      1 package org.robolectric.manifest;
      2 
      3 import java.util.ArrayList;
      4 import java.util.HashMap;
      5 import java.util.List;
      6 import java.util.Map;
      7 
      8 public class ActivityData {
      9   private static final String ALLOW_TASK_REPARENTING = "allowTaskReparenting";
     10   private static final String ALWAYS_RETAIN_TASK_STATE = "alwaysRetainTaskState";
     11   private static final String CLEAR_TASK_ON_LAUNCH = "clearTaskOnLaunch";
     12   private static final String CONFIG_CHANGES = "configChanges";
     13   private static final String ENABLED = "enabled";
     14   private static final String EXCLUDE_FROM_RECENTS = "excludeFromRecents";
     15   private static final String EXPORTED = "exported";
     16   private static final String FINISH_ON_TASK_LAUNCH = "finishOnTaskLaunch";
     17   private static final String HARDWARE_ACCELERATED = "hardwareAccelerated";
     18   private static final String LABEL = "label";
     19   private static final String LAUNCH_MODE = "launchMode";
     20   private static final String MULTIPROCESS = "multiprocess";
     21   private static final String NAME = "name";
     22   private static final String NO_HISTORY = "noHistory";
     23   private static final String PARENT_ACTIVITY_NAME = "parentActivityName";
     24   private static final String PERMISSION = "permission";
     25   private static final String PROCESS = "process";
     26   private static final String SCREEN_ORIENTATION = "screenOrientation";
     27   private static final String STATE_NOT_NEEDED = "stateNotNeeded";
     28   private static final String TARGET_ACTIVITY = "targetActivity";
     29   private static final String TASK_AFFINITY = "taskAffinity";
     30   private static final String THEME = "theme";
     31   private static final String UI_OPTIONS = "uiOptions";
     32   private static final String WINDOW_SOFT_INPUT_MODE = "windowSoftInputMode";
     33 
     34   private final List<IntentFilterData> intentFilters;
     35   private final HashMap<String, String> attrs;
     36   // Non-null only for activity-alias'es.
     37   private final ActivityData targetActivity;
     38 
     39   /**
     40    * XML Namespace used for android.
     41    */
     42   private final String xmlns;
     43   private final MetaData metaData;
     44 
     45   public ActivityData(Map<String, String> attrMap, List<IntentFilterData> intentFilters) {
     46     this("android", attrMap, intentFilters);
     47   }
     48 
     49   public ActivityData(String xmlns, Map<String, String> attrMap, List<IntentFilterData> intentFilters) {
     50     this(xmlns, attrMap, intentFilters, null, null);
     51   }
     52 
     53   public ActivityData(String xmlns, Map<String, String> attrMap, List<IntentFilterData> intentFilters,
     54       ActivityData targetActivity, MetaData metaData) {
     55     this.xmlns = xmlns;
     56     attrs = new HashMap<>();
     57     attrs.putAll(attrMap);
     58     this.intentFilters = new ArrayList<>(intentFilters);
     59     this.targetActivity = targetActivity;
     60     this.metaData = metaData;
     61   }
     62 
     63   public boolean isAllowTaskReparenting() {
     64     return getBooleanAttr(withXMLNS(ALLOW_TASK_REPARENTING), false);
     65   }
     66 
     67   public boolean isAlwaysRetainTaskState() {
     68     return getBooleanAttr(withXMLNS(ALWAYS_RETAIN_TASK_STATE), false);
     69   }
     70 
     71   public boolean isClearTaskOnLaungh() {
     72     return getBooleanAttr(withXMLNS(CLEAR_TASK_ON_LAUNCH), false);
     73   }
     74 
     75   public String getConfigChanges() {
     76     return attrs.get(withXMLNS(CONFIG_CHANGES));
     77   }
     78 
     79   public boolean isEnabled() {
     80     return getBooleanAttr(withXMLNS(ENABLED), true);
     81   }
     82 
     83   public boolean isExcludedFromRecents() {
     84     return getBooleanAttr(withXMLNS(EXCLUDE_FROM_RECENTS), false);
     85   }
     86 
     87   public boolean isExported() {
     88     boolean defaultValue = !intentFilters.isEmpty();
     89     return getBooleanAttr(withXMLNS(EXPORTED), defaultValue);
     90   }
     91 
     92   public boolean isFinishOnTaskLaunch() {
     93     return getBooleanAttr(withXMLNS(FINISH_ON_TASK_LAUNCH), false);
     94   }
     95 
     96   public boolean isHardwareAccelerated() {
     97     return getBooleanAttr(withXMLNS(HARDWARE_ACCELERATED), false);
     98   }
     99 
    100   /* TODO: public boolean getIcon() {} */
    101 
    102   public String getLabel() {
    103     return attrs.get(withXMLNS(LABEL));
    104   }
    105 
    106   public String getLaunchMode() {
    107     return attrs.get(withXMLNS(LAUNCH_MODE));
    108   }
    109 
    110   public boolean isMultiprocess() {
    111     return getBooleanAttr(withXMLNS(MULTIPROCESS), false);
    112   }
    113 
    114   public String getName() {
    115     return attrs.get(withXMLNS(NAME));
    116   }
    117 
    118   public boolean isNoHistory() {
    119     return getBooleanAttr(withXMLNS(NO_HISTORY), false);
    120   }
    121 
    122   public String getParentActivityName() {
    123     return attrs.get(withXMLNS(PARENT_ACTIVITY_NAME));
    124   }
    125 
    126   public String getPermission() {
    127     return attrs.get(withXMLNS(PERMISSION));
    128   }
    129 
    130   public String getProcess() {
    131     return attrs.get(withXMLNS(PROCESS));
    132   }
    133 
    134   public String getScreenOrientation() {
    135     return attrs.get(withXMLNS(SCREEN_ORIENTATION));
    136   }
    137 
    138   public boolean isStateNotNeeded() {
    139     return getBooleanAttr(withXMLNS(STATE_NOT_NEEDED), false);
    140   }
    141 
    142   public String getTargetActivityName() {
    143     return attrs.get(withXMLNS(TARGET_ACTIVITY));
    144   }
    145 
    146   public String getTaskAffinity() {
    147     return attrs.get(withXMLNS(TASK_AFFINITY));
    148   }
    149 
    150   /**
    151    * Convenience accessor for value of android:THEME attribute.
    152    *
    153    * @return The theme attribute.
    154    */
    155   public String getThemeRef() {
    156     return attrs.get(withXMLNS(THEME));
    157   }
    158 
    159   public String getUIOptions() {
    160     return attrs.get(withXMLNS(UI_OPTIONS));
    161   }
    162 
    163   public String getWindowSoftInputMode() {
    164     return attrs.get(withXMLNS(WINDOW_SOFT_INPUT_MODE));
    165   }
    166 
    167   private boolean getBooleanAttr(String n, boolean defaultValue) {
    168     return (attrs.containsKey(n) ? Boolean.parseBoolean(attrs.get(n)): defaultValue);
    169   }
    170 
    171   private String withXMLNS(String attr) {
    172     return withXMLNS(xmlns, attr);
    173   }
    174 
    175   /**
    176    * Get the map for all attributes defined for the activity XML.
    177    * @return map of attributes names to values from the manifest. Not null.
    178    */
    179   public Map<String, String> getAllAttributes() {
    180     return attrs;
    181   }
    182 
    183   /**
    184    * Get the intent filters defined for activity.
    185    * @return A list of intent filters. Not null.
    186    */
    187   public List<IntentFilterData> getIntentFilters() {
    188     return intentFilters;
    189   }
    190 
    191   public MetaData getMetaData() {
    192     return metaData;
    193   }
    194 
    195   public ActivityData getTargetActivity() {
    196     return targetActivity;
    197   }
    198 
    199   private static String withXMLNS(String xmlns, String attr) {
    200     return String.format("%s:%s", xmlns, attr);
    201   }
    202 
    203   public static String getNameAttr(String xmlns) {
    204     return withXMLNS(xmlns, NAME);
    205   }
    206 
    207   public static String getTargetAttr(String xmlns) {
    208     return withXMLNS("android", TARGET_ACTIVITY);
    209   }
    210 }
    211