1 /* 2 * Copyright (C) 2022 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 com.android.internal.pm.pkg.component; 18 19 import static java.util.Collections.emptySet; 20 21 import android.annotation.NonNull; 22 import android.content.pm.ApplicationInfo; 23 import android.os.Parcel; 24 import android.os.Parcelable; 25 import android.util.ArrayMap; 26 import android.util.ArraySet; 27 28 import com.android.internal.util.CollectionUtils; 29 import com.android.internal.util.DataClass; 30 import com.android.internal.util.Parcelling; 31 32 import java.util.Set; 33 34 /** @hide */ 35 @DataClass(genGetters = true, genSetters = true, genParcelable = true, genAidl = false, 36 genBuilder = false) 37 public class ParsedProcessImpl implements ParsedProcess, Parcelable { 38 39 @NonNull 40 private String name; 41 42 /** @see ParsedProcess#getAppClassNamesByPackage() */ 43 @NonNull 44 private ArrayMap<String, String> appClassNamesByPackage = ArrayMap.EMPTY; 45 46 @NonNull 47 @DataClass.ParcelWith(Parcelling.BuiltIn.ForInternedStringSet.class) 48 private Set<String> deniedPermissions = emptySet(); 49 50 @ApplicationInfo.GwpAsanMode 51 private int gwpAsanMode = ApplicationInfo.GWP_ASAN_DEFAULT; 52 @ApplicationInfo.MemtagMode 53 private int memtagMode = ApplicationInfo.MEMTAG_DEFAULT; 54 @ApplicationInfo.NativeHeapZeroInitialized 55 private int nativeHeapZeroInitialized = ApplicationInfo.ZEROINIT_DEFAULT; 56 57 private boolean useEmbeddedDex; 58 ParsedProcessImpl()59 public ParsedProcessImpl() { 60 } 61 ParsedProcessImpl(@onNull ParsedProcess other)62 public ParsedProcessImpl(@NonNull ParsedProcess other) { 63 name = other.getName(); 64 appClassNamesByPackage = (other.getAppClassNamesByPackage().size() == 0) 65 ? ArrayMap.EMPTY : new ArrayMap<>(other.getAppClassNamesByPackage()); 66 deniedPermissions = new ArraySet<>(other.getDeniedPermissions()); 67 gwpAsanMode = other.getGwpAsanMode(); 68 memtagMode = other.getMemtagMode(); 69 nativeHeapZeroInitialized = other.getNativeHeapZeroInitialized(); 70 useEmbeddedDex = other.isUseEmbeddedDex(); 71 } 72 addStateFrom(@onNull ParsedProcess other)73 public void addStateFrom(@NonNull ParsedProcess other) { 74 deniedPermissions = CollectionUtils.addAll(deniedPermissions, other.getDeniedPermissions()); 75 gwpAsanMode = other.getGwpAsanMode(); 76 memtagMode = other.getMemtagMode(); 77 nativeHeapZeroInitialized = other.getNativeHeapZeroInitialized(); 78 useEmbeddedDex = other.isUseEmbeddedDex(); 79 80 final ArrayMap<String, String> oacn = other.getAppClassNamesByPackage(); 81 for (int i = 0; i < oacn.size(); i++) { 82 appClassNamesByPackage.put(oacn.keyAt(i), oacn.valueAt(i)); 83 } 84 } 85 86 /** 87 * Sets a custom application name used in this process for a given package. 88 */ putAppClassNameForPackage(String packageName, String className)89 public void putAppClassNameForPackage(String packageName, String className) { 90 if (appClassNamesByPackage.size() == 0) { 91 appClassNamesByPackage = new ArrayMap<>(4); 92 } 93 appClassNamesByPackage.put(packageName, className); 94 } 95 96 97 98 // Code below generated by codegen v1.0.23. 99 // 100 // DO NOT MODIFY! 101 // CHECKSTYLE:OFF Generated code 102 // 103 // To regenerate run: 104 // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/com/android/internal/pm/pkg/component/ParsedProcessImpl.java 105 // 106 // To exclude the generated code from IntelliJ auto-formatting enable (one-time): 107 // Settings > Editor > Code Style > Formatter Control 108 //@formatter:off 109 110 111 /** 112 * Creates a new ParsedProcessImpl. 113 * 114 */ 115 @DataClass.Generated.Member ParsedProcessImpl( @onNull String name, @NonNull ArrayMap<String,String> appClassNamesByPackage, @NonNull Set<String> deniedPermissions, @ApplicationInfo.GwpAsanMode int gwpAsanMode, @ApplicationInfo.MemtagMode int memtagMode, @ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized, boolean useEmbeddedDex)116 public ParsedProcessImpl( 117 @NonNull String name, 118 @NonNull ArrayMap<String,String> appClassNamesByPackage, 119 @NonNull Set<String> deniedPermissions, 120 @ApplicationInfo.GwpAsanMode int gwpAsanMode, 121 @ApplicationInfo.MemtagMode int memtagMode, 122 @ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized, 123 boolean useEmbeddedDex) { 124 this.name = name; 125 com.android.internal.util.AnnotationValidations.validate( 126 NonNull.class, null, name); 127 this.appClassNamesByPackage = appClassNamesByPackage; 128 com.android.internal.util.AnnotationValidations.validate( 129 NonNull.class, null, appClassNamesByPackage); 130 this.deniedPermissions = deniedPermissions; 131 com.android.internal.util.AnnotationValidations.validate( 132 NonNull.class, null, deniedPermissions); 133 this.gwpAsanMode = gwpAsanMode; 134 com.android.internal.util.AnnotationValidations.validate( 135 ApplicationInfo.GwpAsanMode.class, null, gwpAsanMode); 136 this.memtagMode = memtagMode; 137 com.android.internal.util.AnnotationValidations.validate( 138 ApplicationInfo.MemtagMode.class, null, memtagMode); 139 this.nativeHeapZeroInitialized = nativeHeapZeroInitialized; 140 com.android.internal.util.AnnotationValidations.validate( 141 ApplicationInfo.NativeHeapZeroInitialized.class, null, nativeHeapZeroInitialized); 142 this.useEmbeddedDex = useEmbeddedDex; 143 144 // onConstructed(); // You can define this method to get a callback 145 } 146 147 @DataClass.Generated.Member getName()148 public @NonNull String getName() { 149 return name; 150 } 151 152 /** 153 * @see ParsedProcess#getAppClassNamesByPackage() 154 */ 155 @DataClass.Generated.Member getAppClassNamesByPackage()156 public @NonNull ArrayMap<String,String> getAppClassNamesByPackage() { 157 return appClassNamesByPackage; 158 } 159 160 @DataClass.Generated.Member getDeniedPermissions()161 public @NonNull Set<String> getDeniedPermissions() { 162 return deniedPermissions; 163 } 164 165 @DataClass.Generated.Member getGwpAsanMode()166 public @ApplicationInfo.GwpAsanMode int getGwpAsanMode() { 167 return gwpAsanMode; 168 } 169 170 @DataClass.Generated.Member getMemtagMode()171 public @ApplicationInfo.MemtagMode int getMemtagMode() { 172 return memtagMode; 173 } 174 175 @DataClass.Generated.Member getNativeHeapZeroInitialized()176 public @ApplicationInfo.NativeHeapZeroInitialized int getNativeHeapZeroInitialized() { 177 return nativeHeapZeroInitialized; 178 } 179 180 @DataClass.Generated.Member isUseEmbeddedDex()181 public boolean isUseEmbeddedDex() { 182 return useEmbeddedDex; 183 } 184 185 @DataClass.Generated.Member setName(@onNull String value)186 public @NonNull ParsedProcessImpl setName(@NonNull String value) { 187 name = value; 188 com.android.internal.util.AnnotationValidations.validate( 189 NonNull.class, null, name); 190 return this; 191 } 192 193 /** 194 * @see ParsedProcess#getAppClassNamesByPackage() 195 */ 196 @DataClass.Generated.Member setAppClassNamesByPackage(@onNull ArrayMap<String,String> value)197 public @NonNull ParsedProcessImpl setAppClassNamesByPackage(@NonNull ArrayMap<String,String> value) { 198 appClassNamesByPackage = value; 199 com.android.internal.util.AnnotationValidations.validate( 200 NonNull.class, null, appClassNamesByPackage); 201 return this; 202 } 203 204 @DataClass.Generated.Member setDeniedPermissions(@onNull Set<String> value)205 public @NonNull ParsedProcessImpl setDeniedPermissions(@NonNull Set<String> value) { 206 deniedPermissions = value; 207 com.android.internal.util.AnnotationValidations.validate( 208 NonNull.class, null, deniedPermissions); 209 return this; 210 } 211 212 @DataClass.Generated.Member setGwpAsanMode(@pplicationInfo.GwpAsanMode int value)213 public @NonNull ParsedProcessImpl setGwpAsanMode(@ApplicationInfo.GwpAsanMode int value) { 214 gwpAsanMode = value; 215 com.android.internal.util.AnnotationValidations.validate( 216 ApplicationInfo.GwpAsanMode.class, null, gwpAsanMode); 217 return this; 218 } 219 220 @DataClass.Generated.Member setMemtagMode(@pplicationInfo.MemtagMode int value)221 public @NonNull ParsedProcessImpl setMemtagMode(@ApplicationInfo.MemtagMode int value) { 222 memtagMode = value; 223 com.android.internal.util.AnnotationValidations.validate( 224 ApplicationInfo.MemtagMode.class, null, memtagMode); 225 return this; 226 } 227 228 @DataClass.Generated.Member setNativeHeapZeroInitialized(@pplicationInfo.NativeHeapZeroInitialized int value)229 public @NonNull ParsedProcessImpl setNativeHeapZeroInitialized(@ApplicationInfo.NativeHeapZeroInitialized int value) { 230 nativeHeapZeroInitialized = value; 231 com.android.internal.util.AnnotationValidations.validate( 232 ApplicationInfo.NativeHeapZeroInitialized.class, null, nativeHeapZeroInitialized); 233 return this; 234 } 235 236 @DataClass.Generated.Member setUseEmbeddedDex( boolean value)237 public @NonNull ParsedProcessImpl setUseEmbeddedDex( boolean value) { 238 useEmbeddedDex = value; 239 return this; 240 } 241 242 @DataClass.Generated.Member 243 static Parcelling<Set<String>> sParcellingForDeniedPermissions = 244 Parcelling.Cache.get( 245 Parcelling.BuiltIn.ForInternedStringSet.class); 246 static { 247 if (sParcellingForDeniedPermissions == null) { 248 sParcellingForDeniedPermissions = Parcelling.Cache.put( 249 new Parcelling.BuiltIn.ForInternedStringSet()); 250 } 251 } 252 253 @Override 254 @DataClass.Generated.Member writeToParcel(@onNull Parcel dest, int flags)255 public void writeToParcel(@NonNull Parcel dest, int flags) { 256 // You can override field parcelling by defining methods like: 257 // void parcelFieldName(Parcel dest, int flags) { ... } 258 259 byte flg = 0; 260 if (useEmbeddedDex) flg |= 0x40; 261 dest.writeByte(flg); 262 dest.writeString(name); 263 dest.writeMap(appClassNamesByPackage); 264 sParcellingForDeniedPermissions.parcel(deniedPermissions, dest, flags); 265 dest.writeInt(gwpAsanMode); 266 dest.writeInt(memtagMode); 267 dest.writeInt(nativeHeapZeroInitialized); 268 } 269 270 @Override 271 @DataClass.Generated.Member describeContents()272 public int describeContents() { return 0; } 273 274 /** @hide */ 275 @SuppressWarnings({"unchecked", "RedundantCast"}) 276 @DataClass.Generated.Member ParsedProcessImpl(@onNull Parcel in)277 protected ParsedProcessImpl(@NonNull Parcel in) { 278 // You can override field unparcelling by defining methods like: 279 // static FieldType unparcelFieldName(Parcel in) { ... } 280 281 byte flg = in.readByte(); 282 boolean _useEmbeddedDex = (flg & 0x40) != 0; 283 String _name = in.readString(); 284 ArrayMap<String,String> _appClassNamesByPackage = new ArrayMap(); 285 in.readMap(_appClassNamesByPackage, String.class.getClassLoader()); 286 Set<String> _deniedPermissions = sParcellingForDeniedPermissions.unparcel(in); 287 int _gwpAsanMode = in.readInt(); 288 int _memtagMode = in.readInt(); 289 int _nativeHeapZeroInitialized = in.readInt(); 290 291 this.name = _name; 292 com.android.internal.util.AnnotationValidations.validate( 293 NonNull.class, null, name); 294 this.appClassNamesByPackage = _appClassNamesByPackage; 295 com.android.internal.util.AnnotationValidations.validate( 296 NonNull.class, null, appClassNamesByPackage); 297 this.deniedPermissions = _deniedPermissions; 298 com.android.internal.util.AnnotationValidations.validate( 299 NonNull.class, null, deniedPermissions); 300 this.gwpAsanMode = _gwpAsanMode; 301 com.android.internal.util.AnnotationValidations.validate( 302 ApplicationInfo.GwpAsanMode.class, null, gwpAsanMode); 303 this.memtagMode = _memtagMode; 304 com.android.internal.util.AnnotationValidations.validate( 305 ApplicationInfo.MemtagMode.class, null, memtagMode); 306 this.nativeHeapZeroInitialized = _nativeHeapZeroInitialized; 307 com.android.internal.util.AnnotationValidations.validate( 308 ApplicationInfo.NativeHeapZeroInitialized.class, null, nativeHeapZeroInitialized); 309 this.useEmbeddedDex = _useEmbeddedDex; 310 311 // onConstructed(); // You can define this method to get a callback 312 } 313 314 @DataClass.Generated.Member 315 public static final @NonNull Parcelable.Creator<ParsedProcessImpl> CREATOR 316 = new Parcelable.Creator<ParsedProcessImpl>() { 317 @Override 318 public ParsedProcessImpl[] newArray(int size) { 319 return new ParsedProcessImpl[size]; 320 } 321 322 @Override 323 public ParsedProcessImpl createFromParcel(@NonNull Parcel in) { 324 return new ParsedProcessImpl(in); 325 } 326 }; 327 328 @DataClass.Generated( 329 time = 1706177189475L, 330 codegenVersion = "1.0.23", 331 sourceFile = "frameworks/base/core/java/com/android/internal/pm/pkg/component/ParsedProcessImpl.java", 332 inputSignatures = "private @android.annotation.NonNull java.lang.String name\nprivate @android.annotation.NonNull android.util.ArrayMap<java.lang.String,java.lang.String> appClassNamesByPackage\nprivate @android.annotation.NonNull @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedStringSet.class) java.util.Set<java.lang.String> deniedPermissions\nprivate @android.content.pm.ApplicationInfo.GwpAsanMode int gwpAsanMode\nprivate @android.content.pm.ApplicationInfo.MemtagMode int memtagMode\nprivate @android.content.pm.ApplicationInfo.NativeHeapZeroInitialized int nativeHeapZeroInitialized\nprivate boolean useEmbeddedDex\npublic void addStateFrom(com.android.internal.pm.pkg.component.ParsedProcess)\npublic void putAppClassNameForPackage(java.lang.String,java.lang.String)\nclass ParsedProcessImpl extends java.lang.Object implements [com.android.internal.pm.pkg.component.ParsedProcess, android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=true, genParcelable=true, genAidl=false, genBuilder=false)") 333 @Deprecated __metadata()334 private void __metadata() {} 335 336 337 //@formatter:on 338 // End of generated code 339 340 } 341