1a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet/* 2a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * Copyright (C) 2012 The Android Open Source Project 3a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * 4a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 5a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * you may not use this file except in compliance with the License. 6a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * You may obtain a copy of the License at 7a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * 8a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 9a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * 10a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software 11a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 12a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * See the License for the specific language governing permissions and 14a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * limitations under the License. 15a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet */ 16a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 17a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohetpackage com.android.layoutlib.bridge.util; 18a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 19a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohetimport com.android.resources.ResourceType; 20a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohetimport com.android.util.Pair; 21a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 22a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohetimport android.util.SparseArray; 23a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 24a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohetimport java.util.HashMap; 25a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohetimport java.util.Map; 26a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 27a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohetpublic class DynamicIdMap { 28a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 29a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet private final Map<Pair<ResourceType, String>, Integer> mDynamicIds = new HashMap<Pair<ResourceType, String>, Integer>(); 30a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet private final SparseArray<Pair<ResourceType, String>> mRevDynamicIds = new SparseArray<Pair<ResourceType, String>>(); 31a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet private int mDynamicSeed; 32a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 33a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet public DynamicIdMap(int seed) { 34a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet mDynamicSeed = seed; 35a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet } 36a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 37a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet public void reset(int seed) { 38a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet mDynamicIds.clear(); 39a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet mRevDynamicIds.clear(); 40a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet mDynamicSeed = seed; 41a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet } 42a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 43a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet /** 44a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * Returns a dynamic integer for the given resource type/name, creating it if it doesn't 45a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * already exist. 46a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * 47a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * @param type the type of the resource 48a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * @param name the name of the resource 49a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * @return an integer. 50a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet */ 51a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet public Integer getId(ResourceType type, String name) { 52a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet return getId(Pair.of(type, name)); 53a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet } 54a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 55a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet /** 56a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * Returns a dynamic integer for the given resource type/name, creating it if it doesn't 57a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * already exist. 58a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * 59a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * @param resource the type/name of the resource 60a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet * @return an integer. 61a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet */ 62a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet public Integer getId(Pair<ResourceType, String> resource) { 63a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet Integer value = mDynamicIds.get(resource); 64a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet if (value == null) { 65a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet value = Integer.valueOf(++mDynamicSeed); 66a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet mDynamicIds.put(resource, value); 67a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet mRevDynamicIds.put(value, resource); 68a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet } 69a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 70a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet return value; 71a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet } 72a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet 73a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet public Pair<ResourceType, String> resolveId(int id) { 74a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet return mRevDynamicIds.get(id); 75a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet } 76a421f6c0ba8c354e2a81830e6402654bbf732780Xavier Ducrohet} 77