• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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  */
16 
17 package android.aconfigd;
18 
19 import java.util.Objects;
20 
21 /** @hide */
22 public class AconfigdFlagInfo {
23 
24     private String mPackageName;
25     private String mFlagName;
26     private String mServerFlagValue;
27     private String mLocalFlagValue;
28     private String mBootFlagValue;
29     private String mDefaultFlagValue;
30     private String mNamespace;
31     private boolean mHasServerOverride;
32     private boolean mHasLocalOverride;
33     private boolean mIsReadWrite;
34 
AconfigdFlagInfo(Builder builder)35     AconfigdFlagInfo(Builder builder) {
36         mPackageName = builder.mPackageName;
37         mFlagName = builder.mFlagName;
38         mServerFlagValue = builder.mServerFlagValue;
39         mLocalFlagValue = builder.mLocalFlagValue;
40         mDefaultFlagValue = builder.mDefaultFlagValue;
41         mHasServerOverride = builder.mHasServerOverride;
42         mHasLocalOverride = builder.mHasLocalOverride;
43         mIsReadWrite = builder.mIsReadWrite;
44         mBootFlagValue = builder.mBootFlagValue;
45         if (mBootFlagValue == null) {
46             updateBootFlagValue();
47         }
48         mNamespace = builder.mNamespace;
49     }
50 
getFullFlagName()51     public String getFullFlagName() {
52         StringBuilder ret = new StringBuilder(mPackageName);
53         return ret.append('.').append(mFlagName).toString();
54     }
55 
getPackageName()56     public String getPackageName() {
57         return mPackageName;
58     }
59 
getFlagName()60     public String getFlagName() {
61         return mFlagName;
62     }
63 
getServerFlagValue()64     public String getServerFlagValue() {
65         return mServerFlagValue;
66     }
67 
getLocalFlagValue()68     public String getLocalFlagValue() {
69         return mLocalFlagValue;
70     }
71 
getBootFlagValue()72     public String getBootFlagValue() {
73         return mBootFlagValue;
74     }
75 
getDefaultFlagValue()76     public String getDefaultFlagValue() {
77         return mDefaultFlagValue;
78     }
79 
getNamespace()80     public String getNamespace() {
81         return mNamespace;
82     }
83 
getHasServerOverride()84     public boolean getHasServerOverride() {
85         return mHasServerOverride;
86     }
87 
getHasLocalOverride()88     public boolean getHasLocalOverride() {
89         return mHasLocalOverride;
90     }
91 
getIsReadWrite()92     public boolean getIsReadWrite() {
93         return mIsReadWrite;
94     }
95 
setLocalFlagValue(String localFlagValue)96     public void setLocalFlagValue(String localFlagValue) {
97         if (!mIsReadWrite) {
98             return;
99         }
100         mLocalFlagValue = localFlagValue;
101         mHasLocalOverride = true;
102         updateBootFlagValue();
103     }
104 
setServerFlagValue(String serverFlagValue)105     public void setServerFlagValue(String serverFlagValue) {
106         if (!mIsReadWrite) {
107             return;
108         }
109         mServerFlagValue = serverFlagValue;
110         mHasServerOverride = true;
111         updateBootFlagValue();
112     }
113 
updateBootFlagValue()114     private void updateBootFlagValue() {
115         mBootFlagValue = mDefaultFlagValue == null ? mBootFlagValue : mDefaultFlagValue;
116         if (mIsReadWrite) {
117             mBootFlagValue = mServerFlagValue == null ? mBootFlagValue : mServerFlagValue;
118             mBootFlagValue = mLocalFlagValue == null ? mBootFlagValue : mLocalFlagValue;
119         }
120     }
121 
122     @Override
equals(Object obj)123     public boolean equals(Object obj) {
124         if (this == obj) {
125             return true;
126         }
127         if (obj == null || !(obj instanceof AconfigdFlagInfo)) {
128             return false;
129         }
130         AconfigdFlagInfo other = (AconfigdFlagInfo) obj;
131         return Objects.equals(mPackageName, other.mPackageName)
132                 && Objects.equals(mFlagName, other.mFlagName)
133                 && Objects.equals(mServerFlagValue, other.mServerFlagValue)
134                 && Objects.equals(mLocalFlagValue, other.mLocalFlagValue)
135                 && Objects.equals(mBootFlagValue, other.mBootFlagValue)
136                 && Objects.equals(mDefaultFlagValue, other.mDefaultFlagValue)
137                 && mHasServerOverride == other.mHasServerOverride
138                 && mHasLocalOverride == other.mHasLocalOverride
139                 && mIsReadWrite == other.mIsReadWrite;
140     }
141 
142     @Override
hashCode()143     public int hashCode() {
144         return Objects.hash(
145                 mPackageName,
146                 mFlagName,
147                 mServerFlagValue,
148                 mLocalFlagValue,
149                 mBootFlagValue,
150                 mDefaultFlagValue,
151                 mHasServerOverride,
152                 mHasLocalOverride,
153                 mIsReadWrite);
154     }
155 
dump()156     public String dump() {
157         return String.format(
158                 "packageName: %s, flagName: %s, serverFlagValue: %s, localFlagValue: %s,"
159                         + " bootFlagValue: %s, defaultFlagValue: %s, hasServerOverride: %s,"
160                         + " hasLocalOverride: %s, isReadWrite: %s",
161                 mPackageName,
162                 mFlagName,
163                 mServerFlagValue,
164                 mLocalFlagValue,
165                 mBootFlagValue,
166                 mDefaultFlagValue,
167                 mHasServerOverride,
168                 mHasLocalOverride,
169                 mIsReadWrite);
170     }
171 
dumpDiff(AconfigdFlagInfo other)172     public String dumpDiff(AconfigdFlagInfo other) {
173         StringBuilder ret = new StringBuilder();
174         if (!Objects.equals(mPackageName, other.mPackageName)) {
175             ret.append(String.format("packageName: %s -> %s\n", mPackageName, other.mPackageName));
176             return ret.toString();
177         }
178         if (!Objects.equals(mFlagName, other.mFlagName)) {
179             ret.append(String.format("flagName: %s -> %s\n", mFlagName, other.mFlagName));
180             return ret.toString();
181         }
182         if (!Objects.equals(mBootFlagValue, other.mBootFlagValue)) {
183             ret.append(
184                     String.format(
185                             "bootFlagValue: %s -> %s\n", mBootFlagValue, other.mBootFlagValue));
186         }
187         if (!Objects.equals(mDefaultFlagValue, other.mDefaultFlagValue)) {
188             ret.append(
189                     String.format(
190                             "defaultFlagValue: %s -> %s\n",
191                             mDefaultFlagValue, other.mDefaultFlagValue));
192         }
193         if (mIsReadWrite != other.mIsReadWrite) {
194             ret.append(String.format("isReadWrite: %s -> %s\n", mIsReadWrite, other.mIsReadWrite));
195         }
196         if (mIsReadWrite && other.mIsReadWrite) {
197             if (!Objects.equals(mServerFlagValue, other.mServerFlagValue)) {
198                 ret.append(
199                         String.format(
200                                 "serverFlagValue: %s -> %s\n",
201                                 mServerFlagValue, other.mServerFlagValue));
202             }
203             if (!Objects.equals(mLocalFlagValue, other.mLocalFlagValue)) {
204                 ret.append(
205                         String.format(
206                                 "localFlagValue: %s -> %s\n",
207                                 mLocalFlagValue, other.mLocalFlagValue));
208             }
209             if (mHasServerOverride != other.mHasServerOverride) {
210                 ret.append(
211                         String.format(
212                                 "hasServerOverride: %s -> %s\n",
213                                 mHasServerOverride, other.mHasServerOverride));
214             }
215             if (mHasLocalOverride != other.mHasLocalOverride) {
216                 ret.append(
217                         String.format(
218                                 "hasLocalOverride: %s -> %s\n",
219                                 mHasLocalOverride, other.mHasLocalOverride));
220             }
221         }
222         return ret.toString();
223     }
224 
newBuilder()225     public static Builder newBuilder() {
226         return new Builder();
227     }
228 
229     public static class Builder {
230         private String mPackageName;
231         private String mFlagName;
232         private String mServerFlagValue;
233         private String mLocalFlagValue;
234         private String mBootFlagValue;
235         private String mDefaultFlagValue;
236         private String mNamespace;
237         private boolean mHasServerOverride;
238         private boolean mHasLocalOverride;
239         private boolean mIsReadWrite;
240 
setPackageName(String packageName)241         public Builder setPackageName(String packageName) {
242             mPackageName = packageName;
243             return this;
244         }
245 
setFlagName(String flagName)246         public Builder setFlagName(String flagName) {
247             mFlagName = flagName;
248             return this;
249         }
250 
setServerFlagValue(String serverFlagValue)251         public Builder setServerFlagValue(String serverFlagValue) {
252             mServerFlagValue = nullOrEmpty(serverFlagValue) ? null : serverFlagValue;
253             return this;
254         }
255 
setLocalFlagValue(String localFlagValue)256         public Builder setLocalFlagValue(String localFlagValue) {
257             mLocalFlagValue = nullOrEmpty(localFlagValue) ? null : localFlagValue;
258             return this;
259         }
260 
setBootFlagValue(String bootFlagValue)261         public Builder setBootFlagValue(String bootFlagValue) {
262             mBootFlagValue = nullOrEmpty(bootFlagValue) ? null : bootFlagValue;
263             return this;
264         }
265 
setDefaultFlagValue(String defaultFlagValue)266         public Builder setDefaultFlagValue(String defaultFlagValue) {
267             mDefaultFlagValue = nullOrEmpty(defaultFlagValue) ? null : defaultFlagValue;
268             return this;
269         }
270 
setNamespace(String namespace)271         public Builder setNamespace(String namespace) {
272             mNamespace = namespace;
273             return this;
274         }
275 
setHasServerOverride(boolean hasServerOverride)276         public Builder setHasServerOverride(boolean hasServerOverride) {
277             mHasServerOverride = hasServerOverride;
278             return this;
279         }
280 
setHasLocalOverride(boolean hasLocalOverride)281         public Builder setHasLocalOverride(boolean hasLocalOverride) {
282             mHasLocalOverride = hasLocalOverride;
283             return this;
284         }
285 
setIsReadWrite(boolean isReadWrite)286         public Builder setIsReadWrite(boolean isReadWrite) {
287             mIsReadWrite = isReadWrite;
288             return this;
289         }
290 
build()291         public AconfigdFlagInfo build() {
292             return new AconfigdFlagInfo(this);
293         }
294 
nullOrEmpty(String str)295         private boolean nullOrEmpty(String str) {
296             return str == null || str.isEmpty();
297         }
298     }
299 }
300