MergedConfiguration.java revision 446079600ece83b22cb91865bcbeb694292b0108
1446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian/*
2446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * Copyright (C) 2017 The Android Open Source Project
3446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian *
4446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * Licensed under the Apache License, Version 2.0 (the "License");
5446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * you may not use this file except in compliance with the License.
6446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * You may obtain a copy of the License at
7446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian *
8446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian *      http://www.apache.org/licenses/LICENSE-2.0
9446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian *
10446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * Unless required by applicable law or agreed to in writing, software
11446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * distributed under the License is distributed on an "AS IS" BASIS,
12446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * See the License for the specific language governing permissions and
14446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * limitations under the License
15446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian */
16446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
17446079600ece83b22cb91865bcbeb694292b0108Andrii Kulianpackage android.util;
18446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
19446079600ece83b22cb91865bcbeb694292b0108Andrii Kulianimport android.annotation.NonNull;
20446079600ece83b22cb91865bcbeb694292b0108Andrii Kulianimport android.content.res.Configuration;
21446079600ece83b22cb91865bcbeb694292b0108Andrii Kulianimport android.os.Parcel;
22446079600ece83b22cb91865bcbeb694292b0108Andrii Kulianimport android.os.Parcelable;
23446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
24446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian/**
25446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * Container that holds global and override config and their merge product.
26446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * Merged configuration updates automatically whenever global or override configs are updated via
27446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * setters.
28446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian *
29446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian * {@hide}
30446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian */
31446079600ece83b22cb91865bcbeb694292b0108Andrii Kulianpublic class MergedConfiguration implements Parcelable {
32446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
33446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    private Configuration mGlobalConfig = new Configuration();
34446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    private Configuration mOverrideConfig = new Configuration();
35446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    private Configuration mMergedConfig = new Configuration();
36446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
37446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public MergedConfiguration() {
38446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
39446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
40446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public MergedConfiguration(Configuration globalConfig, Configuration overrideConfig) {
41446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        setConfiguration(globalConfig, overrideConfig);
42446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
43446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
44446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public MergedConfiguration(MergedConfiguration mergedConfiguration) {
45446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        setConfiguration(mergedConfiguration.getGlobalConfiguration(),
46446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian                mergedConfiguration.getOverrideConfiguration());
47446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
48446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
49446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    private MergedConfiguration(Parcel in) {
50446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        readFromParcel(in);
51446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
52446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
53446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    @Override
54446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public void writeToParcel(Parcel dest, int flags) {
55446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        dest.writeParcelable(mGlobalConfig, flags);
56446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        dest.writeParcelable(mOverrideConfig, flags);
57446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        dest.writeParcelable(mMergedConfig, flags);
58446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
59446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
60446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public void readFromParcel(Parcel source) {
61446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        mGlobalConfig = source.readParcelable(Configuration.class.getClassLoader());
62446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        mOverrideConfig = source.readParcelable(Configuration.class.getClassLoader());
63446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        mMergedConfig = source.readParcelable(Configuration.class.getClassLoader());
64446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
65446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
66446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    @Override
67446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public int describeContents() {
68446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        return 0;
69446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
70446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
71446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public static final Creator<MergedConfiguration> CREATOR = new Creator<MergedConfiguration>() {
72446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        @Override
73446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        public MergedConfiguration createFromParcel(Parcel in) {
74446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian            return new MergedConfiguration(in);
75446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        }
76446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
77446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        @Override
78446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        public MergedConfiguration[] newArray(int size) {
79446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian            return new MergedConfiguration[size];
80446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        }
81446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    };
82446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
83446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    /**
84446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     * Update global and override configurations.
85446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     * Merged configuration will automatically be updated.
86446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     * @param globalConfig New global configuration.
87446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     * @param overrideConfig New override configuration.
88446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     */
89446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public void setConfiguration(Configuration globalConfig, Configuration overrideConfig) {
90446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        mGlobalConfig.setTo(globalConfig);
91446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        mOverrideConfig.setTo(overrideConfig);
92446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        updateMergedConfig();
93446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
94446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
95446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    /**
96446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     * @return Stored global configuration value.
97446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     */
98446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    @NonNull
99446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public Configuration getGlobalConfiguration() {
100446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        return mGlobalConfig;
101446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
102446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
103446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    /**
104446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     * @return Stored override configuration value.
105446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     */
106446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public Configuration getOverrideConfiguration() {
107446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        return mOverrideConfig;
108446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
109446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
110446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    /**
111446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     * @return Stored merged configuration value.
112446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian     */
113446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    public Configuration getMergedConfiguration() {
114446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        return mMergedConfig;
115446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
116446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian
117446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    /** Update merged config when global or override config changes. */
118446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    private void updateMergedConfig() {
119446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        mMergedConfig.setTo(mGlobalConfig);
120446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian        mMergedConfig.updateFrom(mOverrideConfig);
121446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian    }
122446079600ece83b22cb91865bcbeb694292b0108Andrii Kulian}
123