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