blob: ee609df2e2322fdfd2aa1910912fa9a5daba19bb [file] [log] [blame]
Yigit Boyard422dc32014-09-25 12:23:35 -07001/*
2* Copyright (C) 2014 The Android Open Source Project
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16package android.content.res;
17
18/**
19 * A cache class that can provide new instances of a particular resource which may change
20 * depending on the current {@link Resources.Theme} or {@link Configuration}.
21 * <p>
22 * A constant state should be able to return a bitmask of changing configurations, which
23 * identifies the type of configuration changes that may invalidate this resource. These
24 * configuration changes can be obtained from {@link android.util.TypedValue}. Entities such as
25 * {@link android.animation.Animator} also provide a changing configuration method to include
26 * their dependencies (e.g. An AnimatorSet's changing configuration is the union of the
27 * changing configurations of each Animator in the set)
28 * @hide
29 */
30abstract public class ConstantState<T> {
31
32 /**
33 * Return a bit mask of configuration changes that will impact
34 * this resource (and thus require completely reloading it).
35 */
36 abstract public int getChangingConfigurations();
37
38 /**
39 * Create a new instance without supplying resources the caller
40 * is running in.
41 */
42 public abstract T newInstance();
43
44 /**
45 * Create a new instance from its constant state. This
46 * must be implemented for resources that change based on the target
47 * density of their caller (that is depending on whether it is
48 * in compatibility mode).
49 */
50 public T newInstance(Resources res) {
51 return newInstance();
52 }
53
54 /**
55 * Create a new instance from its constant state. This must be
56 * implemented for resources that can have a theme applied.
57 */
58 public T newInstance(Resources res, Resources.Theme theme) {
59 return newInstance(res);
60 }
61}