ResourceExpr.java revision d0bb3f1e1a94747bb3dd8bd2fee315d8816f0f5d
120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Copyright (C) 2015 The Android Open Source Project 320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * you may not use this file except in compliance with the License. 620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * You may obtain a copy of the License at 720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Unless required by applicable law or agreed to in writing, software 1120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * See the License for the specific language governing permissions and 1420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * limitations under the License. 1520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpackage android.databinding.tool.expr; 1720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberimport android.databinding.tool.reflection.ModelAnalyzer; 1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberimport android.databinding.tool.reflection.ModelClass; 2020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberimport android.databinding.tool.writer.KCode; 21f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung 22f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hungimport java.util.HashMap; 2396e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jiaimport java.util.List; 2496e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jiaimport java.util.Map; 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic class ResourceExpr extends Expr { 27b65990f4a0cf01db0b9f21c68fcf8824ae03a178Marco Nelissen 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber private final static Map<String, String> RESOURCE_TYPE_TO_R_OBJECT; 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber static { 3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RESOURCE_TYPE_TO_R_OBJECT = new HashMap<>(); 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RESOURCE_TYPE_TO_R_OBJECT.put("colorStateList", "color "); 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RESOURCE_TYPE_TO_R_OBJECT.put("dimenOffset", "dimen "); 33f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber RESOURCE_TYPE_TO_R_OBJECT.put("dimenSize", "dimen "); 346a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis RESOURCE_TYPE_TO_R_OBJECT.put("intArray", "array "); 3520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RESOURCE_TYPE_TO_R_OBJECT.put("stateListAnimator", "animator "); 3620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RESOURCE_TYPE_TO_R_OBJECT.put("stringArray", "array "); 3720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber RESOURCE_TYPE_TO_R_OBJECT.put("typedArray", "array"); 3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 3920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // lazily initialized 4020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber private Map<String, ModelClass> mResourceToTypeMapping; 4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber protected final String mPackage; 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber protected final String mResourceType; 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber protected final String mResourceId; 4720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber public ResourceExpr(String packageName, String resourceType, String resourceName, 4920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber List<Expr> args) { 5020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber super(args); 5196e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jia if ("android".equals(packageName)) { 5220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mPackage = "android."; 53e9a5b96e7927fd4e38623e17ac73e8e4e25877eeWei Jia } else { 54e9a5b96e7927fd4e38623e17ac73e8e4e25877eeWei Jia mPackage = ""; 55e9a5b96e7927fd4e38623e17ac73e8e4e25877eeWei Jia } 5620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceType = resourceType; 5720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceId = resourceName; 5820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 5920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber private Map<String, ModelClass> getResourceToTypeMapping(ModelAnalyzer modelAnalyzer) { 616a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis if (mResourceToTypeMapping == null) { 626a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis final Map<String, String> imports = getModel().getImports(); 63f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber mResourceToTypeMapping = new HashMap<>(); 64f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber mResourceToTypeMapping.put("anim", modelAnalyzer.findClass("android.view.animation.Animation", 65f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung imports)); 66f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung mResourceToTypeMapping.put("animator", modelAnalyzer.findClass("android.animation.Animator", 67f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung imports)); 68f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung mResourceToTypeMapping.put("colorStateList", 69f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung modelAnalyzer.findClass("android.content.res.ColorStateList", 70f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung imports)); 719bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung mResourceToTypeMapping.put("drawable", modelAnalyzer.findClass("android.graphics.drawable.Drawable", 729bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung imports)); 739bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung mResourceToTypeMapping.put("stateListAnimator", 749bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung modelAnalyzer.findClass("android.animation.StateListAnimator", 759bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung imports)); 769bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung mResourceToTypeMapping.put("transition", modelAnalyzer.findClass("android.transition.Transition", 7796e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jia imports)); 7820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("typedArray", modelAnalyzer.findClass("android.content.res.TypedArray", 799bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung imports)); 809bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung mResourceToTypeMapping.put("interpolator", 8196e92b58b7e9647b4c7c2f54b62a1b357ab06b66Wei Jia modelAnalyzer.findClass("android.view.animation.Interpolator", imports)); 8220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("bool", modelAnalyzer.findClass(boolean.class)); 8320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("color", modelAnalyzer.findClass(int.class)); 8420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("dimenOffset", modelAnalyzer.findClass(int.class)); 8520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("dimenSize", modelAnalyzer.findClass(int.class)); 8620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("id", modelAnalyzer.findClass(int.class)); 8720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("integer", modelAnalyzer.findClass(int.class)); 8820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("layout", modelAnalyzer.findClass(int.class)); 8920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("dimen", modelAnalyzer.findClass(float.class)); 9020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("fraction", modelAnalyzer.findClass(float.class)); 916a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis mResourceToTypeMapping.put("intArray", modelAnalyzer.findClass(int[].class)); 926a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis mResourceToTypeMapping.put("string", modelAnalyzer.findClass(String.class)); 9320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceToTypeMapping.put("stringArray", modelAnalyzer.findClass(String[].class)); 9420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 9520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return mResourceToTypeMapping; 9620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 9720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber @Override 9920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber protected ModelClass resolveType(ModelAnalyzer modelAnalyzer) { 10020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber final Map<String, ModelClass> mapping = getResourceToTypeMapping( 10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber modelAnalyzer); 10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber final ModelClass modelClass = mapping.get(mResourceType); 10320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (modelClass != null) { 10420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return modelClass; 1059bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } 1069bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung if ("plurals".equals(mResourceType)) { 1079bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung if (getChildren().isEmpty()) { 1089bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung return modelAnalyzer.findClass(int.class); 1099bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } else { 1109bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung return modelAnalyzer.findClass(String.class); 1119bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } 1129bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } 1139bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung return modelAnalyzer.findClass(mResourceType, getModel().getImports()); 1149bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } 1159bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung 1169bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung @Override 1179bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung protected List<Dependency> constructDependencies() { 1189bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung return constructDynamicChildrenDependencies(); 1199bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } 1209bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung 1219bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung @Override 1229bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung protected String computeUniqueKey() { 1239bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung String base; 1249bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung if (mPackage == null) { 1259bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung base = "@" + mResourceType + "/" + mResourceId; 1269bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } else { 127693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber base = "@" + "android:" + mResourceType + "/" + mResourceId; 128f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 129f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung return join(base, computeChildrenKey()); 130f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 131f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung 132f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung @Override 133f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung protected KCode generateCode() { 134f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung return new KCode(toJava()); 135f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 136f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung 137cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung public String getResourceId() { 138cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung return mPackage + "R." + getResourceObject() + "." + mResourceId; 139cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung } 140cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung 141cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung public String toJava() { 142cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung final String context = "getRoot().getContext()"; 143cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung final String resources = "getRoot().getResources()"; 144cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung final String resourceName = mPackage + "R." + getResourceObject() + "." + mResourceId; 14520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("anim".equals(mResourceType)) return "android.view.animation.AnimationUtils.loadAnimation(" + context + ", " + resourceName + ")"; 146f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if ("animator".equals(mResourceType)) return "android.animation.AnimatorInflater.loadAnimator(" + context + ", " + resourceName + ")"; 147f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if ("bool".equals(mResourceType)) return resources + ".getBoolean(" + resourceName + ")"; 148f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if ("color".equals(mResourceType)) return resources + ".getColor(" + resourceName + ")"; 149f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if ("colorStateList".equals(mResourceType)) return "getColorStateListFromResource(" + resourceName + ")"; 150f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if ("dimen".equals(mResourceType)) return resources + ".getDimension(" + resourceName + ")"; 15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("dimenOffset".equals(mResourceType)) return resources + ".getDimensionPixelOffset(" + resourceName + ")"; 15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("dimenSize".equals(mResourceType)) return resources + ".getDimensionPixelSize(" + resourceName + ")"; 153f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if ("drawable".equals(mResourceType)) return "getDrawableFromResource(" + resourceName + ")"; 154f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if ("fraction".equals(mResourceType)) { 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber String base = getChildCode(0, "1"); 15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber String pbase = getChildCode(1, "1"); 15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return resources + ".getFraction(" + resourceName + ", " + base + ", " + pbase + 158b65990f4a0cf01db0b9f21c68fcf8824ae03a178Marco Nelissen ")"; 159b65990f4a0cf01db0b9f21c68fcf8824ae03a178Marco Nelissen } 16020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("id".equals(mResourceType)) return resourceName; 16120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("intArray".equals(mResourceType)) return resources + ".getIntArray(" + resourceName + ")"; 16220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("integer".equals(mResourceType)) return resources + ".getInteger(" + resourceName + ")"; 16320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("interpolator".equals(mResourceType)) return "android.view.animation.AnimationUtils.loadInterpolator(" + context + ", " + resourceName + ")"; 16420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("layout".equals(mResourceType)) return resourceName; 16520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("plurals".equals(mResourceType)) { 16620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (getChildren().isEmpty()) { 16720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return resourceName; 16820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } else { 16920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return makeParameterCall(resourceName, "getQuantityString"); 1706a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis } 171f89d780df70b7fbb8465bce4913c46cca019721fAndreas Huber } 17220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("stateListAnimator".equals(mResourceType)) return "android.animation.AnimatorInflater.loadStateListAnimator(" + context + ", " + resourceName + ")"; 17320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("string".equals(mResourceType)) return makeParameterCall(resourceName, "getString"); 17420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("stringArray".equals(mResourceType)) return resources + ".getStringArray(" + resourceName + ")"; 17520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("transition".equals(mResourceType)) return "android.transition.TransitionInflater.from(" + context + ").inflateTransition(" + resourceName + ")"; 17620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if ("typedArray".equals(mResourceType)) return resources + ".obtainTypedArray(" + resourceName + ")"; 17720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber final String property = Character.toUpperCase(mResourceType.charAt(0)) + 17820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mResourceType.substring(1); 179cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung return resources + ".get" + property + "(" + resourceName + ")"; 180cfa86b5efa029391df04182dedfabd72b49a32f5Andy Hung 18120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 18220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 183f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung private String getChildCode(int childIndex, String defaultValue) { 184f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if (getChildren().size() <= childIndex) { 185f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung return defaultValue; 186f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } else { 187f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung return getChildren().get(childIndex).toCode().generate(); 188f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 189f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 190f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung 1919bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung private String makeParameterCall(String resourceName, String methodCall) { 192f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung StringBuilder sb = new StringBuilder("getRoot().getResources()."); 1939bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung sb.append(methodCall).append("(").append(resourceName); 194f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung for (Expr expr : getChildren()) { 195f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung sb.append(", ").append(expr.toCode().generate()); 1969bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung } 1979bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung sb.append(")"); 198f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung return sb.toString(); 199f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 2009bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung 201f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung private String getResourceObject() { 2029bd3c9b0e894c9f6c48a2cfa7c5f21d384b1c596Andy Hung String rFileObject = RESOURCE_TYPE_TO_R_OBJECT.get(mResourceType); 203f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung if (rFileObject == null) { 204f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung rFileObject = mResourceType; 205f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 206f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung return rFileObject; 207f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung } 208f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung} 209f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hung