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