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