1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/* 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2008 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.android; 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 19ff17024e583b170312d82089fd358d278ce16c9aDianne Hackbornimport android.os.IBinder; 20bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Guptaimport com.android.annotations.Nullable; 21282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.ILayoutPullParser; 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.IProjectCallback; 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.LayoutLog; 24282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.RenderResources; 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.ResourceReference; 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.ResourceValue; 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.ide.common.rendering.api.StyleResourceValue; 28282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.Bridge; 29282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.BridgeConstants; 30282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.android.view.WindowManagerImpl; 31282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.impl.ParserFactory; 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.layoutlib.bridge.impl.Stack; 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.resources.ResourceType; 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport com.android.util.Pair; 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParser; 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport org.xmlpull.v1.XmlPullParserException; 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.BroadcastReceiver; 40282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.ComponentName; 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.ContentResolver; 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.Context; 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.Intent; 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.IntentFilter; 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.IntentSender; 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.ServiceConnection; 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.SharedPreferences; 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.pm.ApplicationInfo; 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.pm.PackageManager; 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.AssetManager; 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.BridgeResources; 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.BridgeTypedArray; 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.Configuration; 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.Resources; 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.content.res.Resources.Theme; 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.database.DatabaseErrorHandler; 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.database.sqlite.SQLiteDatabase; 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.database.sqlite.SQLiteDatabase.CursorFactory; 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.graphics.Bitmap; 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.graphics.drawable.Drawable; 61664d6f1fe4d6dfa742b3e98051f924dbc190f8caDeepanshu Guptaimport android.hardware.display.DisplayManager; 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.net.Uri; 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.os.Bundle; 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.os.Handler; 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.os.Looper; 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.os.PowerManager; 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.os.UserHandle; 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.util.AttributeSet; 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.util.DisplayMetrics; 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.util.TypedValue; 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.BridgeInflater; 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.Display; 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.DisplayAdjustments; 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.View; 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.ViewGroup; 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.WindowManager; 77e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Guptaimport android.view.accessibility.AccessibilityManager; 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport android.view.textservice.TextServicesManager; 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.File; 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.FileInputStream; 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.FileNotFoundException; 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.FileOutputStream; 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.IOException; 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.io.InputStream; 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.util.ArrayList; 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.util.HashMap; 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.util.IdentityHashMap; 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.util.List; 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiimport java.util.Map; 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/** 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Custom implementation of Context/Activity to handle non compiled resources. 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskipublic final class BridgeContext extends Context { 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 970ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta /** The map adds cookies to each view so that IDE can link xml tags to views. */ 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final HashMap<View, Object> mViewKeyMap = new HashMap<View, Object>(); 990ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta /** 1000ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta * In some cases, when inflating an xml, some objects are created. Then later, the objects are 1010ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta * converted to views. This map stores the mapping from objects to cookies which can then be 1020ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta * used to populate the mViewKeyMap. 1030ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta */ 1040ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta private final HashMap<Object, Object> mViewKeyHelpMap = new HashMap<Object, Object>(); 1050ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta private Resources mSystemResources; 106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final Object mProjectKey; 107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final DisplayMetrics mMetrics; 108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final RenderResources mRenderResources; 109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final Configuration mConfig; 110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final ApplicationInfo mApplicationInfo; 111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final IProjectCallback mProjectCallback; 112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final WindowManager mWindowManager; 113664d6f1fe4d6dfa742b3e98051f924dbc190f8caDeepanshu Gupta private final DisplayManager mDisplayManager; 114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private Resources.Theme mTheme; 116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final Map<Object, Map<String, String>> mDefaultPropMaps = 118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski new IdentityHashMap<Object, Map<String,String>>(); 119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // maps for dynamically generated id representing style objects (StyleResourceValue) 121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private Map<Integer, StyleResourceValue> mDynamicIdToStyleMap; 122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private Map<StyleResourceValue, Integer> mStyleToDynamicIdMap; 123bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta private int mDynamicIdGenerator = 0x02030000; // Base id for R.style in custom namespace 124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // cache for TypedArray generated from IStyleResourceValue object 1264a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta private Map<int[], Map<Integer, BridgeTypedArray>> mTypedArrayCache; 127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private BridgeInflater mBridgeInflater; 128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private BridgeContentResolver mContentResolver; 130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private final Stack<BridgeXmlBlockParser> mParserStack = new Stack<BridgeXmlBlockParser>(); 132dfeffd4c0ae165a3f225b818ef8d6f5d1cb89a2cDeepanshu Gupta private SharedPreferences mSharedPreferences; 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 134dfeffd4c0ae165a3f225b818ef8d6f5d1cb89a2cDeepanshu Gupta /** 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param projectKey An Object identifying the project. This is used for the cache mechanism. 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param metrics the {@link DisplayMetrics}. 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param renderResources the configured resources (both framework and projects) for this 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * render. 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param config the Configuration object for this render. 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param targetSdkVersion the targetSdkVersion of the application. 141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public BridgeContext(Object projectKey, DisplayMetrics metrics, 143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski RenderResources renderResources, 144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski IProjectCallback projectCallback, 145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Configuration config, 1468930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta int targetSdkVersion, 1478930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta boolean hasRtlSupport) { 148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mProjectKey = projectKey; 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mMetrics = metrics; 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mProjectCallback = projectCallback; 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mRenderResources = renderResources; 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mConfig = config; 154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mApplicationInfo = new ApplicationInfo(); 156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mApplicationInfo.targetSdkVersion = targetSdkVersion; 1578930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta if (hasRtlSupport) { 1588930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta mApplicationInfo.flags = mApplicationInfo.flags | ApplicationInfo.FLAG_SUPPORTS_RTL; 1598930cb4f37ff0fbde65f7afd4bbe06ab77677f78Deepanshu Gupta } 160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mWindowManager = new WindowManagerImpl(mMetrics); 162664d6f1fe4d6dfa742b3e98051f924dbc190f8caDeepanshu Gupta mDisplayManager = new DisplayManager(this); 163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Initializes the {@link Resources} singleton to be linked to this {@link Context}, its 167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * {@link DisplayMetrics}, {@link Configuration}, and {@link IProjectCallback}. 168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @see #disposeResources() 170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void initResources() { 172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski AssetManager assetManager = AssetManager.getSystem(); 173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mSystemResources = BridgeResources.initSystem( 175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski this, 176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski assetManager, 177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mMetrics, 178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mConfig, 179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mProjectCallback); 180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mTheme = mSystemResources.newTheme(); 181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 183282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 184282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Disposes the {@link Resources} singleton. 185282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 186282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void disposeResources() { 187282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeResources.disposeSystem(); 188282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setBridgeInflater(BridgeInflater inflater) { 191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mBridgeInflater = inflater; 192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void addViewKey(View view, Object viewKey) { 195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mViewKeyMap.put(view, viewKey); 196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Object getViewKey(View view) { 199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mViewKeyMap.get(view); 200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 2020ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta public void addCookie(Object o, Object cookie) { 2030ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta mViewKeyHelpMap.put(o, cookie); 2040ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta } 2050ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta 2060ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta public Object getCookie(Object o) { 2070ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta return mViewKeyHelpMap.get(o); 2080ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta } 2090ff4568ca07c16f2ad4c61872995200115292ecfDeepanshu Gupta 210282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Object getProjectKey() { 211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mProjectKey; 212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public DisplayMetrics getMetrics() { 215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mMetrics; 216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public IProjectCallback getProjectCallback() { 219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mProjectCallback; 220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public RenderResources getRenderResources() { 223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mRenderResources; 224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Map<String, String> getDefaultPropMap(Object key) { 227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mDefaultPropMaps.get(key); 228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Configuration getConfiguration() { 231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mConfig; 232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Adds a parser to the stack. 236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param parser the parser to add. 237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void pushParser(BridgeXmlBlockParser parser) { 239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ParserFactory.LOG_PARSER) { 240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski System.out.println("PUSH " + parser.getParser().toString()); 241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mParserStack.push(parser); 243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Removes the parser at the top of the stack 247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void popParser() { 249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeXmlBlockParser parser = mParserStack.pop(); 250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ParserFactory.LOG_PARSER) { 251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski System.out.println("POPD " + parser.getParser().toString()); 252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Returns the current parser at the top the of the stack. 257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @return a parser or null. 258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public BridgeXmlBlockParser getCurrentParser() { 260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParserStack.peek(); 261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Returns the previous parser. 265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @return a parser or null if there isn't any previous parser 266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public BridgeXmlBlockParser getPreviousParser() { 268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mParserStack.size() < 2) { 269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mParserStack.get(mParserStack.size() - 2); 272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean resolveThemeAttribute(int resid, TypedValue outValue, boolean resolveRefs) { 275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Pair<ResourceType, String> resourceInfo = Bridge.resolveResourceId(resid); 276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski boolean isFrameworkRes = true; 277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resourceInfo == null) { 278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resourceInfo = mProjectCallback.resolveResourceId(resid); 279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isFrameworkRes = false; 280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resourceInfo == null) { 283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue value = mRenderResources.findItemInTheme(resourceInfo.getSecond(), 287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isFrameworkRes); 288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resolveRefs) { 289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value = mRenderResources.resolveResValue(value); 290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 292b6864ac6cde109be320e18188209eb8420c585f1Deepanshu Gupta if (value == null) { 293b6864ac6cde109be320e18188209eb8420c585f1Deepanshu Gupta // unable to find the attribute. 294b6864ac6cde109be320e18188209eb8420c585f1Deepanshu Gupta return false; 295b6864ac6cde109be320e18188209eb8420c585f1Deepanshu Gupta } 296b6864ac6cde109be320e18188209eb8420c585f1Deepanshu Gupta 297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // check if this is a style resource 298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (value instanceof StyleResourceValue) { 299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // get the id that will represent this style. 300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski outValue.resourceId = getDynamicIdByStyle((StyleResourceValue)value); 301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int a; 305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if this is a framework value. 306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (value.isFramework()) { 307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for idName in the android R classes. 308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // use 0 a default res value as it's not a valid id value. 309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski a = getFrameworkResourceValue(value.getResourceType(), value.getName(), 0 /*defValue*/); 310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for idName in the project R class. 312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // use 0 a default res value as it's not a valid id value. 313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski a = getProjectResourceValue(value.getResourceType(), value.getName(), 0 /*defValue*/); 314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (a != 0) { 317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski outValue.resourceId = a; 318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 319282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 320282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 321282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 324282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public ResourceReference resolveId(int id) { 326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // first get the String related to this id in the framework 327282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Pair<ResourceType, String> resourceInfo = Bridge.resolveResourceId(id); 328282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 329282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resourceInfo != null) { 330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new ResourceReference(resourceInfo.getSecond(), true); 331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // didn't find a match in the framework? look in the project. 334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mProjectCallback != null) { 335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resourceInfo = mProjectCallback.resolveResourceId(id); 336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resourceInfo != null) { 338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new ResourceReference(resourceInfo.getSecond(), false); 339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 342bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta // The base value for R.style is 0x01030000 and the custom style is 0x02030000. 343bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta // So, if the second byte is 03, it's probably a style. 344bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta if ((id >> 16 & 0xFF) == 0x03) { 345bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta return getStyleByDynamicId(id); 346bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta } 347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 349282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Pair<View, Boolean> inflateView(ResourceReference resource, ViewGroup parent, 351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski boolean attachToRoot, boolean skipCallbackParser) { 352282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski boolean isPlatformLayout = resource.isFramework(); 353282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 3549fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta if (!isPlatformLayout && !skipCallbackParser) { 355282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // check if the project callback can provide us with a custom parser. 356282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ILayoutPullParser parser = getParser(resource); 357282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 358282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (parser != null) { 359282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(parser, 360282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski this, resource.isFramework()); 361282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski try { 362282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski pushParser(blockParser); 363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return Pair.of( 364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mBridgeInflater.inflate(blockParser, parent, attachToRoot), 365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski true); 366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } finally { 367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski popParser(); 368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 370282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 371282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 372282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue resValue; 373282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resource instanceof ResourceValue) { 374282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resValue = (ResourceValue) resource; 375282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 376282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (isPlatformLayout) { 377282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resValue = mRenderResources.getFrameworkResource(ResourceType.LAYOUT, 378282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resource.getName()); 379282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 380282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resValue = mRenderResources.getProjectResource(ResourceType.LAYOUT, 381282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resource.getName()); 382282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 383282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 384282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 385282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resValue != null) { 386282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 387282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski File xml = new File(resValue.getValue()); 388282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (xml.isFile()) { 389282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // we need to create a pull parser around the layout XML file, and then 390282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // give that to our XmlBlockParser 391282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski try { 392282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski XmlPullParser parser = ParserFactory.create(xml); 393282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 394282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // set the resource ref to have correct view cookies 395282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mBridgeInflater.setResourceReference(resource); 396282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 397282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(parser, 398282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski this, resource.isFramework()); 399282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski try { 400282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski pushParser(blockParser); 401282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return Pair.of( 402282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mBridgeInflater.inflate(blockParser, parent, attachToRoot), 403282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski false); 404282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } finally { 405282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski popParser(); 406282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 407282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } catch (XmlPullParserException e) { 408282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_BROKEN, 409282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "Failed to configure parser for " + xml, e, null /*data*/); 410282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // we'll return null below. 411282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } catch (FileNotFoundException e) { 412282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // this shouldn't happen since we check above. 413282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } finally { 414282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mBridgeInflater.setResourceReference(null); 415282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 416282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 417282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_BROKEN, 418282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String.format("File %s is missing!", xml), null); 419282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 420282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 421282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_BROKEN, 422282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String.format("Layout %s%s does not exist.", isPlatformLayout ? "android:" : "", 423282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resource.getName()), null); 424282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 425282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 426282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return Pair.of(null, false); 427282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 428282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 429282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @SuppressWarnings("deprecation") 430282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private ILayoutPullParser getParser(ResourceReference resource) { 431282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ILayoutPullParser parser; 432282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resource instanceof ResourceValue) { 433282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski parser = mProjectCallback.getParser((ResourceValue) resource); 434282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 435282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski parser = mProjectCallback.getParser(resource.getName()); 436282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 437282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return parser; 438282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 439282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 440282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ------------ Context methods 441282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 442282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 443282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Resources getResources() { 444282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mSystemResources; 445282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 446282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 447282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 448282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Theme getTheme() { 449282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mTheme; 450282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 451282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 452282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 453282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public ClassLoader getClassLoader() { 454282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return this.getClass().getClassLoader(); 455282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 456282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 457282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 458282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Object getSystemService(String service) { 459282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (LAYOUT_INFLATER_SERVICE.equals(service)) { 460282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mBridgeInflater; 461282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 462282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 463282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (TEXT_SERVICES_MANAGER_SERVICE.equals(service)) { 464282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // we need to return a valid service to avoid NPE 465282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return TextServicesManager.getInstance(); 466282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 467282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 468282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (WINDOW_SERVICE.equals(service)) { 469282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mWindowManager; 470282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 471282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 472282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // needed by SearchView 473282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (INPUT_METHOD_SERVICE.equals(service)) { 474282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 475282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 476282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 477282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (POWER_SERVICE.equals(service)) { 478282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new PowerManager(this, new BridgePowerManager(), new Handler()); 479282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 480282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 481664d6f1fe4d6dfa742b3e98051f924dbc190f8caDeepanshu Gupta if (DISPLAY_SERVICE.equals(service)) { 482664d6f1fe4d6dfa742b3e98051f924dbc190f8caDeepanshu Gupta return mDisplayManager; 483664d6f1fe4d6dfa742b3e98051f924dbc190f8caDeepanshu Gupta } 484664d6f1fe4d6dfa742b3e98051f924dbc190f8caDeepanshu Gupta 485e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta if (ACCESSIBILITY_SERVICE.equals(service)) { 486e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta return AccessibilityManager.getInstance(this); 487e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta } 488e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta 489282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throw new UnsupportedOperationException("Unsupported Service: " + service); 490282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 491282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 492282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 493282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 4944a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta public final BridgeTypedArray obtainStyledAttributes(int[] attrs) { 495bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta // No style is specified here, so create the typed array based on the default theme 496bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta // and the styles already applied to it. A null value of style indicates that the default 497bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta // theme should be used. 498bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta return createStyleBasedTypedArray(null, attrs); 499282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 500282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 501282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 5024a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta public final BridgeTypedArray obtainStyledAttributes(int resid, int[] attrs) 503282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throws Resources.NotFoundException { 504e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta StyleResourceValue style = null; 505282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // get the StyleResourceValue based on the resId; 506e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta if (resid != 0) { 507e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta style = getStyleByDynamicId(resid); 508e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta 509e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta if (style == null) { 510e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta // In some cases, style may not be a dynamic id, so we do a full search. 511e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta ResourceReference ref = resolveId(resid); 512e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta if (ref != null) { 513e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta style = mRenderResources.getStyle(ref.getName(), ref.isFramework()); 514e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta } 5158657baa06d2efe845cafef571bd9dce627cf5045Deepanshu Gupta } 5168657baa06d2efe845cafef571bd9dce627cf5045Deepanshu Gupta 517e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta if (style == null) { 518e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta throw new Resources.NotFoundException(); 519e64a5bd2fb54d84d6fd2119ef831df1eba4185ffDeepanshu Gupta } 520282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 521282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 522282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mTypedArrayCache == null) { 5234a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta mTypedArrayCache = new HashMap<int[], Map<Integer,BridgeTypedArray>>(); 524282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 5254a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta Map<Integer, BridgeTypedArray> map = new HashMap<Integer, BridgeTypedArray>(); 526282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mTypedArrayCache.put(attrs, map); 527282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 528282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeTypedArray ta = createStyleBasedTypedArray(style, attrs); 529282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski map.put(resid, ta); 530282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 531282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return ta; 532282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 533282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 534282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // get the 2nd map 5354a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta Map<Integer, BridgeTypedArray> map = mTypedArrayCache.get(attrs); 536282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (map == null) { 5374a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta map = new HashMap<Integer, BridgeTypedArray>(); 538282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mTypedArrayCache.put(attrs, map); 539282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 540282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 541282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // get the array from the 2nd map 5424a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta BridgeTypedArray ta = map.get(resid); 543282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 544282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (ta == null) { 545282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ta = createStyleBasedTypedArray(style, attrs); 546282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski map.put(resid, ta); 547282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 548282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 549282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return ta; 550282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 551282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 552282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 5534a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta public final BridgeTypedArray obtainStyledAttributes(AttributeSet set, int[] attrs) { 554282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return obtainStyledAttributes(set, attrs, 0, 0); 555282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 556282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 557282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 5584a605c6fa0027ee116beb29fbc9625721f0441f0Deepanshu Gupta public BridgeTypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, 559282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int defStyleAttr, int defStyleRes) { 560282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 561282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Map<String, String> defaultPropMap = null; 562282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski boolean isPlatformFile = true; 563282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 564282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Hint: for XmlPullParser, attach source //DEVICE_SRC/dalvik/libcore/xml/src/java 565282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (set instanceof BridgeXmlBlockParser) { 566282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeXmlBlockParser parser = null; 567282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski parser = (BridgeXmlBlockParser)set; 568282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 569282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isPlatformFile = parser.isPlatformFile(); 570282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 571282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Object key = parser.getViewCookie(); 572282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (key != null) { 573282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defaultPropMap = mDefaultPropMaps.get(key); 574282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (defaultPropMap == null) { 575282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defaultPropMap = new HashMap<String, String>(); 576282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mDefaultPropMaps.put(key, defaultPropMap); 577282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 578282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 579282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 580282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (set instanceof BridgeLayoutParamsMapAttributes) { 581282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // this is only for temp layout params generated dynamically, so this is never 582282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // platform content. 583282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isPlatformFile = false; 584282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (set != null) { // null parser is ok 585282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // really this should not be happening since its instantiated in Bridge 586282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_BROKEN, 587282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "Parser is not a BridgeXmlBlockParser!", null /*data*/); 588282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 589282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 590282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 591282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski List<Pair<String, Boolean>> attributeList = searchAttrs(attrs); 592282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 593282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeTypedArray ta = ((BridgeResources) mSystemResources).newTypeArray(attrs.length, 594282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isPlatformFile); 595282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 596282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for a custom style. 597282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String customStyle = null; 598282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (set != null) { 599282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski customStyle = set.getAttributeValue(null /* namespace*/, "style"); 600282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 601282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 602282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StyleResourceValue customStyleValues = null; 603282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (customStyle != null) { 604282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue item = mRenderResources.findResValue(customStyle, 605fba1dd24bf7b56071490ac62428f96d14f682244Deepanshu Gupta isPlatformFile /*forceFrameworkOnly*/); 606282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 607282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // resolve it in case it links to something else 608282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski item = mRenderResources.resolveResValue(item); 609282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 610282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (item instanceof StyleResourceValue) { 611282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski customStyleValues = (StyleResourceValue)item; 612282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 613282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 614282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 615282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // resolve the defStyleAttr value into a IStyleResourceValue 616282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski StyleResourceValue defStyleValues = null; 617282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 618282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (defStyleAttr != 0) { 619282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // get the name from the int. 620282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Pair<String, Boolean> defStyleAttribute = searchAttr(defStyleAttr); 621282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 622282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (defaultPropMap != null) { 623282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String defStyleName = defStyleAttribute.getFirst(); 624282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (defStyleAttribute.getSecond()) { 625282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defStyleName = "android:" + defStyleName; 626282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 627282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defaultPropMap.put("style", defStyleName); 628282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 629282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 630282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for the style in the current theme, and its parent: 631282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue item = mRenderResources.findItemInTheme(defStyleAttribute.getFirst(), 632282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defStyleAttribute.getSecond()); 633282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 634282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (item != null) { 635282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // item is a reference to a style entry. Search for it. 6368dcfd4abe898bb2cd7a13edf77d41e4063180652Deepanshu Gupta item = mRenderResources.findResValue(item.getValue(), item.isFramework()); 637282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 638282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (item instanceof StyleResourceValue) { 639282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defStyleValues = (StyleResourceValue)item; 640282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 641282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 642282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_RESOURCES_RESOLVE_THEME_ATTR, 643282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String.format( 644282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "Failed to find style '%s' in current theme", 645282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defStyleAttribute.getFirst()), 646282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski null /*data*/); 647282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 648282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else if (defStyleRes != 0) { 649282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski boolean isFrameworkRes = true; 650282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Pair<ResourceType, String> value = Bridge.resolveResourceId(defStyleRes); 651282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (value == null) { 652282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value = mProjectCallback.resolveResourceId(defStyleRes); 653282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isFrameworkRes = false; 654282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 655282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 656282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (value != null) { 6574f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta if ((value.getFirst() == ResourceType.STYLE)) { 6584f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta // look for the style in all resources: 6594f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta StyleResourceValue item = mRenderResources.getStyle(value.getSecond(), 660282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isFrameworkRes); 661282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (item != null) { 6624f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta if (defaultPropMap != null) { 6634f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta defaultPropMap.put("style", item.getName()); 664282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 6654f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta 6664f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta defStyleValues = item; 667282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 668282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(null, 669282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String.format( 670282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "Style with id 0x%x (resolved to '%s') does not exist.", 671282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defStyleRes, value.getSecond()), 6724f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta null); 673282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 674282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 675282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(null, 676282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String.format( 6774f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta "Resource id 0x%x is not of type STYLE (instead %s)", 678282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defStyleRes, value.getFirst().toString()), 6794f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta null); 680282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 681282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 682282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(null, 683282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String.format( 684282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski "Failed to find style with id 0x%x in current theme", 685282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defStyleRes), 6864f8ce228195be123eeb9b5f066a6abc92b8d923aDeepanshu Gupta null); 687282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 688282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 689282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 690282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String appNamespace = mProjectCallback.getNamespace(); 691282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 692282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (attributeList != null) { 693282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski for (int index = 0 ; index < attributeList.size() ; index++) { 694282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Pair<String, Boolean> attribute = attributeList.get(index); 695282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 696282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (attribute == null) { 697282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski continue; 698282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 699282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 700282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String attrName = attribute.getFirst(); 7019fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta boolean frameworkAttr = attribute.getSecond(); 702282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String value = null; 703282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (set != null) { 704282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value = set.getAttributeValue( 705282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski frameworkAttr ? BridgeConstants.NS_RESOURCES : appNamespace, 706282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski attrName); 707282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 708282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if this is an app attribute, and the first get fails, try with the 709282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // new res-auto namespace as well 7109fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta if (!frameworkAttr && value == null) { 711282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski value = set.getAttributeValue(BridgeConstants.NS_APP_RES_AUTO, attrName); 712282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 713282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 714282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 715282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if there's no direct value for this attribute in the XML, we look for default 716282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // values in the widget defStyle, and then in the theme. 717282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (value == null) { 718282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ResourceValue resValue = null; 719282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 720282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for the value in the custom style first (and its parent if needed) 721282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (customStyleValues != null) { 722282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resValue = mRenderResources.findItemInStyle(customStyleValues, 723282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski attrName, frameworkAttr); 724282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 725282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 726282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // then look for the value in the default Style (and its parent if needed) 727282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resValue == null && defStyleValues != null) { 728282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resValue = mRenderResources.findItemInStyle(defStyleValues, 729282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski attrName, frameworkAttr); 730282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 731282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 732282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if the item is not present in the defStyle, we look in the main theme (and 733282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // its parent themes) 734282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resValue == null) { 735282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resValue = mRenderResources.findItemInTheme(attrName, frameworkAttr); 736282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 737282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 738282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // if we found a value, we make sure this doesn't reference another value. 739282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // So we resolve it. 740282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resValue != null) { 741282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // put the first default value, before the resolution. 742282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (defaultPropMap != null) { 743282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski defaultPropMap.put(attrName, resValue.getValue()); 744282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 745282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 746282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski resValue = mRenderResources.resolveResValue(resValue); 747282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 748282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 749282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ta.bridgeSetValue(index, attrName, frameworkAttr, resValue); 750282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 751282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // there is a value in the XML, but we need to resolve it in case it's 752282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // referencing another resource or a theme value. 753282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ta.bridgeSetValue(index, attrName, frameworkAttr, 754282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mRenderResources.resolveValue(null, attrName, value, isPlatformFile)); 755282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 756282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 757282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 758282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 759282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ta.sealArray(); 760282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 761282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return ta; 762282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 763282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 764282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 765282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Looper getMainLooper() { 766282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return Looper.myLooper(); 767282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 768282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 769282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 770282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // ------------- private new methods 771282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 772282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 773282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Creates a {@link BridgeTypedArray} by filling the values defined by the int[] with the 774bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta * values found in the given style. If no style is specified, the default theme, along with the 775bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta * styles applied to it are used. 776bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta * 777282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @see #obtainStyledAttributes(int, int[]) 778282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 779bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta private BridgeTypedArray createStyleBasedTypedArray(@Nullable StyleResourceValue style, 780bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta int[] attrs) throws Resources.NotFoundException { 781282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 782282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski List<Pair<String, Boolean>> attributes = searchAttrs(attrs); 783282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 784282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BridgeTypedArray ta = ((BridgeResources) mSystemResources).newTypeArray(attrs.length, 785282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski false); 786282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 787282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // for each attribute, get its name so that we can search it in the style 788282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski for (int i = 0 ; i < attrs.length ; i++) { 789282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Pair<String, Boolean> attribute = attributes.get(i); 790282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 791282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (attribute != null) { 792282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for the value in the given style 793bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta ResourceValue resValue; 794bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta if (style != null) { 795bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta resValue = mRenderResources.findItemInStyle(style, attribute.getFirst(), 796bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta attribute.getSecond()); 797bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta } else { 798bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta resValue = mRenderResources.findItemInTheme(attribute.getFirst(), 799bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta attribute.getSecond()); 800bfec73c2db5a34ced248213edf5519c80727a65fDeepanshu Gupta } 801282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 802282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resValue != null) { 803282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // resolve it to make sure there are no references left. 804282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ta.bridgeSetValue(i, attribute.getFirst(), attribute.getSecond(), 805282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mRenderResources.resolveResValue(resValue)); 806282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 807282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 808282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 809282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 810282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski ta.sealArray(); 811282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 812282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return ta; 813282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 814282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 815282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 816282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * The input int[] attrs is a list of attributes. The returns a list of information about 817282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * each attributes. The information is (name, isFramework) 818282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * <p/> 819282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 820282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param attrs An attribute array reference given to obtainStyledAttributes. 821282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @return List of attribute information. 822282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 823282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private List<Pair<String, Boolean>> searchAttrs(int[] attrs) { 824282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski List<Pair<String, Boolean>> results = new ArrayList<Pair<String, Boolean>>(attrs.length); 825282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 826282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // for each attribute, get its name so that we can search it in the style 8279fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta for (int attr : attrs) { 8289fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta Pair<ResourceType, String> resolvedResource = Bridge.resolveResourceId(attr); 829282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski boolean isFramework = false; 830282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resolvedResource != null) { 831282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski isFramework = true; 832282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 8339fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta resolvedResource = mProjectCallback.resolveResourceId(attr); 834282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 835282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 836282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (resolvedResource != null) { 837282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski results.add(Pair.of(resolvedResource.getSecond(), isFramework)); 838282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } else { 839282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski results.add(null); 840282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 841282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 842282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 843282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return results; 844282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 845282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 846282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski /** 847282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Searches for the attribute referenced by its internal id. 848282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 849282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @param attr An attribute reference given to obtainStyledAttributes such as defStyle. 850282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * @return A (name, isFramework) pair describing the attribute if found. Returns null 851282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * if nothing is found. 852282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski */ 853282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Pair<String, Boolean> searchAttr(int attr) { 854282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Pair<ResourceType, String> info = Bridge.resolveResourceId(attr); 855282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (info != null) { 856282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return Pair.of(info.getSecond(), Boolean.TRUE); 857282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 858282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 859282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski info = mProjectCallback.resolveResourceId(attr); 860282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (info != null) { 861282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return Pair.of(info.getSecond(), Boolean.FALSE); 862282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 863282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 864282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 865282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 866282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 867282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getDynamicIdByStyle(StyleResourceValue resValue) { 868282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mDynamicIdToStyleMap == null) { 869282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // create the maps. 870282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mDynamicIdToStyleMap = new HashMap<Integer, StyleResourceValue>(); 871282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mStyleToDynamicIdMap = new HashMap<StyleResourceValue, Integer>(); 872282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 873282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 874282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // look for an existing id 875282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Integer id = mStyleToDynamicIdMap.get(resValue); 876282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 877282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (id == null) { 878282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // generate a new id 8799fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta id = ++mDynamicIdGenerator; 880282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 881282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // and add it to the maps. 882282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mDynamicIdToStyleMap.put(id, resValue); 883282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mStyleToDynamicIdMap.put(resValue, id); 884282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 885282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 886282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return id; 887282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 888282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 889282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski private StyleResourceValue getStyleByDynamicId(int i) { 890282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mDynamicIdToStyleMap != null) { 891282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mDynamicIdToStyleMap.get(i); 892282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 893282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 894282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 895282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 896282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 897282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getFrameworkResourceValue(ResourceType resType, String resName, int defValue) { 8989fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta if (getRenderResources().getFrameworkResource(resType, resName) != null) { 8999fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta // Bridge.getResourceId creates a new resource id if an existing one isn't found. So, 9009fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta // we check for the existence of the resource before calling it. 9019fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta return Bridge.getResourceId(resType, resName); 902282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 903282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 904282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return defValue; 905282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 906282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 907282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getProjectResourceValue(ResourceType resType, String resName, int defValue) { 9089fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta // getResourceId creates a new resource id if an existing resource id isn't found. So, we 9099fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta // check for the existence of the resource before calling it. 9109fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta if (getRenderResources().getProjectResource(resType, resName) != null) { 9119fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta if (mProjectCallback != null) { 9129fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta Integer value = mProjectCallback.getResourceId(resType, resName); 9139fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta if (value != null) { 9149fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta return value; 9159fa48b09ad06c39be0923d5ca64b81f6b0eee993Deepanshu Gupta } 916282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 917282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 918282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 919282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return defValue; 920282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 921282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 922282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski //------------ NOT OVERRIDEN -------------------- 923282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 924282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 925282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean bindService(Intent arg0, ServiceConnection arg1, int arg2) { 926282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 927282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 928282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 929282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 930282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 931282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int checkCallingOrSelfPermission(String arg0) { 932282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 933282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 934282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 935282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 936282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 937282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int checkCallingOrSelfUriPermission(Uri arg0, int arg1) { 938282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 939282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 940282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 941282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 942282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 943282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int checkCallingPermission(String arg0) { 944282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 945282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 946282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 947282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 948282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 949282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int checkCallingUriPermission(Uri arg0, int arg1) { 950282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 951282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 952282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 953282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 954282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 955282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int checkPermission(String arg0, int arg1, int arg2) { 956282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 957282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 958282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 959282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 960282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 961ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn public int checkPermission(String arg0, int arg1, int arg2, IBinder arg3) { 962ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn // pass 963ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn return 0; 964ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn } 965ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn 966ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn @Override 967282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int checkUriPermission(Uri arg0, int arg1, int arg2, int arg3) { 968282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 969282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 970282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 971282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 972282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 973ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn public int checkUriPermission(Uri arg0, int arg1, int arg2, int arg3, IBinder arg4) { 974ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn // pass 975ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn return 0; 976ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn } 977ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn 978ff17024e583b170312d82089fd358d278ce16c9aDianne Hackborn @Override 979282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int checkUriPermission(Uri arg0, String arg1, String arg2, int arg3, 980282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int arg4, int arg5) { 981282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 982282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 983282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 984282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 985282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 986282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void clearWallpaper() { 987282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 988282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 989282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 990282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 991282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 992282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Context createPackageContext(String arg0, int arg1) { 993282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 994282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 995282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 996282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 997282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 998282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Context createPackageContextAsUser(String arg0, int arg1, UserHandle user) { 999282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1000282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1001282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1002282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1003282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1004282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Context createConfigurationContext(Configuration overrideConfiguration) { 1005282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1006282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1007282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1008282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1009282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1010282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Context createDisplayContext(Display display) { 1011282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1012282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1013282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1014282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1015282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1016282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String[] databaseList() { 1017282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1018282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1019282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1020282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1021282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 10224f6a6c48a4e6b9f6e4ced3d10bb51db5d2c22eadSvetoslav public Context createApplicationContext(ApplicationInfo application, int flags) 10234f6a6c48a4e6b9f6e4ced3d10bb51db5d2c22eadSvetoslav throws PackageManager.NameNotFoundException { 10244f6a6c48a4e6b9f6e4ced3d10bb51db5d2c22eadSvetoslav return null; 10254f6a6c48a4e6b9f6e4ced3d10bb51db5d2c22eadSvetoslav } 10264f6a6c48a4e6b9f6e4ced3d10bb51db5d2c22eadSvetoslav 10274f6a6c48a4e6b9f6e4ced3d10bb51db5d2c22eadSvetoslav @Override 1028282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean deleteDatabase(String arg0) { 1029282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1030282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 1031282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1032282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1033282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1034282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean deleteFile(String arg0) { 1035282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1036282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 1037282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1038282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1039282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1040282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void enforceCallingOrSelfPermission(String arg0, String arg1) { 1041282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1042282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1043282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1044282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1045282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1046282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void enforceCallingOrSelfUriPermission(Uri arg0, int arg1, 1047282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String arg2) { 1048282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1049282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1050282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1051282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1052282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1053282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void enforceCallingPermission(String arg0, String arg1) { 1054282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1055282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1056282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1057282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1058282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1059282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void enforceCallingUriPermission(Uri arg0, int arg1, String arg2) { 1060282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1061282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1062282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1063282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1064282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1065282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void enforcePermission(String arg0, int arg1, int arg2, String arg3) { 1066282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1067282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1068282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1069282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1070282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1071282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void enforceUriPermission(Uri arg0, int arg1, int arg2, int arg3, 1072282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String arg4) { 1073282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1074282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1075282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1076282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1077282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1078282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void enforceUriPermission(Uri arg0, String arg1, String arg2, 1079282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int arg3, int arg4, int arg5, String arg6) { 1080282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1081282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1082282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1083282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1084282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1085282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String[] fileList() { 1086282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1087282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1088282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1089282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1090282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1091282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public AssetManager getAssets() { 1092282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1093282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1094282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1095282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1096282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1097282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getCacheDir() { 1098282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1099282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 11034ed745d359ada6986ac15d8718452e5c55f40170Jeff Sharkey public File getCodeCacheDir() { 11044ed745d359ada6986ac15d8718452e5c55f40170Jeff Sharkey // pass 11054ed745d359ada6986ac15d8718452e5c55f40170Jeff Sharkey return null; 11064ed745d359ada6986ac15d8718452e5c55f40170Jeff Sharkey } 11074ed745d359ada6986ac15d8718452e5c55f40170Jeff Sharkey 11084ed745d359ada6986ac15d8718452e5c55f40170Jeff Sharkey @Override 1109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getExternalCacheDir() { 1110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public ContentResolver getContentResolver() { 1116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski if (mContentResolver == null) { 1117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski mContentResolver = new BridgeContentResolver(this); 1118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mContentResolver; 1120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getDatabasePath(String arg0) { 1124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getDir(String arg0, int arg1) { 1130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getFileStreamPath(String arg0) { 1136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getFilesDir() { 1142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 114765665aac6387d644f0f40c6bdddf558f096b6e6eChristopher Tate public File getNoBackupFilesDir() { 114865665aac6387d644f0f40c6bdddf558f096b6e6eChristopher Tate // pass 114965665aac6387d644f0f40c6bdddf558f096b6e6eChristopher Tate return null; 115065665aac6387d644f0f40c6bdddf558f096b6e6eChristopher Tate } 115165665aac6387d644f0f40c6bdddf558f096b6e6eChristopher Tate 115265665aac6387d644f0f40c6bdddf558f096b6e6eChristopher Tate @Override 1153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getExternalFilesDir(String type) { 1154282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1155282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1156282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1157282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1158282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1159282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getPackageCodePath() { 1160282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1161282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1162282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1163282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1164282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1165282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public PackageManager getPackageManager() { 1166282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1167282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1168282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1169282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1170282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1171282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getPackageName() { 1172282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1173282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1174282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1175282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1176282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1177282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getBasePackageName() { 1178282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1179282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1180282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1181282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1182282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 11838732bd893ae507346dad068a33edcc4beb99faedKenny Root public String getOpPackageName() { 11848732bd893ae507346dad068a33edcc4beb99faedKenny Root // pass 11858732bd893ae507346dad068a33edcc4beb99faedKenny Root return null; 11868732bd893ae507346dad068a33edcc4beb99faedKenny Root } 11878732bd893ae507346dad068a33edcc4beb99faedKenny Root 11888732bd893ae507346dad068a33edcc4beb99faedKenny Root @Override 1189282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public ApplicationInfo getApplicationInfo() { 1190282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return mApplicationInfo; 1191282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1192282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1193282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1194282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public String getPackageResourcePath() { 1195282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1196282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1197282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1198282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1199282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1200282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getSharedPrefsFile(String name) { 1201282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1202282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1203282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1204282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1205282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1206282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public SharedPreferences getSharedPreferences(String arg0, int arg1) { 1207dfeffd4c0ae165a3f225b818ef8d6f5d1cb89a2cDeepanshu Gupta if (mSharedPreferences == null) { 1208dfeffd4c0ae165a3f225b818ef8d6f5d1cb89a2cDeepanshu Gupta mSharedPreferences = new BridgeSharedPreferences(); 1209dfeffd4c0ae165a3f225b818ef8d6f5d1cb89a2cDeepanshu Gupta } 1210dfeffd4c0ae165a3f225b818ef8d6f5d1cb89a2cDeepanshu Gupta return mSharedPreferences; 1211282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1212282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1213282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1214282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Drawable getWallpaper() { 1215282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1216282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1217282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1218282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1219282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1220282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getWallpaperDesiredMinimumWidth() { 1221282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return -1; 1222282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1223282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1224282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1225282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getWallpaperDesiredMinimumHeight() { 1226282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return -1; 1227282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1228282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1229282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1230282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void grantUriPermission(String arg0, Uri arg1, int arg2) { 1231282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1232282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1233282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1234282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1235282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1236282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public FileInputStream openFileInput(String arg0) throws FileNotFoundException { 1237282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1238282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1239282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1240282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1241282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1242282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public FileOutputStream openFileOutput(String arg0, int arg1) throws FileNotFoundException { 1243282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1244282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1245282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1246282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1247282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1248282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public SQLiteDatabase openOrCreateDatabase(String arg0, int arg1, CursorFactory arg2) { 1249282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1250282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1251282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1252282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1253282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1254282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public SQLiteDatabase openOrCreateDatabase(String arg0, int arg1, 1255282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski CursorFactory arg2, DatabaseErrorHandler arg3) { 1256282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1257282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1258282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1259282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1260282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1261282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Drawable peekWallpaper() { 1262282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1263282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1264282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1265282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1266282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1267282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Intent registerReceiver(BroadcastReceiver arg0, IntentFilter arg1) { 1268282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1269282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1270282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1271282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1272282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1273282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Intent registerReceiver(BroadcastReceiver arg0, IntentFilter arg1, 1274282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String arg2, Handler arg3) { 1275282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1276282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1277282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1278282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1279282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1280282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Intent registerReceiverAsUser(BroadcastReceiver arg0, UserHandle arg0p5, 1281282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski IntentFilter arg1, String arg2, Handler arg3) { 1282282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1283282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1284282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1285282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1286282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1287282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void removeStickyBroadcast(Intent arg0) { 1288282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1289282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1290282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1291282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1292282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1293282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void revokeUriPermission(Uri arg0, int arg1) { 1294282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1295282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1296282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1297282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1298282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1299282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendBroadcast(Intent arg0) { 1300282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1301282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1302282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1303282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1304282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1305282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendBroadcast(Intent arg0, String arg1) { 1306282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1307282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1308282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1309282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1310282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1311282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendBroadcast(Intent intent, String receiverPermission, int appOp) { 1312282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1313282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1314282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1315282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1316282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendOrderedBroadcast(Intent arg0, String arg1) { 1317282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1318282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1319282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1320282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1321282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1322282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendOrderedBroadcast(Intent arg0, String arg1, 1323282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BroadcastReceiver arg2, Handler arg3, int arg4, String arg5, 1324282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bundle arg6) { 1325282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1326282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1327282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1328282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1329282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1330282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendOrderedBroadcast(Intent intent, String receiverPermission, int appOp, 1331282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, 1332282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String initialData, Bundle initialExtras) { 1333282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1334282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1335282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1336282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1337282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendBroadcastAsUser(Intent intent, UserHandle user) { 1338282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1339282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1340282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1341282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1342282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendBroadcastAsUser(Intent intent, UserHandle user, 1343282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String receiverPermission) { 1344282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1345282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1346282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1347282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1348282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 1349282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, 1350282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int initialCode, String initialData, Bundle initialExtras) { 1351282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1352282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1353282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1354282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 13553cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user, 13563cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani String receiverPermission, int appOp, BroadcastReceiver resultReceiver, 13573cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani Handler scheduler, 13583cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani int initialCode, String initialData, Bundle initialExtras) { 13593cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani // pass 13603cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani } 13613cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani 13623cf75729d5a27b8ddd1ea174626dbcf0349a1d07Amith Yamasani @Override 1363282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendStickyBroadcast(Intent arg0) { 1364282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1365282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1366282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1367282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1368282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1369282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendStickyOrderedBroadcast(Intent intent, 1370282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, 1371282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bundle initialExtras) { 1372282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1373282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1374282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1375282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1376282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) { 1377282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1378282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1379282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1380282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1381282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void sendStickyOrderedBroadcastAsUser(Intent intent, 1382282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski UserHandle user, BroadcastReceiver resultReceiver, 1383282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Handler scheduler, int initialCode, String initialData, 1384282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bundle initialExtras) { 1385282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1386282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1387282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1388282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1389282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) { 1390282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1391282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1392282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1393282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1394282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setTheme(int arg0) { 1395282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1396282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1397282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1398282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1399282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1400282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setWallpaper(Bitmap arg0) throws IOException { 1401282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1402282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1403282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1404282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1405282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1406282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void setWallpaper(InputStream arg0) throws IOException { 1407282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1408282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1409282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1410282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1411282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1412282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void startActivity(Intent arg0) { 1413282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1414282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1415282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1416282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1417282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void startActivity(Intent arg0, Bundle arg1) { 1418282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1419282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1420282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1421282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1422282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void startIntentSender(IntentSender intent, 1423282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 1424282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski throws IntentSender.SendIntentException { 1425282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1426282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1427282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1428282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1429282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void startIntentSender(IntentSender intent, 1430282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, 1431282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bundle options) throws IntentSender.SendIntentException { 1432282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1433282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1434282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1435282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1436282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean startInstrumentation(ComponentName arg0, String arg1, 1437282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bundle arg2) { 1438282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1439282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 1440282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1441282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1442282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1443282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public ComponentName startService(Intent arg0) { 1444282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1445282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1446282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1447282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1448282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1449282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean stopService(Intent arg0) { 1450282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1451282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 1452282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1453282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1454282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1455282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public ComponentName startServiceAsUser(Intent arg0, UserHandle arg1) { 1456282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1457282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1458282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1459282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1460282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1461282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean stopServiceAsUser(Intent arg0, UserHandle arg1) { 1462282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1463282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 1464282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1465282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1466282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1467282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void unbindService(ServiceConnection arg0) { 1468282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1469282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1470282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1471282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1472282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1473282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void unregisterReceiver(BroadcastReceiver arg0) { 1474282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1475282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1476282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1477282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1478282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1479282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public Context getApplicationContext() { 1480282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return this; 1481282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1482282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1483282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1484282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void startActivities(Intent[] arg0) { 1485282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1486282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1487282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1488282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1489282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1490282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public void startActivities(Intent[] arg0, Bundle arg1) { 1491282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1492282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1493282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1494282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1495282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1496282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public boolean isRestricted() { 1497282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 1498282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1499282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1500282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1501282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File getObbDir() { 1502282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, "OBB not supported", null); 1503282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1504282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1505282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1506282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1507282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public DisplayAdjustments getDisplayAdjustments(int displayId) { 1508282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1509282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return null; 1510282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1511282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1512282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1513282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public int getUserId() { 1514282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; // not used 1515282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1516282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1517282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1518282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File[] getExternalFilesDirs(String type) { 1519282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1520282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new File[0]; 1521282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1522282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1523282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1524282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File[] getObbDirs() { 1525282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1526282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new File[0]; 1527282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 1528282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 1529282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski @Override 1530282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski public File[] getExternalCacheDirs() { 1531282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // pass 1532282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return new File[0]; 1533282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 15342ee3c1e189819cc6efb4d7de24f1438bdb824087Jeff Sharkey 15352ee3c1e189819cc6efb4d7de24f1438bdb824087Jeff Sharkey @Override 15362ee3c1e189819cc6efb4d7de24f1438bdb824087Jeff Sharkey public File[] getExternalMediaDirs() { 15372ee3c1e189819cc6efb4d7de24f1438bdb824087Jeff Sharkey // pass 15382ee3c1e189819cc6efb4d7de24f1438bdb824087Jeff Sharkey return new File[0]; 15392ee3c1e189819cc6efb4d7de24f1438bdb824087Jeff Sharkey } 1540282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} 1541