19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
177f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohetpackage android.content.res;
18c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohet
19c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohetimport com.android.layoutlib.bridge.Bridge;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.AssetManager;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class BridgeAssetManager extends AssetManager {
2499e1cdae99a99170011150d6827bf4c9ee63c075Xavier Ducrohet
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This initializes the static field {@link AssetManager#mSystem} which is used
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * by methods who get a global asset manager using {@link AssetManager#getSystem()}.
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p/>
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * They will end up using our bridge asset manager.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p/>
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link Bridge} calls this method after setting up a new bridge.
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
337f9f99ea11051614a7727dfb9f9578b518e76e3cXavier Ducrohet    public static AssetManager initSystem() {
349ddb7df88a62a131519264f75f5d6616ee11b6e6Dianne Hackborn        if (!(AssetManager.sSystem instanceof BridgeAssetManager)) {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Note that AssetManager() creates a system AssetManager and we override it
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // with our BridgeAssetManager.
379ddb7df88a62a131519264f75f5d6616ee11b6e6Dianne Hackborn            AssetManager.sSystem = new BridgeAssetManager();
389ddb7df88a62a131519264f75f5d6616ee11b6e6Dianne Hackborn            AssetManager.sSystem.makeStringBlocks(false);
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
409ddb7df88a62a131519264f75f5d6616ee11b6e6Dianne Hackborn        return AssetManager.sSystem;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4299e1cdae99a99170011150d6827bf4c9ee63c075Xavier Ducrohet
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
449ddb7df88a62a131519264f75f5d6616ee11b6e6Dianne Hackborn     * Clears the static {@link AssetManager#sSystem} to make sure we don't leave objects
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * around that would prevent us from unloading the library.
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
47c2e9651bf386a1f7bf7fc706cf5424950570470cXavier Ducrohet    public static void clearSystem() {
489ddb7df88a62a131519264f75f5d6616ee11b6e6Dianne Hackborn        AssetManager.sSystem = null;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5099e1cdae99a99170011150d6827bf4c9ee63c075Xavier Ducrohet
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private BridgeAssetManager() {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
54