1d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar/* 2d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * Copyright (C) 2014 The Android Open Source Project 3d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * 4d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * you may not use this file except in compliance with the License. 6d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * You may obtain a copy of the License at 7d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * 8d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * 10d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * See the License for the specific language governing permissions and 14d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar * limitations under the License. 15d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar */ 16d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 17d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarpackage android.content.res; 18d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 19d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarimport android.test.ActivityInstrumentationTestCase2; 20d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarimport android.util.TypedValue; 21d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 22d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarimport com.android.frameworks.coretests.R; 23d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 24d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarimport java.lang.reflect.InvocationTargetException; 25d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarimport java.lang.reflect.Method; 26d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 27d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarpublic class ConfigurationBoundResourceCacheTest 28d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar extends ActivityInstrumentationTestCase2<ResourceCacheActivity> { 29d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 30d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar ConfigurationBoundResourceCache<Float> mCache; 31d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 32d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Method mCalcConfigChanges; 33d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 34d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public ConfigurationBoundResourceCacheTest() { 35d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar super(ResourceCacheActivity.class); 36d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 37d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 38d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar @Override 39d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar protected void setUp() throws Exception { 40d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar super.setUp(); 41d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache = new ConfigurationBoundResourceCache<Float>(getActivity().getResources()); 42d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 43d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 44d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testGetEmpty() { 45d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNull(mCache.get(-1, null)); 46d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 47d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 48d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testSetGet() { 49d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(1, null, new DummyFloatConstantState(5f)); 50d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(5f, mCache.get(1, null)); 51d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNotSame(5f, mCache.get(1, null)); 52d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(null, mCache.get(1, getActivity().getTheme())); 53d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 54d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 55d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testSetGetThemed() { 56d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(1, getActivity().getTheme(), new DummyFloatConstantState(5f)); 57d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(null, mCache.get(1, null)); 58d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(5f, mCache.get(1, getActivity().getTheme())); 59d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNotSame(5f, mCache.get(1, getActivity().getTheme())); 60d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 61d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 62d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testMultiThreadPutGet() { 63d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(1, getActivity().getTheme(), new DummyFloatConstantState(5f)); 64d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(1, null, new DummyFloatConstantState(10f)); 65d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(10f, mCache.get(1, null)); 66d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNotSame(10f, mCache.get(1, null)); 67d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(5f, mCache.get(1, getActivity().getTheme())); 68d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNotSame(5f, mCache.get(1, getActivity().getTheme())); 69d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 70d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 71d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testVoidConfigChange() 72d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { 73d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar TypedValue staticValue = new TypedValue(); 74d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar long key = 3L; 75d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Resources res = getActivity().getResources(); 76d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getValue(R.dimen.resource_cache_test_generic, staticValue, true); 77d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar float staticDim = TypedValue.complexToDimension(staticValue.data, res.getDisplayMetrics()); 78d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(key, getActivity().getTheme(), 79d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar new DummyFloatConstantState(staticDim, staticValue.changingConfigurations)); 80d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Configuration cfg = res.getConfiguration(); 81d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration newCnf = new Configuration(cfg); 82d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar newCnf.orientation = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? 83d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration.ORIENTATION_PORTRAIT 84d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar : Configuration.ORIENTATION_LANDSCAPE; 85d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar int changes = calcConfigChanges(res, newCnf); 86d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(staticDim, mCache.get(key, getActivity().getTheme())); 87d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.onConfigurationChange(changes); 88d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(staticDim, mCache.get(key, getActivity().getTheme())); 89d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 90d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 91d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testEffectiveConfigChange() 92d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { 93d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar TypedValue changingValue = new TypedValue(); 94d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar long key = 4L; 95d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Resources res = getActivity().getResources(); 96d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getValue(R.dimen.resource_cache_test_orientation_dependent, changingValue, true); 97d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar float changingDim = TypedValue.complexToDimension(changingValue.data, 98d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getDisplayMetrics()); 99d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(key, getActivity().getTheme(), 100d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar new DummyFloatConstantState(changingDim, changingValue.changingConfigurations)); 101d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 102d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Configuration cfg = res.getConfiguration(); 103d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration newCnf = new Configuration(cfg); 104d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar newCnf.orientation = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? 105d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration.ORIENTATION_PORTRAIT 106d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar : Configuration.ORIENTATION_LANDSCAPE; 107d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar int changes = calcConfigChanges(res, newCnf); 108d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(changingDim, mCache.get(key, getActivity().getTheme())); 109d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.onConfigurationChange(changes); 110d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNull(mCache.get(key, getActivity().getTheme())); 111d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 112d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 113d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testConfigChangeMultipleResources() 114d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { 115d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar TypedValue staticValue = new TypedValue(); 116d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar TypedValue changingValue = new TypedValue(); 117d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Resources res = getActivity().getResources(); 118d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getValue(R.dimen.resource_cache_test_generic, staticValue, true); 119d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getValue(R.dimen.resource_cache_test_orientation_dependent, changingValue, true); 120d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar float staticDim = TypedValue.complexToDimension(staticValue.data, res.getDisplayMetrics()); 121d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar float changingDim = TypedValue.complexToDimension(changingValue.data, 122d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getDisplayMetrics()); 123d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(R.dimen.resource_cache_test_generic, getActivity().getTheme(), 124d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar new DummyFloatConstantState(staticDim, staticValue.changingConfigurations)); 125d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(R.dimen.resource_cache_test_orientation_dependent, getActivity().getTheme(), 126d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar new DummyFloatConstantState(changingDim, changingValue.changingConfigurations)); 127d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Configuration cfg = res.getConfiguration(); 128d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration newCnf = new Configuration(cfg); 129d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar newCnf.orientation = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? 130d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration.ORIENTATION_PORTRAIT 131d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar : Configuration.ORIENTATION_LANDSCAPE; 132d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar int changes = calcConfigChanges(res, newCnf); 133d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(staticDim, mCache.get(R.dimen.resource_cache_test_generic, 134d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar getActivity().getTheme())); 135d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(changingDim, mCache.get(R.dimen.resource_cache_test_orientation_dependent, 136d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar getActivity().getTheme())); 137d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.onConfigurationChange(changes); 138d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(staticDim, mCache.get(R.dimen.resource_cache_test_generic, 139d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar getActivity().getTheme())); 140d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNull(mCache.get(R.dimen.resource_cache_test_orientation_dependent, 141d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar getActivity().getTheme())); 142d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 143d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 144d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public void testConfigChangeMultipleThemes() 145d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { 146d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar TypedValue[] staticValues = new TypedValue[]{new TypedValue(), new TypedValue()}; 147d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar TypedValue[] changingValues = new TypedValue[]{new TypedValue(), new TypedValue()}; 148d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar float staticDim = 0; 149d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar float changingDim = 0; 150d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Resources res = getActivity().getResources(); 151d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar for (int i = 0; i < 2; i++) { 152d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getValue(R.dimen.resource_cache_test_generic, staticValues[i], true); 153d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar staticDim = TypedValue 154d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar .complexToDimension(staticValues[i].data, res.getDisplayMetrics()); 155d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 156d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getValue(R.dimen.resource_cache_test_orientation_dependent, changingValues[i], 157d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar true); 158d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar changingDim = TypedValue.complexToDimension(changingValues[i].data, 159d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar res.getDisplayMetrics()); 160d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Resources.Theme theme = i == 0 ? getActivity().getTheme() : null; 161d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(R.dimen.resource_cache_test_generic, theme, 162d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar new DummyFloatConstantState(staticDim, staticValues[i].changingConfigurations)); 163d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.put(R.dimen.resource_cache_test_orientation_dependent, theme, 164d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar new DummyFloatConstantState(changingDim, 165d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar changingValues[i].changingConfigurations)); 166d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 167d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Configuration cfg = res.getConfiguration(); 168d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration newCnf = new Configuration(cfg); 169d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar newCnf.orientation = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE ? 170d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration.ORIENTATION_PORTRAIT 171d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar : Configuration.ORIENTATION_LANDSCAPE; 172d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar int changes = calcConfigChanges(res, newCnf); 173d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar for (int i = 0; i < 2; i++) { 174d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Resources.Theme theme = i == 0 ? getActivity().getTheme() : null; 175d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(staticDim, mCache.get(R.dimen.resource_cache_test_generic, theme)); 176d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(changingDim, 177d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.get(R.dimen.resource_cache_test_orientation_dependent, theme)); 178d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 179d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCache.onConfigurationChange(changes); 180d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar for (int i = 0; i < 2; i++) { 181d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Resources.Theme theme = i == 0 ? getActivity().getTheme() : null; 182d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertEquals(staticDim, mCache.get(R.dimen.resource_cache_test_generic, theme)); 183d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar assertNull(mCache.get(R.dimen.resource_cache_test_orientation_dependent, theme)); 184d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 185d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 186d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 187d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar private int calcConfigChanges(Resources resources, Configuration configuration) 188d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { 189d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar if (mCalcConfigChanges == null) { 190d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCalcConfigChanges = Resources.class.getDeclaredMethod("calcConfigChanges", 191d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar Configuration.class); 192d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mCalcConfigChanges.setAccessible(true); 193d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 194d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar return (Integer) mCalcConfigChanges.invoke(resources, configuration); 195d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 196d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 197d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 198d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar static class DummyFloatConstantState extends 199d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar ConstantState<Float> { 200d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 201d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar final Float mObj; 202d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 203d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar int mChangingConf = 0; 204d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 205d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar DummyFloatConstantState(Float obj) { 206d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mObj = obj; 207d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 208d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 209d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar DummyFloatConstantState(Float obj, int changingConf) { 210d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mObj = obj; 211d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar mChangingConf = changingConf; 212d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 213d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 214d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar @Override 215d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public int getChangingConfigurations() { 216d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar return mChangingConf; 217d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 218d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar 219d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar @Override 220d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar public Float newInstance() { 221d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar return new Float(mObj); 222d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 223d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar } 224d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar} 225