1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/* 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2011 The Android Open Source Project 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License. 6282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * You may obtain a copy of the License at 7282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 10282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Unless required by applicable law or agreed to in writing, software 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License. 15282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 16282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 17282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipackage com.android.layoutlib.bridge.bars; 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 19282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.RenderResources; 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.ResourceValue; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.StyleResourceValue; 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.Bridge; 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.android.BridgeContext; 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.android.BridgeXmlBlockParser; 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.impl.ParserFactory; 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.impl.ResourceHelper; 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.resources.Density; 288930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Guptaimport com.android.resources.LayoutDirection; 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParser; 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParserException; 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.Context; 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.ColorStateList; 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.graphics.Bitmap; 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.graphics.Bitmap_Delegate; 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.graphics.drawable.BitmapDrawable; 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.graphics.drawable.Drawable; 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.util.TypedValue; 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.Gravity; 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.LayoutInflater; 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.View; 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.ImageView; 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.LinearLayout; 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.widget.TextView; 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.IOException; 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.InputStream; 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/** 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Base "bar" class for the window decor around the the edited layout. 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * This is basically an horizontal layout that loads a given layout on creation (it is read 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * through {@link Class#getResourceAsStream(String)}). 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * The given layout should be a merge layout so that all the children belong to this class directly. 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * It also provides a few utility methods to configure the content of the layout. 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiabstract class CustomBar extends LinearLayout { 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 611076be31f1c14f39295cc2ce7a747ee9ad96ee73Deepanshu Gupta 6242c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta private final int mSimulatedPlatformVersion; 6342c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski protected abstract TextView getStyleableTextView(); 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 6642c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta protected CustomBar(Context context, int orientation, String layoutPath, 6742c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta String name, int simulatedPlatformVersion) throws XmlPullParserException { 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski super(context); 6942c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta mSimulatedPlatformVersion = simulatedPlatformVersion; 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski setOrientation(orientation); 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (orientation == LinearLayout.HORIZONTAL) { 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski setGravity(Gravity.CENTER_VERTICAL); 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski setGravity(Gravity.CENTER_HORIZONTAL); 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski LayoutInflater inflater = (LayoutInflater) getContext().getSystemService( 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Context.LAYOUT_INFLATER_SERVICE); 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XmlPullParser parser = ParserFactory.create(getClass().getResourceAsStream(layoutPath), 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski name); 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeXmlBlockParser bridgeParser = new BridgeXmlBlockParser( 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski parser, (BridgeContext) context, false /*platformFile*/); 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski try { 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski inflater.inflate(bridgeParser, this, true); 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } finally { 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bridgeParser.ensurePopped(); 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski protected void loadIcon(int index, String iconName, Density density) { 948930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta loadIcon(index, iconName, density, false); 958930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta } 968930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta 978930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta protected void loadIcon(int index, String iconName, Density density, boolean isRtl) { 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski View child = getChildAt(index); 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (child instanceof ImageView) { 100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ImageView imageView = (ImageView) child; 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1021076be31f1c14f39295cc2ce7a747ee9ad96ee73Deepanshu Gupta LayoutDirection dir = isRtl ? LayoutDirection.RTL : null; 10384cc05cacd2786261b01d3be2364944c90765801Deepanshu Gupta IconLoader iconLoader = new IconLoader(iconName, density, mSimulatedPlatformVersion, 10484cc05cacd2786261b01d3be2364944c90765801Deepanshu Gupta dir); 10584cc05cacd2786261b01d3be2364944c90765801Deepanshu Gupta InputStream stream = iconLoader.getIcon(); 106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (stream != null) { 10884cc05cacd2786261b01d3be2364944c90765801Deepanshu Gupta density = iconLoader.getDensity(); 10984cc05cacd2786261b01d3be2364944c90765801Deepanshu Gupta String path = iconLoader.getPath(); 110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for a cached bitmap 1111076be31f1c14f39295cc2ce7a747ee9ad96ee73Deepanshu Gupta Bitmap bitmap = Bridge.getCachedBitmap(path, true /*isFramework*/); 112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (bitmap == null) { 113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski try { 114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bitmap = Bitmap_Delegate.createBitmap(stream, false /*isMutable*/, density); 1151076be31f1c14f39295cc2ce7a747ee9ad96ee73Deepanshu Gupta Bridge.setCachedBitmap(path, bitmap, true /*isFramework*/); 116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } catch (IOException e) { 117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (bitmap != null) { 122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BitmapDrawable drawable = new BitmapDrawable(getContext().getResources(), 123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bitmap); 124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski imageView.setImageDrawable(drawable); 125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 130553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta protected TextView setText(int index, String string, boolean reference) { 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski View child = getChildAt(index); 132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (child instanceof TextView) { 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TextView textView = (TextView) child; 134553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta setText(textView, string, reference); 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return textView; 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 141553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta private void setText(TextView textView, String string, boolean reference) { 142553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta if (reference) { 143553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta ResourceValue value = getResourceValue(string); 144553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta if (value != null) { 145553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta string = value.getValue(); 146553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta } 147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 148553a4e91385111f20ddf426f81b3193b9e951762Deepanshu Gupta textView.setText(string); 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski protected void setStyle(String themeEntryName) { 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeContext bridgeContext = (BridgeContext) mContext; 154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski RenderResources res = bridgeContext.getRenderResources(); 155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue value = res.findItemInTheme(themeEntryName, true /*isFrameworkAttr*/); 157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value = res.resolveResValue(value); 158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 15942c7ce02f4023c94b315253754a20c20800be731Deepanshu Gupta if (!(value instanceof StyleResourceValue)) { 160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return; 161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StyleResourceValue style = (StyleResourceValue) value; 164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // get the background 166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue backgroundValue = res.findItemInStyle(style, "background", 167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski true /*isFrameworkAttr*/); 168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski backgroundValue = res.resolveResValue(backgroundValue); 169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (backgroundValue != null) { 170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Drawable d = ResourceHelper.getDrawable(backgroundValue, bridgeContext); 171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (d != null) { 172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski setBackground(d); 173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TextView textView = getStyleableTextView(); 177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (textView != null) { 178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // get the text style 179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue textStyleValue = res.findItemInStyle(style, "titleTextStyle", 180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski true /*isFrameworkAttr*/); 181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski textStyleValue = res.resolveResValue(textStyleValue); 182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (textStyleValue instanceof StyleResourceValue) { 183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StyleResourceValue textStyle = (StyleResourceValue) textStyleValue; 184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue textSize = res.findItemInStyle(textStyle, "textSize", 186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski true /*isFrameworkAttr*/); 187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski textSize = res.resolveResValue(textSize); 188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (textSize != null) { 190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski TypedValue out = new TypedValue(); 191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ResourceHelper.parseFloatAttribute("textSize", textSize.getValue(), out, 192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski true /*requireUnit*/)) { 193d8df6b570f10cec486b2af708e9a393f3012317dDeepanshu Gupta textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski out.getDimension(bridgeContext.getResources().getDisplayMetrics())); 195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue textColor = res.findItemInStyle(textStyle, "textColor", 200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski true /*isFrameworkAttr*/); 201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski textColor = res.resolveResValue(textColor); 202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (textColor != null) { 203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ColorStateList stateList = ResourceHelper.getColorStateList( 204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski textColor, bridgeContext); 205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (stateList != null) { 206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski textView.setTextColor(stateList); 207282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 208282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 209282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private ResourceValue getResourceValue(String reference) { 214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeContext bridgeContext = (BridgeContext) mContext; 215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski RenderResources res = bridgeContext.getRenderResources(); 216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // find the resource 218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue value = res.findResValue(reference, false /*isFramework*/); 219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // resolve it if needed 221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return res.resolveResValue(value); 222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 224