xref: /aosp_15_r20/system/server_configurable_flags/aconfigd/srcs/AconfigdFlagInfo.java (revision 207333786ba243bc7d4d69ef6b05487aa7071806)
1*20733378SAndroid Build Coastguard Worker /*
2*20733378SAndroid Build Coastguard Worker  * Copyright (C) 2024 The Android Open Source Project
3*20733378SAndroid Build Coastguard Worker  *
4*20733378SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*20733378SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*20733378SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*20733378SAndroid Build Coastguard Worker  *
8*20733378SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*20733378SAndroid Build Coastguard Worker  *
10*20733378SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*20733378SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*20733378SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*20733378SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*20733378SAndroid Build Coastguard Worker  * limitations under the License.
15*20733378SAndroid Build Coastguard Worker  */
16*20733378SAndroid Build Coastguard Worker 
17*20733378SAndroid Build Coastguard Worker package android.aconfigd;
18*20733378SAndroid Build Coastguard Worker 
19*20733378SAndroid Build Coastguard Worker import java.util.Objects;
20*20733378SAndroid Build Coastguard Worker 
21*20733378SAndroid Build Coastguard Worker /** @hide */
22*20733378SAndroid Build Coastguard Worker public class AconfigdFlagInfo {
23*20733378SAndroid Build Coastguard Worker 
24*20733378SAndroid Build Coastguard Worker     private String mPackageName;
25*20733378SAndroid Build Coastguard Worker     private String mFlagName;
26*20733378SAndroid Build Coastguard Worker     private String mServerFlagValue;
27*20733378SAndroid Build Coastguard Worker     private String mLocalFlagValue;
28*20733378SAndroid Build Coastguard Worker     private String mBootFlagValue;
29*20733378SAndroid Build Coastguard Worker     private String mDefaultFlagValue;
30*20733378SAndroid Build Coastguard Worker     private String mNamespace;
31*20733378SAndroid Build Coastguard Worker     private boolean mHasServerOverride;
32*20733378SAndroid Build Coastguard Worker     private boolean mHasLocalOverride;
33*20733378SAndroid Build Coastguard Worker     private boolean mIsReadWrite;
34*20733378SAndroid Build Coastguard Worker 
AconfigdFlagInfo(Builder builder)35*20733378SAndroid Build Coastguard Worker     AconfigdFlagInfo(Builder builder) {
36*20733378SAndroid Build Coastguard Worker         mPackageName = builder.mPackageName;
37*20733378SAndroid Build Coastguard Worker         mFlagName = builder.mFlagName;
38*20733378SAndroid Build Coastguard Worker         mServerFlagValue = builder.mServerFlagValue;
39*20733378SAndroid Build Coastguard Worker         mLocalFlagValue = builder.mLocalFlagValue;
40*20733378SAndroid Build Coastguard Worker         mDefaultFlagValue = builder.mDefaultFlagValue;
41*20733378SAndroid Build Coastguard Worker         mHasServerOverride = builder.mHasServerOverride;
42*20733378SAndroid Build Coastguard Worker         mHasLocalOverride = builder.mHasLocalOverride;
43*20733378SAndroid Build Coastguard Worker         mIsReadWrite = builder.mIsReadWrite;
44*20733378SAndroid Build Coastguard Worker         mBootFlagValue = builder.mBootFlagValue;
45*20733378SAndroid Build Coastguard Worker         if (mBootFlagValue == null) {
46*20733378SAndroid Build Coastguard Worker             updateBootFlagValue();
47*20733378SAndroid Build Coastguard Worker         }
48*20733378SAndroid Build Coastguard Worker         mNamespace = builder.mNamespace;
49*20733378SAndroid Build Coastguard Worker     }
50*20733378SAndroid Build Coastguard Worker 
getFullFlagName()51*20733378SAndroid Build Coastguard Worker     public String getFullFlagName() {
52*20733378SAndroid Build Coastguard Worker         StringBuilder ret = new StringBuilder(mPackageName);
53*20733378SAndroid Build Coastguard Worker         return ret.append('.').append(mFlagName).toString();
54*20733378SAndroid Build Coastguard Worker     }
55*20733378SAndroid Build Coastguard Worker 
getPackageName()56*20733378SAndroid Build Coastguard Worker     public String getPackageName() {
57*20733378SAndroid Build Coastguard Worker         return mPackageName;
58*20733378SAndroid Build Coastguard Worker     }
59*20733378SAndroid Build Coastguard Worker 
getFlagName()60*20733378SAndroid Build Coastguard Worker     public String getFlagName() {
61*20733378SAndroid Build Coastguard Worker         return mFlagName;
62*20733378SAndroid Build Coastguard Worker     }
63*20733378SAndroid Build Coastguard Worker 
getServerFlagValue()64*20733378SAndroid Build Coastguard Worker     public String getServerFlagValue() {
65*20733378SAndroid Build Coastguard Worker         return mServerFlagValue;
66*20733378SAndroid Build Coastguard Worker     }
67*20733378SAndroid Build Coastguard Worker 
getLocalFlagValue()68*20733378SAndroid Build Coastguard Worker     public String getLocalFlagValue() {
69*20733378SAndroid Build Coastguard Worker         return mLocalFlagValue;
70*20733378SAndroid Build Coastguard Worker     }
71*20733378SAndroid Build Coastguard Worker 
getBootFlagValue()72*20733378SAndroid Build Coastguard Worker     public String getBootFlagValue() {
73*20733378SAndroid Build Coastguard Worker         return mBootFlagValue;
74*20733378SAndroid Build Coastguard Worker     }
75*20733378SAndroid Build Coastguard Worker 
getDefaultFlagValue()76*20733378SAndroid Build Coastguard Worker     public String getDefaultFlagValue() {
77*20733378SAndroid Build Coastguard Worker         return mDefaultFlagValue;
78*20733378SAndroid Build Coastguard Worker     }
79*20733378SAndroid Build Coastguard Worker 
getNamespace()80*20733378SAndroid Build Coastguard Worker     public String getNamespace() {
81*20733378SAndroid Build Coastguard Worker         return mNamespace;
82*20733378SAndroid Build Coastguard Worker     }
83*20733378SAndroid Build Coastguard Worker 
getHasServerOverride()84*20733378SAndroid Build Coastguard Worker     public boolean getHasServerOverride() {
85*20733378SAndroid Build Coastguard Worker         return mHasServerOverride;
86*20733378SAndroid Build Coastguard Worker     }
87*20733378SAndroid Build Coastguard Worker 
getHasLocalOverride()88*20733378SAndroid Build Coastguard Worker     public boolean getHasLocalOverride() {
89*20733378SAndroid Build Coastguard Worker         return mHasLocalOverride;
90*20733378SAndroid Build Coastguard Worker     }
91*20733378SAndroid Build Coastguard Worker 
getIsReadWrite()92*20733378SAndroid Build Coastguard Worker     public boolean getIsReadWrite() {
93*20733378SAndroid Build Coastguard Worker         return mIsReadWrite;
94*20733378SAndroid Build Coastguard Worker     }
95*20733378SAndroid Build Coastguard Worker 
setLocalFlagValue(String localFlagValue)96*20733378SAndroid Build Coastguard Worker     public void setLocalFlagValue(String localFlagValue) {
97*20733378SAndroid Build Coastguard Worker         if (!mIsReadWrite) {
98*20733378SAndroid Build Coastguard Worker             return;
99*20733378SAndroid Build Coastguard Worker         }
100*20733378SAndroid Build Coastguard Worker         mLocalFlagValue = localFlagValue;
101*20733378SAndroid Build Coastguard Worker         mHasLocalOverride = true;
102*20733378SAndroid Build Coastguard Worker         updateBootFlagValue();
103*20733378SAndroid Build Coastguard Worker     }
104*20733378SAndroid Build Coastguard Worker 
setServerFlagValue(String serverFlagValue)105*20733378SAndroid Build Coastguard Worker     public void setServerFlagValue(String serverFlagValue) {
106*20733378SAndroid Build Coastguard Worker         if (!mIsReadWrite) {
107*20733378SAndroid Build Coastguard Worker             return;
108*20733378SAndroid Build Coastguard Worker         }
109*20733378SAndroid Build Coastguard Worker         mServerFlagValue = serverFlagValue;
110*20733378SAndroid Build Coastguard Worker         mHasServerOverride = true;
111*20733378SAndroid Build Coastguard Worker         updateBootFlagValue();
112*20733378SAndroid Build Coastguard Worker     }
113*20733378SAndroid Build Coastguard Worker 
updateBootFlagValue()114*20733378SAndroid Build Coastguard Worker     private void updateBootFlagValue() {
115*20733378SAndroid Build Coastguard Worker         mBootFlagValue = mDefaultFlagValue == null ? mBootFlagValue : mDefaultFlagValue;
116*20733378SAndroid Build Coastguard Worker         if (mIsReadWrite) {
117*20733378SAndroid Build Coastguard Worker             mBootFlagValue = mServerFlagValue == null ? mBootFlagValue : mServerFlagValue;
118*20733378SAndroid Build Coastguard Worker             mBootFlagValue = mLocalFlagValue == null ? mBootFlagValue : mLocalFlagValue;
119*20733378SAndroid Build Coastguard Worker         }
120*20733378SAndroid Build Coastguard Worker     }
121*20733378SAndroid Build Coastguard Worker 
122*20733378SAndroid Build Coastguard Worker     @Override
equals(Object obj)123*20733378SAndroid Build Coastguard Worker     public boolean equals(Object obj) {
124*20733378SAndroid Build Coastguard Worker         if (this == obj) {
125*20733378SAndroid Build Coastguard Worker             return true;
126*20733378SAndroid Build Coastguard Worker         }
127*20733378SAndroid Build Coastguard Worker         if (obj == null || !(obj instanceof AconfigdFlagInfo)) {
128*20733378SAndroid Build Coastguard Worker             return false;
129*20733378SAndroid Build Coastguard Worker         }
130*20733378SAndroid Build Coastguard Worker         AconfigdFlagInfo other = (AconfigdFlagInfo) obj;
131*20733378SAndroid Build Coastguard Worker         return Objects.equals(mPackageName, other.mPackageName)
132*20733378SAndroid Build Coastguard Worker                 && Objects.equals(mFlagName, other.mFlagName)
133*20733378SAndroid Build Coastguard Worker                 && Objects.equals(mServerFlagValue, other.mServerFlagValue)
134*20733378SAndroid Build Coastguard Worker                 && Objects.equals(mLocalFlagValue, other.mLocalFlagValue)
135*20733378SAndroid Build Coastguard Worker                 && Objects.equals(mBootFlagValue, other.mBootFlagValue)
136*20733378SAndroid Build Coastguard Worker                 && Objects.equals(mDefaultFlagValue, other.mDefaultFlagValue)
137*20733378SAndroid Build Coastguard Worker                 && mHasServerOverride == other.mHasServerOverride
138*20733378SAndroid Build Coastguard Worker                 && mHasLocalOverride == other.mHasLocalOverride
139*20733378SAndroid Build Coastguard Worker                 && mIsReadWrite == other.mIsReadWrite;
140*20733378SAndroid Build Coastguard Worker     }
141*20733378SAndroid Build Coastguard Worker 
142*20733378SAndroid Build Coastguard Worker     @Override
hashCode()143*20733378SAndroid Build Coastguard Worker     public int hashCode() {
144*20733378SAndroid Build Coastguard Worker         return Objects.hash(
145*20733378SAndroid Build Coastguard Worker                 mPackageName,
146*20733378SAndroid Build Coastguard Worker                 mFlagName,
147*20733378SAndroid Build Coastguard Worker                 mServerFlagValue,
148*20733378SAndroid Build Coastguard Worker                 mLocalFlagValue,
149*20733378SAndroid Build Coastguard Worker                 mBootFlagValue,
150*20733378SAndroid Build Coastguard Worker                 mDefaultFlagValue,
151*20733378SAndroid Build Coastguard Worker                 mHasServerOverride,
152*20733378SAndroid Build Coastguard Worker                 mHasLocalOverride,
153*20733378SAndroid Build Coastguard Worker                 mIsReadWrite);
154*20733378SAndroid Build Coastguard Worker     }
155*20733378SAndroid Build Coastguard Worker 
dump()156*20733378SAndroid Build Coastguard Worker     public String dump() {
157*20733378SAndroid Build Coastguard Worker         return String.format(
158*20733378SAndroid Build Coastguard Worker                 "packageName: %s, flagName: %s, serverFlagValue: %s, localFlagValue: %s,"
159*20733378SAndroid Build Coastguard Worker                         + " bootFlagValue: %s, defaultFlagValue: %s, hasServerOverride: %s,"
160*20733378SAndroid Build Coastguard Worker                         + " hasLocalOverride: %s, isReadWrite: %s",
161*20733378SAndroid Build Coastguard Worker                 mPackageName,
162*20733378SAndroid Build Coastguard Worker                 mFlagName,
163*20733378SAndroid Build Coastguard Worker                 mServerFlagValue,
164*20733378SAndroid Build Coastguard Worker                 mLocalFlagValue,
165*20733378SAndroid Build Coastguard Worker                 mBootFlagValue,
166*20733378SAndroid Build Coastguard Worker                 mDefaultFlagValue,
167*20733378SAndroid Build Coastguard Worker                 mHasServerOverride,
168*20733378SAndroid Build Coastguard Worker                 mHasLocalOverride,
169*20733378SAndroid Build Coastguard Worker                 mIsReadWrite);
170*20733378SAndroid Build Coastguard Worker     }
171*20733378SAndroid Build Coastguard Worker 
dumpDiff(AconfigdFlagInfo other)172*20733378SAndroid Build Coastguard Worker     public String dumpDiff(AconfigdFlagInfo other) {
173*20733378SAndroid Build Coastguard Worker         StringBuilder ret = new StringBuilder();
174*20733378SAndroid Build Coastguard Worker         if (!Objects.equals(mPackageName, other.mPackageName)) {
175*20733378SAndroid Build Coastguard Worker             ret.append(String.format("packageName: %s -> %s\n", mPackageName, other.mPackageName));
176*20733378SAndroid Build Coastguard Worker             return ret.toString();
177*20733378SAndroid Build Coastguard Worker         }
178*20733378SAndroid Build Coastguard Worker         if (!Objects.equals(mFlagName, other.mFlagName)) {
179*20733378SAndroid Build Coastguard Worker             ret.append(String.format("flagName: %s -> %s\n", mFlagName, other.mFlagName));
180*20733378SAndroid Build Coastguard Worker             return ret.toString();
181*20733378SAndroid Build Coastguard Worker         }
182*20733378SAndroid Build Coastguard Worker         if (!Objects.equals(mBootFlagValue, other.mBootFlagValue)) {
183*20733378SAndroid Build Coastguard Worker             ret.append(
184*20733378SAndroid Build Coastguard Worker                     String.format(
185*20733378SAndroid Build Coastguard Worker                             "bootFlagValue: %s -> %s\n", mBootFlagValue, other.mBootFlagValue));
186*20733378SAndroid Build Coastguard Worker         }
187*20733378SAndroid Build Coastguard Worker         if (!Objects.equals(mDefaultFlagValue, other.mDefaultFlagValue)) {
188*20733378SAndroid Build Coastguard Worker             ret.append(
189*20733378SAndroid Build Coastguard Worker                     String.format(
190*20733378SAndroid Build Coastguard Worker                             "defaultFlagValue: %s -> %s\n",
191*20733378SAndroid Build Coastguard Worker                             mDefaultFlagValue, other.mDefaultFlagValue));
192*20733378SAndroid Build Coastguard Worker         }
193*20733378SAndroid Build Coastguard Worker         if (mIsReadWrite != other.mIsReadWrite) {
194*20733378SAndroid Build Coastguard Worker             ret.append(String.format("isReadWrite: %s -> %s\n", mIsReadWrite, other.mIsReadWrite));
195*20733378SAndroid Build Coastguard Worker         }
196*20733378SAndroid Build Coastguard Worker         if (mIsReadWrite && other.mIsReadWrite) {
197*20733378SAndroid Build Coastguard Worker             if (!Objects.equals(mServerFlagValue, other.mServerFlagValue)) {
198*20733378SAndroid Build Coastguard Worker                 ret.append(
199*20733378SAndroid Build Coastguard Worker                         String.format(
200*20733378SAndroid Build Coastguard Worker                                 "serverFlagValue: %s -> %s\n",
201*20733378SAndroid Build Coastguard Worker                                 mServerFlagValue, other.mServerFlagValue));
202*20733378SAndroid Build Coastguard Worker             }
203*20733378SAndroid Build Coastguard Worker             if (!Objects.equals(mLocalFlagValue, other.mLocalFlagValue)) {
204*20733378SAndroid Build Coastguard Worker                 ret.append(
205*20733378SAndroid Build Coastguard Worker                         String.format(
206*20733378SAndroid Build Coastguard Worker                                 "localFlagValue: %s -> %s\n",
207*20733378SAndroid Build Coastguard Worker                                 mLocalFlagValue, other.mLocalFlagValue));
208*20733378SAndroid Build Coastguard Worker             }
209*20733378SAndroid Build Coastguard Worker             if (mHasServerOverride != other.mHasServerOverride) {
210*20733378SAndroid Build Coastguard Worker                 ret.append(
211*20733378SAndroid Build Coastguard Worker                         String.format(
212*20733378SAndroid Build Coastguard Worker                                 "hasServerOverride: %s -> %s\n",
213*20733378SAndroid Build Coastguard Worker                                 mHasServerOverride, other.mHasServerOverride));
214*20733378SAndroid Build Coastguard Worker             }
215*20733378SAndroid Build Coastguard Worker             if (mHasLocalOverride != other.mHasLocalOverride) {
216*20733378SAndroid Build Coastguard Worker                 ret.append(
217*20733378SAndroid Build Coastguard Worker                         String.format(
218*20733378SAndroid Build Coastguard Worker                                 "hasLocalOverride: %s -> %s\n",
219*20733378SAndroid Build Coastguard Worker                                 mHasLocalOverride, other.mHasLocalOverride));
220*20733378SAndroid Build Coastguard Worker             }
221*20733378SAndroid Build Coastguard Worker         }
222*20733378SAndroid Build Coastguard Worker         return ret.toString();
223*20733378SAndroid Build Coastguard Worker     }
224*20733378SAndroid Build Coastguard Worker 
newBuilder()225*20733378SAndroid Build Coastguard Worker     public static Builder newBuilder() {
226*20733378SAndroid Build Coastguard Worker         return new Builder();
227*20733378SAndroid Build Coastguard Worker     }
228*20733378SAndroid Build Coastguard Worker 
229*20733378SAndroid Build Coastguard Worker     public static class Builder {
230*20733378SAndroid Build Coastguard Worker         private String mPackageName;
231*20733378SAndroid Build Coastguard Worker         private String mFlagName;
232*20733378SAndroid Build Coastguard Worker         private String mServerFlagValue;
233*20733378SAndroid Build Coastguard Worker         private String mLocalFlagValue;
234*20733378SAndroid Build Coastguard Worker         private String mBootFlagValue;
235*20733378SAndroid Build Coastguard Worker         private String mDefaultFlagValue;
236*20733378SAndroid Build Coastguard Worker         private String mNamespace;
237*20733378SAndroid Build Coastguard Worker         private boolean mHasServerOverride;
238*20733378SAndroid Build Coastguard Worker         private boolean mHasLocalOverride;
239*20733378SAndroid Build Coastguard Worker         private boolean mIsReadWrite;
240*20733378SAndroid Build Coastguard Worker 
setPackageName(String packageName)241*20733378SAndroid Build Coastguard Worker         public Builder setPackageName(String packageName) {
242*20733378SAndroid Build Coastguard Worker             mPackageName = packageName;
243*20733378SAndroid Build Coastguard Worker             return this;
244*20733378SAndroid Build Coastguard Worker         }
245*20733378SAndroid Build Coastguard Worker 
setFlagName(String flagName)246*20733378SAndroid Build Coastguard Worker         public Builder setFlagName(String flagName) {
247*20733378SAndroid Build Coastguard Worker             mFlagName = flagName;
248*20733378SAndroid Build Coastguard Worker             return this;
249*20733378SAndroid Build Coastguard Worker         }
250*20733378SAndroid Build Coastguard Worker 
setServerFlagValue(String serverFlagValue)251*20733378SAndroid Build Coastguard Worker         public Builder setServerFlagValue(String serverFlagValue) {
252*20733378SAndroid Build Coastguard Worker             mServerFlagValue = nullOrEmpty(serverFlagValue) ? null : serverFlagValue;
253*20733378SAndroid Build Coastguard Worker             return this;
254*20733378SAndroid Build Coastguard Worker         }
255*20733378SAndroid Build Coastguard Worker 
setLocalFlagValue(String localFlagValue)256*20733378SAndroid Build Coastguard Worker         public Builder setLocalFlagValue(String localFlagValue) {
257*20733378SAndroid Build Coastguard Worker             mLocalFlagValue = nullOrEmpty(localFlagValue) ? null : localFlagValue;
258*20733378SAndroid Build Coastguard Worker             return this;
259*20733378SAndroid Build Coastguard Worker         }
260*20733378SAndroid Build Coastguard Worker 
setBootFlagValue(String bootFlagValue)261*20733378SAndroid Build Coastguard Worker         public Builder setBootFlagValue(String bootFlagValue) {
262*20733378SAndroid Build Coastguard Worker             mBootFlagValue = nullOrEmpty(bootFlagValue) ? null : bootFlagValue;
263*20733378SAndroid Build Coastguard Worker             return this;
264*20733378SAndroid Build Coastguard Worker         }
265*20733378SAndroid Build Coastguard Worker 
setDefaultFlagValue(String defaultFlagValue)266*20733378SAndroid Build Coastguard Worker         public Builder setDefaultFlagValue(String defaultFlagValue) {
267*20733378SAndroid Build Coastguard Worker             mDefaultFlagValue = nullOrEmpty(defaultFlagValue) ? null : defaultFlagValue;
268*20733378SAndroid Build Coastguard Worker             return this;
269*20733378SAndroid Build Coastguard Worker         }
270*20733378SAndroid Build Coastguard Worker 
setNamespace(String namespace)271*20733378SAndroid Build Coastguard Worker         public Builder setNamespace(String namespace) {
272*20733378SAndroid Build Coastguard Worker             mNamespace = namespace;
273*20733378SAndroid Build Coastguard Worker             return this;
274*20733378SAndroid Build Coastguard Worker         }
275*20733378SAndroid Build Coastguard Worker 
setHasServerOverride(boolean hasServerOverride)276*20733378SAndroid Build Coastguard Worker         public Builder setHasServerOverride(boolean hasServerOverride) {
277*20733378SAndroid Build Coastguard Worker             mHasServerOverride = hasServerOverride;
278*20733378SAndroid Build Coastguard Worker             return this;
279*20733378SAndroid Build Coastguard Worker         }
280*20733378SAndroid Build Coastguard Worker 
setHasLocalOverride(boolean hasLocalOverride)281*20733378SAndroid Build Coastguard Worker         public Builder setHasLocalOverride(boolean hasLocalOverride) {
282*20733378SAndroid Build Coastguard Worker             mHasLocalOverride = hasLocalOverride;
283*20733378SAndroid Build Coastguard Worker             return this;
284*20733378SAndroid Build Coastguard Worker         }
285*20733378SAndroid Build Coastguard Worker 
setIsReadWrite(boolean isReadWrite)286*20733378SAndroid Build Coastguard Worker         public Builder setIsReadWrite(boolean isReadWrite) {
287*20733378SAndroid Build Coastguard Worker             mIsReadWrite = isReadWrite;
288*20733378SAndroid Build Coastguard Worker             return this;
289*20733378SAndroid Build Coastguard Worker         }
290*20733378SAndroid Build Coastguard Worker 
build()291*20733378SAndroid Build Coastguard Worker         public AconfigdFlagInfo build() {
292*20733378SAndroid Build Coastguard Worker             return new AconfigdFlagInfo(this);
293*20733378SAndroid Build Coastguard Worker         }
294*20733378SAndroid Build Coastguard Worker 
nullOrEmpty(String str)295*20733378SAndroid Build Coastguard Worker         private boolean nullOrEmpty(String str) {
296*20733378SAndroid Build Coastguard Worker             return str == null || str.isEmpty();
297*20733378SAndroid Build Coastguard Worker         }
298*20733378SAndroid Build Coastguard Worker     }
299*20733378SAndroid Build Coastguard Worker }
300