• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   /** XML Namespace used for android. */
40   private final String xmlns;
41 
42   private final MetaData metaData;
43 
ActivityData(Map<String, String> attrMap, List<IntentFilterData> intentFilters)44   public ActivityData(Map<String, String> attrMap, List<IntentFilterData> intentFilters) {
45     this("android", attrMap, intentFilters);
46   }
47 
ActivityData( String xmlns, Map<String, String> attrMap, List<IntentFilterData> intentFilters)48   public ActivityData(
49       String xmlns, Map<String, String> attrMap, List<IntentFilterData> intentFilters) {
50     this(xmlns, attrMap, intentFilters, null, null);
51   }
52 
ActivityData( String xmlns, Map<String, String> attrMap, List<IntentFilterData> intentFilters, ActivityData targetActivity, MetaData metaData)53   public ActivityData(
54       String xmlns,
55       Map<String, String> attrMap,
56       List<IntentFilterData> intentFilters,
57       ActivityData targetActivity,
58       MetaData metaData) {
59     this.xmlns = xmlns;
60     attrs = new HashMap<>();
61     attrs.putAll(attrMap);
62     this.intentFilters = new ArrayList<>(intentFilters);
63     this.targetActivity = targetActivity;
64     this.metaData = metaData;
65   }
66 
isAllowTaskReparenting()67   public boolean isAllowTaskReparenting() {
68     return getBooleanAttr(withXMLNS(ALLOW_TASK_REPARENTING), false);
69   }
70 
isAlwaysRetainTaskState()71   public boolean isAlwaysRetainTaskState() {
72     return getBooleanAttr(withXMLNS(ALWAYS_RETAIN_TASK_STATE), false);
73   }
74 
isClearTaskOnLaungh()75   public boolean isClearTaskOnLaungh() {
76     return getBooleanAttr(withXMLNS(CLEAR_TASK_ON_LAUNCH), false);
77   }
78 
getConfigChanges()79   public String getConfigChanges() {
80     return attrs.get(withXMLNS(CONFIG_CHANGES));
81   }
82 
isEnabled()83   public boolean isEnabled() {
84     return getBooleanAttr(withXMLNS(ENABLED), true);
85   }
86 
isExcludedFromRecents()87   public boolean isExcludedFromRecents() {
88     return getBooleanAttr(withXMLNS(EXCLUDE_FROM_RECENTS), false);
89   }
90 
isExported()91   public boolean isExported() {
92     boolean defaultValue = !intentFilters.isEmpty();
93     return getBooleanAttr(withXMLNS(EXPORTED), defaultValue);
94   }
95 
isFinishOnTaskLaunch()96   public boolean isFinishOnTaskLaunch() {
97     return getBooleanAttr(withXMLNS(FINISH_ON_TASK_LAUNCH), false);
98   }
99 
isHardwareAccelerated()100   public boolean isHardwareAccelerated() {
101     return getBooleanAttr(withXMLNS(HARDWARE_ACCELERATED), false);
102   }
103 
104   /* TODO: public boolean getIcon() {} */
105 
getLabel()106   public String getLabel() {
107     return attrs.get(withXMLNS(LABEL));
108   }
109 
getLaunchMode()110   public String getLaunchMode() {
111     return attrs.get(withXMLNS(LAUNCH_MODE));
112   }
113 
isMultiprocess()114   public boolean isMultiprocess() {
115     return getBooleanAttr(withXMLNS(MULTIPROCESS), false);
116   }
117 
getName()118   public String getName() {
119     return attrs.get(withXMLNS(NAME));
120   }
121 
isNoHistory()122   public boolean isNoHistory() {
123     return getBooleanAttr(withXMLNS(NO_HISTORY), false);
124   }
125 
getParentActivityName()126   public String getParentActivityName() {
127     return attrs.get(withXMLNS(PARENT_ACTIVITY_NAME));
128   }
129 
getPermission()130   public String getPermission() {
131     return attrs.get(withXMLNS(PERMISSION));
132   }
133 
getProcess()134   public String getProcess() {
135     return attrs.get(withXMLNS(PROCESS));
136   }
137 
getScreenOrientation()138   public String getScreenOrientation() {
139     return attrs.get(withXMLNS(SCREEN_ORIENTATION));
140   }
141 
isStateNotNeeded()142   public boolean isStateNotNeeded() {
143     return getBooleanAttr(withXMLNS(STATE_NOT_NEEDED), false);
144   }
145 
getTargetActivityName()146   public String getTargetActivityName() {
147     return attrs.get(withXMLNS(TARGET_ACTIVITY));
148   }
149 
getTaskAffinity()150   public String getTaskAffinity() {
151     return attrs.get(withXMLNS(TASK_AFFINITY));
152   }
153 
154   /**
155    * Convenience accessor for value of android:THEME attribute.
156    *
157    * @return The theme attribute.
158    */
getThemeRef()159   public String getThemeRef() {
160     return attrs.get(withXMLNS(THEME));
161   }
162 
getUIOptions()163   public String getUIOptions() {
164     return attrs.get(withXMLNS(UI_OPTIONS));
165   }
166 
getWindowSoftInputMode()167   public String getWindowSoftInputMode() {
168     return attrs.get(withXMLNS(WINDOW_SOFT_INPUT_MODE));
169   }
170 
getBooleanAttr(String n, boolean defaultValue)171   private boolean getBooleanAttr(String n, boolean defaultValue) {
172     return (attrs.containsKey(n) ? Boolean.parseBoolean(attrs.get(n)) : defaultValue);
173   }
174 
withXMLNS(String attr)175   private String withXMLNS(String attr) {
176     return withXMLNS(xmlns, attr);
177   }
178 
179   /**
180    * Get the map for all attributes defined for the activity XML.
181    *
182    * @return map of attributes names to values from the manifest. Not null.
183    */
getAllAttributes()184   public Map<String, String> getAllAttributes() {
185     return attrs;
186   }
187 
188   /**
189    * Get the intent filters defined for activity.
190    *
191    * @return A list of intent filters. Not null.
192    */
getIntentFilters()193   public List<IntentFilterData> getIntentFilters() {
194     return intentFilters;
195   }
196 
getMetaData()197   public MetaData getMetaData() {
198     return metaData;
199   }
200 
getTargetActivity()201   public ActivityData getTargetActivity() {
202     return targetActivity;
203   }
204 
withXMLNS(String xmlns, String attr)205   private static String withXMLNS(String xmlns, String attr) {
206     return String.format("%s:%s", xmlns, attr);
207   }
208 
getNameAttr(String xmlns)209   public static String getNameAttr(String xmlns) {
210     return withXMLNS(xmlns, NAME);
211   }
212 
getTargetAttr(String xmlns)213   public static String getTargetAttr(String xmlns) {
214     return withXMLNS("android", TARGET_ACTIVITY);
215   }
216 }
217