blob: be1817d0915597e37db3edef74dcf93c4a1da4dc [file] [log] [blame]
Winson01e38f42020-01-24 11:50:11 -08001/*
2 * Copyright (C) 2020 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
17package android.content.pm.parsing;
18
Winson01e38f42020-01-24 11:50:11 -080019import static java.util.Collections.emptyList;
20import static java.util.Collections.emptyMap;
21import static java.util.Collections.emptySet;
22
23import android.annotation.NonNull;
24import android.annotation.Nullable;
25import android.content.Intent;
26import android.content.IntentFilter;
27import android.content.pm.ApplicationInfo;
28import android.content.pm.ConfigurationInfo;
29import android.content.pm.FeatureGroupInfo;
30import android.content.pm.FeatureInfo;
31import android.content.pm.PackageInfo;
32import android.content.pm.PackageParser;
Winsonf00c7552020-01-28 12:52:01 -080033import android.content.pm.parsing.component.ParsedActivity;
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -080034import android.content.pm.parsing.component.ParsedAttribution;
Winsonf00c7552020-01-28 12:52:01 -080035import android.content.pm.parsing.component.ParsedComponent;
Winsonf00c7552020-01-28 12:52:01 -080036import android.content.pm.parsing.component.ParsedInstrumentation;
37import android.content.pm.parsing.component.ParsedIntentInfo;
38import android.content.pm.parsing.component.ParsedMainComponent;
39import android.content.pm.parsing.component.ParsedPermission;
40import android.content.pm.parsing.component.ParsedPermissionGroup;
41import android.content.pm.parsing.component.ParsedProcess;
42import android.content.pm.parsing.component.ParsedProvider;
43import android.content.pm.parsing.component.ParsedService;
Winson01e38f42020-01-24 11:50:11 -080044import android.content.res.TypedArray;
45import android.os.Build;
46import android.os.Bundle;
47import android.os.Parcel;
48import android.os.Parcelable;
49import android.os.storage.StorageManager;
50import android.text.TextUtils;
51import android.util.ArraySet;
Winsonf00c7552020-01-28 12:52:01 -080052import android.util.Pair;
Winson01e38f42020-01-24 11:50:11 -080053import android.util.SparseArray;
54
55import com.android.internal.R;
56import com.android.internal.annotations.VisibleForTesting;
57import com.android.internal.util.ArrayUtils;
58import com.android.internal.util.CollectionUtils;
59import com.android.internal.util.DataClass;
60import com.android.internal.util.Parcelling;
61import com.android.internal.util.Parcelling.BuiltIn.ForBoolean;
62import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
63import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringArray;
64import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringList;
Winson01e38f42020-01-24 11:50:11 -080065import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringSet;
Winsonf00c7552020-01-28 12:52:01 -080066import com.android.internal.util.Parcelling.BuiltIn.ForInternedStringValueMap;
Winsondec01d62020-02-21 10:44:58 -080067import com.android.internal.util.Parcelling.BuiltIn.ForStringSet;
Winson01e38f42020-01-24 11:50:11 -080068
69import java.security.PublicKey;
70import java.util.Collections;
Winsonf00c7552020-01-28 12:52:01 -080071import java.util.Comparator;
Winson01e38f42020-01-24 11:50:11 -080072import java.util.List;
73import java.util.Map;
74import java.util.Set;
75
76/**
77 * The backing data for a package that was parsed from disk.
78 *
79 * The field nullability annotations here are for internal reference. For effective nullability,
80 * see the parent interfaces.
81 *
82 * TODO(b/135203078): Convert Lists used as sets into Sets, to better express intended use case
83 *
84 * @hide
85 */
86public class ParsingPackageImpl implements ParsingPackage, Parcelable {
87
88 private static final String TAG = "PackageImpl";
89
Winson022e7072020-01-28 10:52:58 -080090 public static ForBoolean sForBoolean = Parcelling.Cache.getOrCreate(ForBoolean.class);
Winsondec01d62020-02-21 10:44:58 -080091 public static ForInternedString sForInternedString = Parcelling.Cache.getOrCreate(
Winson01e38f42020-01-24 11:50:11 -080092 ForInternedString.class);
Winsondec01d62020-02-21 10:44:58 -080093 public static ForInternedStringArray sForInternedStringArray = Parcelling.Cache.getOrCreate(
Winson01e38f42020-01-24 11:50:11 -080094 ForInternedStringArray.class);
Winsondec01d62020-02-21 10:44:58 -080095 public static ForInternedStringList sForInternedStringList = Parcelling.Cache.getOrCreate(
Winson01e38f42020-01-24 11:50:11 -080096 ForInternedStringList.class);
Winsondec01d62020-02-21 10:44:58 -080097 public static ForInternedStringValueMap sForInternedStringValueMap =
98 Parcelling.Cache.getOrCreate(ForInternedStringValueMap.class);
99 public static ForStringSet sForStringSet = Parcelling.Cache.getOrCreate(ForStringSet.class);
Winsonf00c7552020-01-28 12:52:01 -0800100 protected static ParsedIntentInfo.StringPairListParceler sForIntentInfoPairs =
101 Parcelling.Cache.getOrCreate(ParsedIntentInfo.StringPairListParceler.class);
102
103 private static final Comparator<ParsedMainComponent> ORDER_COMPARATOR =
104 (first, second) -> Integer.compare(second.getOrder(), first.getOrder());
Winson01e38f42020-01-24 11:50:11 -0800105
106 // These are objects because null represents not explicitly set
107 @Nullable
108 @DataClass.ParcelWith(ForBoolean.class)
109 private Boolean supportsSmallScreens;
110 @Nullable
111 @DataClass.ParcelWith(ForBoolean.class)
112 private Boolean supportsNormalScreens;
113 @Nullable
114 @DataClass.ParcelWith(ForBoolean.class)
115 private Boolean supportsLargeScreens;
116 @Nullable
117 @DataClass.ParcelWith(ForBoolean.class)
118 private Boolean supportsExtraLargeScreens;
119 @Nullable
120 @DataClass.ParcelWith(ForBoolean.class)
121 private Boolean resizeable;
122 @Nullable
123 @DataClass.ParcelWith(ForBoolean.class)
124 private Boolean anyDensity;
125
126 protected int versionCode;
127 protected int versionCodeMajor;
128 private int baseRevisionCode;
129 @Nullable
130 @DataClass.ParcelWith(ForInternedString.class)
131 private String versionName;
132
133 private int compileSdkVersion;
134 @Nullable
135 @DataClass.ParcelWith(ForInternedString.class)
136 private String compileSdkVersionCodeName;
137
138 @NonNull
139 @DataClass.ParcelWith(ForInternedString.class)
140 protected String packageName;
141
142 @Nullable
143 @DataClass.ParcelWith(ForInternedString.class)
144 private String realPackage;
145
146 @NonNull
147 protected String baseCodePath;
148
149 private boolean requiredForAllUsers;
150 @Nullable
151 @DataClass.ParcelWith(ForInternedString.class)
152 private String restrictedAccountType;
153 @Nullable
154 @DataClass.ParcelWith(ForInternedString.class)
155 private String requiredAccountType;
156
157 @Nullable
158 @DataClass.ParcelWith(ForInternedString.class)
159 private String overlayTarget;
160 @Nullable
161 @DataClass.ParcelWith(ForInternedString.class)
162 private String overlayTargetName;
163 @Nullable
164 @DataClass.ParcelWith(ForInternedString.class)
165 private String overlayCategory;
166 private int overlayPriority;
167 private boolean overlayIsStatic;
168 @NonNull
Winsone23ae202020-01-24 11:56:44 -0800169 @DataClass.ParcelWith(ForInternedStringValueMap.class)
Winson01e38f42020-01-24 11:50:11 -0800170 private Map<String, String> overlayables = emptyMap();
171
172 @Nullable
173 @DataClass.ParcelWith(ForInternedString.class)
174 private String staticSharedLibName;
175 private long staticSharedLibVersion;
176 @NonNull
177 @DataClass.ParcelWith(ForInternedStringList.class)
178 private List<String> libraryNames = emptyList();
179 @NonNull
180 @DataClass.ParcelWith(ForInternedStringList.class)
181 protected List<String> usesLibraries = emptyList();
182 @NonNull
183 @DataClass.ParcelWith(ForInternedStringList.class)
184 protected List<String> usesOptionalLibraries = emptyList();
185
186 @NonNull
187 @DataClass.ParcelWith(ForInternedStringList.class)
188 private List<String> usesStaticLibraries = emptyList();
189 @Nullable
190 private long[] usesStaticLibrariesVersions;
191
192 @Nullable
193 private String[][] usesStaticLibrariesCertDigests;
194
195 @Nullable
196 @DataClass.ParcelWith(ForInternedString.class)
197 private String sharedUserId;
198
199 private int sharedUserLabel;
200 @NonNull
201 private List<ConfigurationInfo> configPreferences = emptyList();
202 @NonNull
203 private List<FeatureInfo> reqFeatures = emptyList();
204 @NonNull
205 private List<FeatureGroupInfo> featureGroups = emptyList();
206
207 @Nullable
208 private byte[] restrictUpdateHash;
209
210 @NonNull
211 @DataClass.ParcelWith(ForInternedStringList.class)
212 protected List<String> originalPackages = emptyList();
213 @NonNull
214 @DataClass.ParcelWith(ForInternedStringList.class)
215 protected List<String> adoptPermissions = emptyList();
216
217 @NonNull
218 @DataClass.ParcelWith(ForInternedStringList.class)
219 private List<String> requestedPermissions = emptyList();
220 @NonNull
221 @DataClass.ParcelWith(ForInternedStringList.class)
222 private List<String> implicitPermissions = emptyList();
223
224 @NonNull
225 private Set<String> upgradeKeySets = emptySet();
226 @NonNull
227 private Map<String, ArraySet<PublicKey>> keySetMapping = emptyMap();
228
229 @NonNull
230 @DataClass.ParcelWith(ForInternedStringList.class)
231 protected List<String> protectedBroadcasts = emptyList();
232
233 @NonNull
234 protected List<ParsedActivity> activities = emptyList();
235
236 @NonNull
237 protected List<ParsedActivity> receivers = emptyList();
238
239 @NonNull
240 protected List<ParsedService> services = emptyList();
241
242 @NonNull
243 protected List<ParsedProvider> providers = emptyList();
244
245 @NonNull
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -0800246 private List<ParsedAttribution> attributions = emptyList();
Winson01e38f42020-01-24 11:50:11 -0800247
248 @NonNull
249 protected List<ParsedPermission> permissions = emptyList();
250
251 @NonNull
252 protected List<ParsedPermissionGroup> permissionGroups = emptyList();
253
254 @NonNull
255 protected List<ParsedInstrumentation> instrumentations = emptyList();
256
257 @NonNull
Winsonf00c7552020-01-28 12:52:01 -0800258 @DataClass.ParcelWith(ParsedIntentInfo.ListParceler.class)
259 private List<Pair<String, ParsedIntentInfo>> preferredActivityFilters = emptyList();
Winson01e38f42020-01-24 11:50:11 -0800260
261 @NonNull
262 private Map<String, ParsedProcess> processes = emptyMap();
263
264 @Nullable
265 private Bundle metaData;
266
267 @Nullable
268 @DataClass.ParcelWith(ForInternedString.class)
269 protected String volumeUuid;
270 @Nullable
271 private PackageParser.SigningDetails signingDetails;
272
273 @NonNull
274 @DataClass.ParcelWith(ForInternedString.class)
275 protected String codePath;
276
277 private boolean use32BitAbi;
278 private boolean visibleToInstantApps;
279
280 private boolean forceQueryable;
281
282 @NonNull
283 @DataClass.ParcelWith(ForInternedStringList.class)
284 private List<Intent> queriesIntents = emptyList();
285
286 @NonNull
287 @DataClass.ParcelWith(ForInternedStringList.class)
288 private List<String> queriesPackages = emptyList();
289
290 @NonNull
291 @DataClass.ParcelWith(ForInternedStringSet.class)
292 private Set<String> queriesProviders = emptySet();
293
294 @Nullable
295 @DataClass.ParcelWith(ForInternedStringArray.class)
296 private String[] splitClassLoaderNames;
297 @Nullable
298 protected String[] splitCodePaths;
299 @Nullable
300 private SparseArray<int[]> splitDependencies;
301 @Nullable
302 private int[] splitFlags;
303 @Nullable
304 @DataClass.ParcelWith(ForInternedStringArray.class)
305 private String[] splitNames;
306 @Nullable
307 private int[] splitRevisionCodes;
308
309 @Nullable
310 @DataClass.ParcelWith(ForInternedString.class)
311 private String appComponentFactory;
312 @Nullable
313 @DataClass.ParcelWith(ForInternedString.class)
314 private String backupAgentName;
315 private int banner;
316 private int category;
317 @Nullable
318 @DataClass.ParcelWith(ForInternedString.class)
319 private String classLoaderName;
320 @Nullable
321 @DataClass.ParcelWith(ForInternedString.class)
322 private String className;
323 private int compatibleWidthLimitDp;
324 private int descriptionRes;
Winson46882532020-04-02 12:16:13 -0700325
326 // Usually there's code to set this to true during parsing, but it's possible to install an APK
327 // targeting <R that doesn't contain an <application> tag. That code would be skipped and never
328 // assign this, so initialize this to true for those cases.
329 private boolean enabled = true;
330
Winson01e38f42020-01-24 11:50:11 -0800331 private boolean crossProfile;
332 private int fullBackupContent;
333 private int iconRes;
334 private int installLocation = PackageParser.PARSE_DEFAULT_INSTALL_LOCATION;
335 private int labelRes;
336 private int largestWidthLimitDp;
337 private int logo;
338 @Nullable
339 @DataClass.ParcelWith(ForInternedString.class)
340 private String manageSpaceActivityName;
341 private float maxAspectRatio;
342 private float minAspectRatio;
343 private int minSdkVersion;
344 private int networkSecurityConfigRes;
345 @Nullable
346 private CharSequence nonLocalizedLabel;
347 @Nullable
348 @DataClass.ParcelWith(ForInternedString.class)
349 private String permission;
350 @Nullable
351 @DataClass.ParcelWith(ForInternedString.class)
352 private String processName;
353 private int requiresSmallestWidthDp;
354 private int roundIconRes;
355 private int targetSandboxVersion;
356 private int targetSdkVersion;
357 @Nullable
358 @DataClass.ParcelWith(ForInternedString.class)
359 private String taskAffinity;
360 private int theme;
361
362 private int uiOptions;
363 @Nullable
364 @DataClass.ParcelWith(ForInternedString.class)
365 private String zygotePreloadName;
366
367 private boolean externalStorage;
368 private boolean baseHardwareAccelerated;
369 private boolean allowBackup;
370 private boolean killAfterRestore;
371 private boolean restoreAnyVersion;
372 private boolean fullBackupOnly;
373 private boolean persistent;
374 private boolean debuggable;
375 private boolean vmSafeMode;
376 private boolean hasCode;
377 private boolean allowTaskReparenting;
378 private boolean allowClearUserData;
379 private boolean largeHeap;
380 private boolean usesCleartextTraffic;
381 private boolean supportsRtl;
382 private boolean testOnly;
383 private boolean multiArch;
384 private boolean extractNativeLibs;
385 private boolean game;
386
387 /**
388 * @see ParsingPackageRead#getResizeableActivity()
389 */
390 @Nullable
391 @DataClass.ParcelWith(ForBoolean.class)
392 private Boolean resizeableActivity;
393
394 private boolean staticSharedLibrary;
395 private boolean overlay;
396 private boolean isolatedSplitLoading;
397 private boolean hasDomainUrls;
398 private boolean profileableByShell;
399 private boolean backupInForeground;
400 private boolean useEmbeddedDex;
401 private boolean defaultToDeviceProtectedStorage;
402 private boolean directBootAware;
403 private boolean partiallyDirectBootAware;
404 private boolean resizeableActivityViaSdkVersion;
405 private boolean allowClearUserDataOnFailedRestore;
406 private boolean allowAudioPlaybackCapture;
407 private boolean requestLegacyExternalStorage;
408 private boolean usesNonSdkApi;
409 private boolean hasFragileUserData;
410 private boolean cantSaveState;
411 private boolean allowNativeHeapPointerTagging;
Eugene Susla49b84c32020-03-23 15:19:29 -0700412 private int autoRevokePermissions;
Winson01e38f42020-01-24 11:50:11 -0800413 private boolean preserveLegacyExternalStorage;
414
Evgenii Stepanovd43d1092020-03-16 13:55:42 -0700415 protected int gwpAsanMode;
Evgenii Stepanov102d3d82020-02-12 16:48:14 -0800416
Winson01e38f42020-01-24 11:50:11 -0800417 // TODO(chiuwinson): Non-null
418 @Nullable
419 private ArraySet<String> mimeGroups;
420
421 @VisibleForTesting
422 public ParsingPackageImpl(@NonNull String packageName, @NonNull String baseCodePath,
423 @NonNull String codePath, @Nullable TypedArray manifestArray) {
424 this.packageName = TextUtils.safeIntern(packageName);
Winsondec01d62020-02-21 10:44:58 -0800425 this.baseCodePath = baseCodePath;
426 this.codePath = codePath;
Winson01e38f42020-01-24 11:50:11 -0800427
428 if (manifestArray != null) {
429 versionCode = manifestArray.getInteger(R.styleable.AndroidManifest_versionCode, 0);
430 versionCodeMajor = manifestArray.getInteger(
431 R.styleable.AndroidManifest_versionCodeMajor, 0);
432 setBaseRevisionCode(
433 manifestArray.getInteger(R.styleable.AndroidManifest_revisionCode, 0));
434 setVersionName(manifestArray.getNonConfigurationString(
435 R.styleable.AndroidManifest_versionName, 0));
436
437 setCompileSdkVersion(manifestArray.getInteger(
438 R.styleable.AndroidManifest_compileSdkVersion, 0));
439 setCompileSdkVersionCodename(manifestArray.getNonConfigurationString(
440 R.styleable.AndroidManifest_compileSdkVersionCodename, 0));
Todd Kennedy83eddae2020-03-02 09:21:25 -0800441
442 setIsolatedSplitLoading(manifestArray.getBoolean(
443 R.styleable.AndroidManifest_isolatedSplits, false));
444
Winson01e38f42020-01-24 11:50:11 -0800445 }
446 }
447
448 public boolean isSupportsSmallScreens() {
449 if (supportsSmallScreens == null) {
450 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
451 }
452
453 return supportsSmallScreens;
454 }
455
456 public boolean isSupportsNormalScreens() {
457 return supportsNormalScreens == null || supportsNormalScreens;
458 }
459
460 public boolean isSupportsLargeScreens() {
461 if (supportsLargeScreens == null) {
462 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
463 }
464
465 return supportsLargeScreens;
466 }
467
468 public boolean isSupportsExtraLargeScreens() {
469 if (supportsExtraLargeScreens == null) {
470 return targetSdkVersion >= Build.VERSION_CODES.GINGERBREAD;
471 }
472
473 return supportsExtraLargeScreens;
474 }
475
476 public boolean isResizeable() {
477 if (resizeable == null) {
478 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
479 }
480
481 return resizeable;
482 }
483
484 public boolean isAnyDensity() {
485 if (anyDensity == null) {
486 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
487 }
488
489 return anyDensity;
490 }
491
492 @Override
493 public ParsingPackageImpl sortActivities() {
Winsonf00c7552020-01-28 12:52:01 -0800494 Collections.sort(this.activities, ORDER_COMPARATOR);
Winson01e38f42020-01-24 11:50:11 -0800495 return this;
496 }
497
498 @Override
499 public ParsingPackageImpl sortReceivers() {
Winsonf00c7552020-01-28 12:52:01 -0800500 Collections.sort(this.receivers, ORDER_COMPARATOR);
Winson01e38f42020-01-24 11:50:11 -0800501 return this;
502 }
503
504 @Override
505 public ParsingPackageImpl sortServices() {
Winsonf00c7552020-01-28 12:52:01 -0800506 Collections.sort(this.services, ORDER_COMPARATOR);
Winson01e38f42020-01-24 11:50:11 -0800507 return this;
508 }
509
510 @Override
Winson01e38f42020-01-24 11:50:11 -0800511 public Object hideAsParsed() {
512 // There is no equivalent for core-only parsing
513 throw new UnsupportedOperationException();
514 }
515
516 @Override
Winson01e38f42020-01-24 11:50:11 -0800517 public ParsingPackageImpl addConfigPreference(ConfigurationInfo configPreference) {
518 this.configPreferences = CollectionUtils.add(this.configPreferences, configPreference);
519 return this;
520 }
521
522 @Override
523 public ParsingPackageImpl addReqFeature(FeatureInfo reqFeature) {
524 this.reqFeatures = CollectionUtils.add(this.reqFeatures, reqFeature);
525 return this;
526 }
527
528 @Override
529 public ParsingPackageImpl addFeatureGroup(FeatureGroupInfo featureGroup) {
530 this.featureGroups = CollectionUtils.add(this.featureGroups, featureGroup);
531 return this;
532 }
533
534 @Override
535 public ParsingPackageImpl addProtectedBroadcast(String protectedBroadcast) {
536 if (!this.protectedBroadcasts.contains(protectedBroadcast)) {
537 this.protectedBroadcasts = CollectionUtils.add(this.protectedBroadcasts,
538 TextUtils.safeIntern(protectedBroadcast));
539 }
540 return this;
541 }
542
543 @Override
544 public ParsingPackageImpl addInstrumentation(ParsedInstrumentation instrumentation) {
545 this.instrumentations = CollectionUtils.add(this.instrumentations, instrumentation);
546 return this;
547 }
548
549 @Override
550 public ParsingPackageImpl addOriginalPackage(String originalPackage) {
Winsondec01d62020-02-21 10:44:58 -0800551 this.originalPackages = CollectionUtils.add(this.originalPackages, originalPackage);
Winson01e38f42020-01-24 11:50:11 -0800552 return this;
553 }
554
555 @Override
556 public ParsingPackage addOverlayable(String overlayableName, String actorName) {
Winsondec01d62020-02-21 10:44:58 -0800557 this.overlayables = CollectionUtils.add(this.overlayables, overlayableName,
558 TextUtils.safeIntern(actorName));
Winson01e38f42020-01-24 11:50:11 -0800559 return this;
560 }
561
562 @Override
563 public ParsingPackageImpl addAdoptPermission(String adoptPermission) {
564 this.adoptPermissions = CollectionUtils.add(this.adoptPermissions,
565 TextUtils.safeIntern(adoptPermission));
566 return this;
567 }
568
569 @Override
570 public ParsingPackageImpl addPermission(ParsedPermission permission) {
571 this.permissions = CollectionUtils.add(this.permissions, permission);
572 return this;
573 }
574
575 @Override
576 public ParsingPackageImpl addPermissionGroup(ParsedPermissionGroup permissionGroup) {
577 this.permissionGroups = CollectionUtils.add(this.permissionGroups, permissionGroup);
578 return this;
579 }
580
581 @Override
582 public ParsingPackageImpl addRequestedPermission(String permission) {
583 this.requestedPermissions = CollectionUtils.add(this.requestedPermissions,
584 TextUtils.safeIntern(permission));
585 return this;
586 }
587
588 @Override
589 public ParsingPackageImpl addImplicitPermission(String permission) {
590 this.implicitPermissions = CollectionUtils.add(this.implicitPermissions,
591 TextUtils.safeIntern(permission));
592 return this;
593 }
594
595 @Override
596 public ParsingPackageImpl addKeySet(String keySetName, PublicKey publicKey) {
597 ArraySet<PublicKey> publicKeys = keySetMapping.get(keySetName);
598 if (publicKeys == null) {
599 publicKeys = new ArraySet<>();
600 }
601 publicKeys.add(publicKey);
602 keySetMapping = CollectionUtils.add(this.keySetMapping, keySetName, publicKeys);
603 return this;
604 }
605
606 @Override
607 public ParsingPackageImpl addActivity(ParsedActivity parsedActivity) {
608 this.activities = CollectionUtils.add(this.activities, parsedActivity);
609 addMimeGroupsFromComponent(parsedActivity);
610 return this;
611 }
612
613 @Override
614 public ParsingPackageImpl addReceiver(ParsedActivity parsedReceiver) {
615 this.receivers = CollectionUtils.add(this.receivers, parsedReceiver);
616 addMimeGroupsFromComponent(parsedReceiver);
617 return this;
618 }
619
620 @Override
621 public ParsingPackageImpl addService(ParsedService parsedService) {
622 this.services = CollectionUtils.add(this.services, parsedService);
623 addMimeGroupsFromComponent(parsedService);
624 return this;
625 }
626
627 @Override
628 public ParsingPackageImpl addProvider(ParsedProvider parsedProvider) {
629 this.providers = CollectionUtils.add(this.providers, parsedProvider);
630 addMimeGroupsFromComponent(parsedProvider);
631 return this;
632 }
633
634 @Override
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -0800635 public ParsingPackageImpl addAttribution(ParsedAttribution attribution) {
636 this.attributions = CollectionUtils.add(this.attributions, attribution);
Winson01e38f42020-01-24 11:50:11 -0800637 return this;
638 }
639
640 @Override
641 public ParsingPackageImpl addLibraryName(String libraryName) {
642 this.libraryNames = CollectionUtils.add(this.libraryNames,
643 TextUtils.safeIntern(libraryName));
644 return this;
645 }
646
647 @Override
648 public ParsingPackageImpl addUsesOptionalLibrary(String libraryName) {
649 this.usesOptionalLibraries = CollectionUtils.add(this.usesOptionalLibraries,
650 TextUtils.safeIntern(libraryName));
651 return this;
652 }
653
654 @Override
655 public ParsingPackageImpl addUsesLibrary(String libraryName) {
656 this.usesLibraries = CollectionUtils.add(this.usesLibraries,
657 TextUtils.safeIntern(libraryName));
658 return this;
659 }
660
661 @Override
662 public ParsingPackageImpl removeUsesOptionalLibrary(String libraryName) {
663 this.usesOptionalLibraries = CollectionUtils.remove(this.usesOptionalLibraries,
664 libraryName);
665 return this;
666 }
667
668 @Override
669 public ParsingPackageImpl addUsesStaticLibrary(String libraryName) {
670 this.usesStaticLibraries = CollectionUtils.add(this.usesStaticLibraries,
671 TextUtils.safeIntern(libraryName));
672 return this;
673 }
674
675 @Override
676 public ParsingPackageImpl addUsesStaticLibraryVersion(long version) {
677 this.usesStaticLibrariesVersions = ArrayUtils.appendLong(this.usesStaticLibrariesVersions,
678 version, true);
679 return this;
680 }
681
682 @Override
683 public ParsingPackageImpl addUsesStaticLibraryCertDigests(String[] certSha256Digests) {
684 this.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String[].class,
685 this.usesStaticLibrariesCertDigests, certSha256Digests, true);
686 return this;
687 }
688
689 @Override
Winsonf00c7552020-01-28 12:52:01 -0800690 public ParsingPackageImpl addPreferredActivityFilter(String className,
691 ParsedIntentInfo intentInfo) {
Winson01e38f42020-01-24 11:50:11 -0800692 this.preferredActivityFilters = CollectionUtils.add(this.preferredActivityFilters,
Winsonf00c7552020-01-28 12:52:01 -0800693 Pair.create(className, intentInfo));
Winson01e38f42020-01-24 11:50:11 -0800694 return this;
695 }
696
697 @Override
698 public ParsingPackageImpl addQueriesIntent(Intent intent) {
699 this.queriesIntents = CollectionUtils.add(this.queriesIntents, intent);
700 return this;
701 }
702
703 @Override
704 public ParsingPackageImpl addQueriesPackage(String packageName) {
705 this.queriesPackages = CollectionUtils.add(this.queriesPackages,
706 TextUtils.safeIntern(packageName));
707 return this;
708 }
709
710 @Override
711 public ParsingPackageImpl addQueriesProvider(String authority) {
Winsondec01d62020-02-21 10:44:58 -0800712 this.queriesProviders = CollectionUtils.add(this.queriesProviders, authority);
Winson01e38f42020-01-24 11:50:11 -0800713 return this;
714 }
715
716 @Override
717 public ParsingPackageImpl setSupportsSmallScreens(int supportsSmallScreens) {
718 if (supportsSmallScreens == 1) {
719 return this;
720 }
721
722 this.supportsSmallScreens = supportsSmallScreens < 0;
723 return this;
724 }
725
726 @Override
727 public ParsingPackageImpl setSupportsNormalScreens(int supportsNormalScreens) {
728 if (supportsNormalScreens == 1) {
729 return this;
730 }
731
732 this.supportsNormalScreens = supportsNormalScreens < 0;
733 return this;
734 }
735
736 @Override
737 public ParsingPackageImpl setSupportsLargeScreens(int supportsLargeScreens) {
738 if (supportsLargeScreens == 1) {
739 return this;
740 }
741
742 this.supportsLargeScreens = supportsLargeScreens < 0;
743 return this;
744 }
745
746 @Override
747 public ParsingPackageImpl setSupportsExtraLargeScreens(int supportsExtraLargeScreens) {
748 if (supportsExtraLargeScreens == 1) {
749 return this;
750 }
751
752 this.supportsExtraLargeScreens = supportsExtraLargeScreens < 0;
753 return this;
754 }
755
756 @Override
757 public ParsingPackageImpl setResizeable(int resizeable) {
758 if (resizeable == 1) {
759 return this;
760 }
761
762 this.resizeable = resizeable < 0;
763 return this;
764 }
765
766 @Override
767 public ParsingPackageImpl setAnyDensity(int anyDensity) {
768 if (anyDensity == 1) {
769 return this;
770 }
771
772 this.anyDensity = anyDensity < 0;
773 return this;
774 }
775
776 @Override
Winsondec01d62020-02-21 10:44:58 -0800777 public ParsingPackageImpl asSplit(String[] splitNames, String[] splitCodePaths,
778 int[] splitRevisionCodes, SparseArray<int[]> splitDependencies) {
Winson01e38f42020-01-24 11:50:11 -0800779 this.splitNames = splitNames;
Winson01e38f42020-01-24 11:50:11 -0800780 this.splitCodePaths = splitCodePaths;
781 this.splitRevisionCodes = splitRevisionCodes;
782 this.splitDependencies = splitDependencies;
783
784 int count = splitNames.length;
785 this.splitFlags = new int[count];
786 this.splitClassLoaderNames = new String[count];
787 return this;
788 }
789
790 @Override
791 public ParsingPackageImpl setSplitHasCode(int splitIndex, boolean splitHasCode) {
792 this.splitFlags[splitIndex] = splitHasCode
793 ? this.splitFlags[splitIndex] | ApplicationInfo.FLAG_HAS_CODE
794 : this.splitFlags[splitIndex] & ~ApplicationInfo.FLAG_HAS_CODE;
795 return this;
796 }
797
798 @Override
799 public ParsingPackageImpl setSplitClassLoaderName(int splitIndex, String classLoaderName) {
800 this.splitClassLoaderNames[splitIndex] = classLoaderName;
801 return this;
802 }
803
804 @Override
Winson01e38f42020-01-24 11:50:11 -0800805 public ParsingPackageImpl setRequiredAccountType(@Nullable String requiredAccountType) {
Winsondec01d62020-02-21 10:44:58 -0800806 this.requiredAccountType = TextUtils.nullIfEmpty(requiredAccountType);
Winson01e38f42020-01-24 11:50:11 -0800807 return this;
808 }
809
810 @Override
811 public ParsingPackageImpl setOverlayTarget(@Nullable String overlayTarget) {
812 this.overlayTarget = TextUtils.safeIntern(overlayTarget);
813 return this;
814 }
815
816 @Override
Winson01e38f42020-01-24 11:50:11 -0800817 public ParsingPackageImpl setVolumeUuid(@Nullable String volumeUuid) {
818 this.volumeUuid = TextUtils.safeIntern(volumeUuid);
819 return this;
820 }
821
822 @Override
Winson01e38f42020-01-24 11:50:11 -0800823 public ParsingPackageImpl setStaticSharedLibName(String staticSharedLibName) {
824 this.staticSharedLibName = TextUtils.safeIntern(staticSharedLibName);
825 return this;
826 }
827
828 @Override
829 public ParsingPackageImpl setSharedUserId(String sharedUserId) {
830 this.sharedUserId = TextUtils.safeIntern(sharedUserId);
831 return this;
832 }
833
834 @NonNull
835 @Override
836 public String getProcessName() {
837 return processName != null ? processName : packageName;
838 }
839
840 @Override
841 public String toString() {
842 return "Package{"
843 + Integer.toHexString(System.identityHashCode(this))
844 + " " + packageName + "}";
845 }
846
847 @Deprecated
848 @Override
849 public ApplicationInfo toAppInfoWithoutState() {
850 ApplicationInfo appInfo = new ApplicationInfo();
851 appInfo.flags = PackageInfoWithoutStateUtils.appInfoFlags(this);
852 appInfo.privateFlags = PackageInfoWithoutStateUtils.appInfoPrivateFlags(this);
853
854 appInfo.appComponentFactory = appComponentFactory;
855 appInfo.backupAgentName = backupAgentName;
856 appInfo.banner = banner;
857 appInfo.category = category;
858 appInfo.classLoaderName = classLoaderName;
859 appInfo.className = className;
860 appInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
861 appInfo.compileSdkVersion = compileSdkVersion;
862 appInfo.compileSdkVersionCodename = compileSdkVersionCodeName;
863// appInfo.credentialProtectedDataDir = credentialProtectedDataDir;
864// appInfo.dataDir = dataDir;
865 appInfo.descriptionRes = descriptionRes;
866// appInfo.deviceProtectedDataDir = deviceProtectedDataDir;
867 appInfo.enabled = enabled;
868 appInfo.fullBackupContent = fullBackupContent;
869// appInfo.hiddenUntilInstalled = hiddenUntilInstalled;
870 appInfo.icon = (PackageParser.sUseRoundIcon && roundIconRes != 0) ? roundIconRes : iconRes;
871 appInfo.iconRes = iconRes;
872 appInfo.roundIconRes = roundIconRes;
873 appInfo.installLocation = installLocation;
874 appInfo.labelRes = labelRes;
875 appInfo.largestWidthLimitDp = largestWidthLimitDp;
876 appInfo.logo = logo;
877 appInfo.manageSpaceActivityName = manageSpaceActivityName;
878 appInfo.maxAspectRatio = maxAspectRatio;
879 appInfo.metaData = metaData;
880 appInfo.minAspectRatio = minAspectRatio;
881 appInfo.minSdkVersion = minSdkVersion;
882 appInfo.name = className;
883 if (appInfo.name != null) {
884 appInfo.name = appInfo.name.trim();
885 }
886// appInfo.nativeLibraryDir = nativeLibraryDir;
887// appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
888// appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
889 appInfo.networkSecurityConfigRes = networkSecurityConfigRes;
890 appInfo.nonLocalizedLabel = nonLocalizedLabel;
891 if (appInfo.nonLocalizedLabel != null) {
892 appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim();
893 }
894 appInfo.packageName = packageName;
895 appInfo.permission = permission;
896// appInfo.primaryCpuAbi = primaryCpuAbi;
897 appInfo.processName = getProcessName();
898 appInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
899// appInfo.secondaryCpuAbi = secondaryCpuAbi;
900// appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
901// appInfo.seInfo = seInfo;
902// appInfo.seInfoUser = seInfoUser;
903// appInfo.sharedLibraryFiles = usesLibraryFiles.isEmpty()
904// ? null : usesLibraryFiles.toArray(new String[0]);
905// appInfo.sharedLibraryInfos = usesLibraryInfos.isEmpty() ? null : usesLibraryInfos;
906 appInfo.splitClassLoaderNames = splitClassLoaderNames;
907 appInfo.splitDependencies = splitDependencies;
908 appInfo.splitNames = splitNames;
909 appInfo.storageUuid = StorageManager.convert(volumeUuid);
910 appInfo.targetSandboxVersion = targetSandboxVersion;
911 appInfo.targetSdkVersion = targetSdkVersion;
912 appInfo.taskAffinity = taskAffinity;
913 appInfo.theme = theme;
914// appInfo.uid = uid;
915 appInfo.uiOptions = uiOptions;
916 appInfo.volumeUuid = volumeUuid;
917 appInfo.zygotePreloadName = zygotePreloadName;
918 appInfo.crossProfile = isCrossProfile();
Evgenii Stepanovd43d1092020-03-16 13:55:42 -0700919 appInfo.setGwpAsanMode(gwpAsanMode);
Winson01e38f42020-01-24 11:50:11 -0800920 appInfo.setBaseCodePath(baseCodePath);
921 appInfo.setBaseResourcePath(baseCodePath);
922 appInfo.setCodePath(codePath);
923 appInfo.setResourcePath(codePath);
924 appInfo.setSplitCodePaths(splitCodePaths);
925 appInfo.setSplitResourcePaths(splitCodePaths);
926 appInfo.setVersionCode(PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode));
927
928 // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
929// appInfo.showUserIcon = pkg.getShowUserIcon();
930 // TODO(b/135203078): Unused?
931// appInfo.resourceDirs = pkg.getResourceDirs();
932 // TODO(b/135203078): Unused?
933// appInfo.enabledSetting = pkg.getEnabledSetting();
934 // TODO(b/135203078): See ParsingPackageImpl#getHiddenApiEnforcementPolicy
935// appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();
936
937 return appInfo;
938 }
939
940 @Override
941 public int describeContents() {
942 return 0;
943 }
944
945 @Override
946 public void writeToParcel(Parcel dest, int flags) {
947 sForBoolean.parcel(this.supportsSmallScreens, dest, flags);
948 sForBoolean.parcel(this.supportsNormalScreens, dest, flags);
949 sForBoolean.parcel(this.supportsLargeScreens, dest, flags);
950 sForBoolean.parcel(this.supportsExtraLargeScreens, dest, flags);
951 sForBoolean.parcel(this.resizeable, dest, flags);
952 sForBoolean.parcel(this.anyDensity, dest, flags);
953 dest.writeInt(this.versionCode);
954 dest.writeInt(this.versionCodeMajor);
955 dest.writeInt(this.baseRevisionCode);
Winsondec01d62020-02-21 10:44:58 -0800956 sForInternedString.parcel(this.versionName, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800957 dest.writeInt(this.compileSdkVersion);
Winsondec01d62020-02-21 10:44:58 -0800958 dest.writeString(this.compileSdkVersionCodeName);
959 sForInternedString.parcel(this.packageName, dest, flags);
960 dest.writeString(this.realPackage);
961 dest.writeString(this.baseCodePath);
Winson01e38f42020-01-24 11:50:11 -0800962 dest.writeBoolean(this.requiredForAllUsers);
Winsondec01d62020-02-21 10:44:58 -0800963 dest.writeString(this.restrictedAccountType);
964 dest.writeString(this.requiredAccountType);
965 sForInternedString.parcel(this.overlayTarget, dest, flags);
966 dest.writeString(this.overlayTargetName);
967 dest.writeString(this.overlayCategory);
Winson01e38f42020-01-24 11:50:11 -0800968 dest.writeInt(this.overlayPriority);
969 dest.writeBoolean(this.overlayIsStatic);
Winsondec01d62020-02-21 10:44:58 -0800970 sForInternedStringValueMap.parcel(this.overlayables, dest, flags);
971 sForInternedString.parcel(this.staticSharedLibName, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800972 dest.writeLong(this.staticSharedLibVersion);
Winsondec01d62020-02-21 10:44:58 -0800973 sForInternedStringList.parcel(this.libraryNames, dest, flags);
974 sForInternedStringList.parcel(this.usesLibraries, dest, flags);
975 sForInternedStringList.parcel(this.usesOptionalLibraries, dest, flags);
976 sForInternedStringList.parcel(this.usesStaticLibraries, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800977 dest.writeLongArray(this.usesStaticLibrariesVersions);
978
979 if (this.usesStaticLibrariesCertDigests == null) {
980 dest.writeInt(-1);
981 } else {
982 dest.writeInt(this.usesStaticLibrariesCertDigests.length);
983 for (int index = 0; index < this.usesStaticLibrariesCertDigests.length; index++) {
Winsondec01d62020-02-21 10:44:58 -0800984 dest.writeStringArray(this.usesStaticLibrariesCertDigests[index]);
Winson01e38f42020-01-24 11:50:11 -0800985 }
986 }
987
Winsondec01d62020-02-21 10:44:58 -0800988 sForInternedString.parcel(this.sharedUserId, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800989 dest.writeInt(this.sharedUserLabel);
990 dest.writeTypedList(this.configPreferences);
991 dest.writeTypedList(this.reqFeatures);
992 dest.writeTypedList(this.featureGroups);
993 dest.writeByteArray(this.restrictUpdateHash);
Winsondec01d62020-02-21 10:44:58 -0800994 dest.writeStringList(this.originalPackages);
995 sForInternedStringList.parcel(this.adoptPermissions, dest, flags);
996 sForInternedStringList.parcel(this.requestedPermissions, dest, flags);
997 sForInternedStringList.parcel(this.implicitPermissions, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800998 sForStringSet.parcel(this.upgradeKeySets, dest, flags);
999 dest.writeMap(this.keySetMapping);
Winsondec01d62020-02-21 10:44:58 -08001000 sForInternedStringList.parcel(this.protectedBroadcasts, dest, flags);
Winson01e38f42020-01-24 11:50:11 -08001001 dest.writeTypedList(this.activities);
1002 dest.writeTypedList(this.receivers);
1003 dest.writeTypedList(this.services);
1004 dest.writeTypedList(this.providers);
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -08001005 dest.writeTypedList(this.attributions);
Winson01e38f42020-01-24 11:50:11 -08001006 dest.writeTypedList(this.permissions);
1007 dest.writeTypedList(this.permissionGroups);
1008 dest.writeTypedList(this.instrumentations);
Winsonf00c7552020-01-28 12:52:01 -08001009 sForIntentInfoPairs.parcel(this.preferredActivityFilters, dest, flags);
Winson01e38f42020-01-24 11:50:11 -08001010 dest.writeMap(this.processes);
1011 dest.writeBundle(this.metaData);
Winsondec01d62020-02-21 10:44:58 -08001012 sForInternedString.parcel(this.volumeUuid, dest, flags);
Winson01e38f42020-01-24 11:50:11 -08001013 dest.writeParcelable(this.signingDetails, flags);
Winsondec01d62020-02-21 10:44:58 -08001014 dest.writeString(this.codePath);
Winson01e38f42020-01-24 11:50:11 -08001015 dest.writeBoolean(this.use32BitAbi);
1016 dest.writeBoolean(this.visibleToInstantApps);
1017 dest.writeBoolean(this.forceQueryable);
1018 dest.writeParcelableList(this.queriesIntents, flags);
Winsondec01d62020-02-21 10:44:58 -08001019 sForInternedStringList.parcel(this.queriesPackages, dest, flags);
1020 dest.writeString(this.appComponentFactory);
1021 dest.writeString(this.backupAgentName);
Winson01e38f42020-01-24 11:50:11 -08001022 dest.writeInt(this.banner);
1023 dest.writeInt(this.category);
Winsondec01d62020-02-21 10:44:58 -08001024 dest.writeString(this.classLoaderName);
1025 dest.writeString(this.className);
Winson01e38f42020-01-24 11:50:11 -08001026 dest.writeInt(this.compatibleWidthLimitDp);
1027 dest.writeInt(this.descriptionRes);
1028 dest.writeBoolean(this.enabled);
1029 dest.writeBoolean(this.crossProfile);
1030 dest.writeInt(this.fullBackupContent);
1031 dest.writeInt(this.iconRes);
1032 dest.writeInt(this.installLocation);
1033 dest.writeInt(this.labelRes);
1034 dest.writeInt(this.largestWidthLimitDp);
1035 dest.writeInt(this.logo);
Winsondec01d62020-02-21 10:44:58 -08001036 dest.writeString(this.manageSpaceActivityName);
Winson01e38f42020-01-24 11:50:11 -08001037 dest.writeFloat(this.maxAspectRatio);
1038 dest.writeFloat(this.minAspectRatio);
1039 dest.writeInt(this.minSdkVersion);
1040 dest.writeInt(this.networkSecurityConfigRes);
1041 dest.writeCharSequence(this.nonLocalizedLabel);
Winsondec01d62020-02-21 10:44:58 -08001042 dest.writeString(this.permission);
1043 dest.writeString(this.processName);
Winson01e38f42020-01-24 11:50:11 -08001044 dest.writeInt(this.requiresSmallestWidthDp);
1045 dest.writeInt(this.roundIconRes);
1046 dest.writeInt(this.targetSandboxVersion);
1047 dest.writeInt(this.targetSdkVersion);
Winsondec01d62020-02-21 10:44:58 -08001048 dest.writeString(this.taskAffinity);
Winson01e38f42020-01-24 11:50:11 -08001049 dest.writeInt(this.theme);
1050 dest.writeInt(this.uiOptions);
Winsondec01d62020-02-21 10:44:58 -08001051 dest.writeString(this.zygotePreloadName);
1052 dest.writeStringArray(this.splitClassLoaderNames);
1053 dest.writeStringArray(this.splitCodePaths);
Winson01e38f42020-01-24 11:50:11 -08001054 dest.writeSparseArray(this.splitDependencies);
1055 dest.writeIntArray(this.splitFlags);
Winsondec01d62020-02-21 10:44:58 -08001056 dest.writeStringArray(this.splitNames);
Winson01e38f42020-01-24 11:50:11 -08001057 dest.writeIntArray(this.splitRevisionCodes);
1058
1059 dest.writeBoolean(this.externalStorage);
1060 dest.writeBoolean(this.baseHardwareAccelerated);
1061 dest.writeBoolean(this.allowBackup);
1062 dest.writeBoolean(this.killAfterRestore);
1063 dest.writeBoolean(this.restoreAnyVersion);
1064 dest.writeBoolean(this.fullBackupOnly);
1065 dest.writeBoolean(this.persistent);
1066 dest.writeBoolean(this.debuggable);
1067 dest.writeBoolean(this.vmSafeMode);
1068 dest.writeBoolean(this.hasCode);
1069 dest.writeBoolean(this.allowTaskReparenting);
1070 dest.writeBoolean(this.allowClearUserData);
1071 dest.writeBoolean(this.largeHeap);
1072 dest.writeBoolean(this.usesCleartextTraffic);
1073 dest.writeBoolean(this.supportsRtl);
1074 dest.writeBoolean(this.testOnly);
1075 dest.writeBoolean(this.multiArch);
1076 dest.writeBoolean(this.extractNativeLibs);
1077 dest.writeBoolean(this.game);
1078
1079 sForBoolean.parcel(this.resizeableActivity, dest, flags);
1080
1081 dest.writeBoolean(this.staticSharedLibrary);
1082 dest.writeBoolean(this.overlay);
1083 dest.writeBoolean(this.isolatedSplitLoading);
1084 dest.writeBoolean(this.hasDomainUrls);
1085 dest.writeBoolean(this.profileableByShell);
1086 dest.writeBoolean(this.backupInForeground);
1087 dest.writeBoolean(this.useEmbeddedDex);
1088 dest.writeBoolean(this.defaultToDeviceProtectedStorage);
1089 dest.writeBoolean(this.directBootAware);
1090 dest.writeBoolean(this.partiallyDirectBootAware);
1091 dest.writeBoolean(this.resizeableActivityViaSdkVersion);
1092 dest.writeBoolean(this.allowClearUserDataOnFailedRestore);
1093 dest.writeBoolean(this.allowAudioPlaybackCapture);
1094 dest.writeBoolean(this.requestLegacyExternalStorage);
1095 dest.writeBoolean(this.usesNonSdkApi);
1096 dest.writeBoolean(this.hasFragileUserData);
1097 dest.writeBoolean(this.cantSaveState);
1098 dest.writeBoolean(this.allowNativeHeapPointerTagging);
Eugene Susla49b84c32020-03-23 15:19:29 -07001099 dest.writeInt(this.autoRevokePermissions);
Winson01e38f42020-01-24 11:50:11 -08001100 dest.writeBoolean(this.preserveLegacyExternalStorage);
1101 dest.writeArraySet(this.mimeGroups);
Evgenii Stepanovd43d1092020-03-16 13:55:42 -07001102 dest.writeInt(this.gwpAsanMode);
Winson01e38f42020-01-24 11:50:11 -08001103 }
1104
1105 public ParsingPackageImpl(Parcel in) {
1106 // We use the boot classloader for all classes that we load.
1107 final ClassLoader boot = Object.class.getClassLoader();
1108 this.supportsSmallScreens = sForBoolean.unparcel(in);
1109 this.supportsNormalScreens = sForBoolean.unparcel(in);
1110 this.supportsLargeScreens = sForBoolean.unparcel(in);
1111 this.supportsExtraLargeScreens = sForBoolean.unparcel(in);
1112 this.resizeable = sForBoolean.unparcel(in);
1113 this.anyDensity = sForBoolean.unparcel(in);
1114 this.versionCode = in.readInt();
1115 this.versionCodeMajor = in.readInt();
1116 this.baseRevisionCode = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001117 this.versionName = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001118 this.compileSdkVersion = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001119 this.compileSdkVersionCodeName = in.readString();
1120 this.packageName = sForInternedString.unparcel(in);
1121 this.realPackage = in.readString();
1122 this.baseCodePath = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001123 this.requiredForAllUsers = in.readBoolean();
Winsondec01d62020-02-21 10:44:58 -08001124 this.restrictedAccountType = in.readString();
1125 this.requiredAccountType = in.readString();
1126 this.overlayTarget = sForInternedString.unparcel(in);
1127 this.overlayTargetName = in.readString();
1128 this.overlayCategory = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001129 this.overlayPriority = in.readInt();
1130 this.overlayIsStatic = in.readBoolean();
Winsondec01d62020-02-21 10:44:58 -08001131 this.overlayables = sForInternedStringValueMap.unparcel(in);
1132 this.staticSharedLibName = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001133 this.staticSharedLibVersion = in.readLong();
Winsondec01d62020-02-21 10:44:58 -08001134 this.libraryNames = sForInternedStringList.unparcel(in);
1135 this.usesLibraries = sForInternedStringList.unparcel(in);
1136 this.usesOptionalLibraries = sForInternedStringList.unparcel(in);
1137 this.usesStaticLibraries = sForInternedStringList.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001138 this.usesStaticLibrariesVersions = in.createLongArray();
1139
1140 int digestsSize = in.readInt();
1141 if (digestsSize >= 0) {
1142 this.usesStaticLibrariesCertDigests = new String[digestsSize][];
1143 for (int index = 0; index < digestsSize; index++) {
Winsondec01d62020-02-21 10:44:58 -08001144 this.usesStaticLibrariesCertDigests[index] = sForInternedStringArray.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001145 }
1146 }
1147
Winsondec01d62020-02-21 10:44:58 -08001148 this.sharedUserId = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001149 this.sharedUserLabel = in.readInt();
1150 this.configPreferences = in.createTypedArrayList(ConfigurationInfo.CREATOR);
1151 this.reqFeatures = in.createTypedArrayList(FeatureInfo.CREATOR);
1152 this.featureGroups = in.createTypedArrayList(FeatureGroupInfo.CREATOR);
1153 this.restrictUpdateHash = in.createByteArray();
Winsondec01d62020-02-21 10:44:58 -08001154 this.originalPackages = in.createStringArrayList();
1155 this.adoptPermissions = sForInternedStringList.unparcel(in);
1156 this.requestedPermissions = sForInternedStringList.unparcel(in);
1157 this.implicitPermissions = sForInternedStringList.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001158 this.upgradeKeySets = sForStringSet.unparcel(in);
1159 this.keySetMapping = in.readHashMap(boot);
Winsondec01d62020-02-21 10:44:58 -08001160 this.protectedBroadcasts = sForInternedStringList.unparcel(in);
1161
Winson01e38f42020-01-24 11:50:11 -08001162 this.activities = in.createTypedArrayList(ParsedActivity.CREATOR);
1163 this.receivers = in.createTypedArrayList(ParsedActivity.CREATOR);
1164 this.services = in.createTypedArrayList(ParsedService.CREATOR);
1165 this.providers = in.createTypedArrayList(ParsedProvider.CREATOR);
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -08001166 this.attributions = in.createTypedArrayList(ParsedAttribution.CREATOR);
Winson01e38f42020-01-24 11:50:11 -08001167 this.permissions = in.createTypedArrayList(ParsedPermission.CREATOR);
1168 this.permissionGroups = in.createTypedArrayList(ParsedPermissionGroup.CREATOR);
1169 this.instrumentations = in.createTypedArrayList(ParsedInstrumentation.CREATOR);
Winsonf00c7552020-01-28 12:52:01 -08001170 this.preferredActivityFilters = sForIntentInfoPairs.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001171 this.processes = in.readHashMap(boot);
1172 this.metaData = in.readBundle(boot);
Winsondec01d62020-02-21 10:44:58 -08001173 this.volumeUuid = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001174 this.signingDetails = in.readParcelable(boot);
Winsondec01d62020-02-21 10:44:58 -08001175 this.codePath = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001176 this.use32BitAbi = in.readBoolean();
1177 this.visibleToInstantApps = in.readBoolean();
1178 this.forceQueryable = in.readBoolean();
1179 this.queriesIntents = in.createTypedArrayList(Intent.CREATOR);
Winsondec01d62020-02-21 10:44:58 -08001180 this.queriesPackages = sForInternedStringList.unparcel(in);
1181 this.appComponentFactory = in.readString();
1182 this.backupAgentName = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001183 this.banner = in.readInt();
1184 this.category = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001185 this.classLoaderName = in.readString();
1186 this.className = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001187 this.compatibleWidthLimitDp = in.readInt();
1188 this.descriptionRes = in.readInt();
1189 this.enabled = in.readBoolean();
1190 this.crossProfile = in.readBoolean();
1191 this.fullBackupContent = in.readInt();
1192 this.iconRes = in.readInt();
1193 this.installLocation = in.readInt();
1194 this.labelRes = in.readInt();
1195 this.largestWidthLimitDp = in.readInt();
1196 this.logo = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001197 this.manageSpaceActivityName = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001198 this.maxAspectRatio = in.readFloat();
1199 this.minAspectRatio = in.readFloat();
1200 this.minSdkVersion = in.readInt();
1201 this.networkSecurityConfigRes = in.readInt();
1202 this.nonLocalizedLabel = in.readCharSequence();
Winsondec01d62020-02-21 10:44:58 -08001203 this.permission = in.readString();
1204 this.processName = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001205 this.requiresSmallestWidthDp = in.readInt();
1206 this.roundIconRes = in.readInt();
1207 this.targetSandboxVersion = in.readInt();
1208 this.targetSdkVersion = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001209 this.taskAffinity = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001210 this.theme = in.readInt();
1211 this.uiOptions = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001212 this.zygotePreloadName = in.readString();
1213 this.splitClassLoaderNames = in.createStringArray();
1214 this.splitCodePaths = in.createStringArray();
Winson01e38f42020-01-24 11:50:11 -08001215 this.splitDependencies = in.readSparseArray(boot);
1216 this.splitFlags = in.createIntArray();
Winsondec01d62020-02-21 10:44:58 -08001217 this.splitNames = in.createStringArray();
Winson01e38f42020-01-24 11:50:11 -08001218 this.splitRevisionCodes = in.createIntArray();
1219 this.externalStorage = in.readBoolean();
1220 this.baseHardwareAccelerated = in.readBoolean();
1221 this.allowBackup = in.readBoolean();
1222 this.killAfterRestore = in.readBoolean();
1223 this.restoreAnyVersion = in.readBoolean();
1224 this.fullBackupOnly = in.readBoolean();
1225 this.persistent = in.readBoolean();
1226 this.debuggable = in.readBoolean();
1227 this.vmSafeMode = in.readBoolean();
1228 this.hasCode = in.readBoolean();
1229 this.allowTaskReparenting = in.readBoolean();
1230 this.allowClearUserData = in.readBoolean();
1231 this.largeHeap = in.readBoolean();
1232 this.usesCleartextTraffic = in.readBoolean();
1233 this.supportsRtl = in.readBoolean();
1234 this.testOnly = in.readBoolean();
1235 this.multiArch = in.readBoolean();
1236 this.extractNativeLibs = in.readBoolean();
1237 this.game = in.readBoolean();
Winson01e38f42020-01-24 11:50:11 -08001238 this.resizeableActivity = sForBoolean.unparcel(in);
1239
1240 this.staticSharedLibrary = in.readBoolean();
1241 this.overlay = in.readBoolean();
1242 this.isolatedSplitLoading = in.readBoolean();
1243 this.hasDomainUrls = in.readBoolean();
1244 this.profileableByShell = in.readBoolean();
1245 this.backupInForeground = in.readBoolean();
1246 this.useEmbeddedDex = in.readBoolean();
1247 this.defaultToDeviceProtectedStorage = in.readBoolean();
1248 this.directBootAware = in.readBoolean();
1249 this.partiallyDirectBootAware = in.readBoolean();
1250 this.resizeableActivityViaSdkVersion = in.readBoolean();
1251 this.allowClearUserDataOnFailedRestore = in.readBoolean();
1252 this.allowAudioPlaybackCapture = in.readBoolean();
1253 this.requestLegacyExternalStorage = in.readBoolean();
1254 this.usesNonSdkApi = in.readBoolean();
1255 this.hasFragileUserData = in.readBoolean();
1256 this.cantSaveState = in.readBoolean();
1257 this.allowNativeHeapPointerTagging = in.readBoolean();
Eugene Susla49b84c32020-03-23 15:19:29 -07001258 this.autoRevokePermissions = in.readInt();
Winson01e38f42020-01-24 11:50:11 -08001259 this.preserveLegacyExternalStorage = in.readBoolean();
1260 this.mimeGroups = (ArraySet<String>) in.readArraySet(boot);
Evgenii Stepanovd43d1092020-03-16 13:55:42 -07001261 this.gwpAsanMode = in.readInt();
Winson01e38f42020-01-24 11:50:11 -08001262 }
1263
1264 public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
1265 new Parcelable.Creator<ParsingPackageImpl>() {
1266 @Override
1267 public ParsingPackageImpl createFromParcel(Parcel source) {
1268 return new ParsingPackageImpl(source);
1269 }
1270
1271 @Override
1272 public ParsingPackageImpl[] newArray(int size) {
1273 return new ParsingPackageImpl[size];
1274 }
1275 };
1276
1277 @Override
1278 public int getVersionCode() {
1279 return versionCode;
1280 }
1281
1282 @Override
1283 public int getVersionCodeMajor() {
1284 return versionCodeMajor;
1285 }
1286
1287 @Override
1288 public int getBaseRevisionCode() {
1289 return baseRevisionCode;
1290 }
1291
1292 @Nullable
1293 @Override
1294 public String getVersionName() {
1295 return versionName;
1296 }
1297
1298 @Override
1299 public int getCompileSdkVersion() {
1300 return compileSdkVersion;
1301 }
1302
1303 @Nullable
1304 @Override
1305 public String getCompileSdkVersionCodeName() {
1306 return compileSdkVersionCodeName;
1307 }
1308
1309 @NonNull
1310 @Override
1311 public String getPackageName() {
1312 return packageName;
1313 }
1314
1315 @Nullable
1316 @Override
1317 public String getRealPackage() {
1318 return realPackage;
1319 }
1320
1321 @NonNull
1322 @Override
1323 public String getBaseCodePath() {
1324 return baseCodePath;
1325 }
1326
1327 @Override
1328 public boolean isRequiredForAllUsers() {
1329 return requiredForAllUsers;
1330 }
1331
1332 @Nullable
1333 @Override
1334 public String getRestrictedAccountType() {
1335 return restrictedAccountType;
1336 }
1337
1338 @Nullable
1339 @Override
1340 public String getRequiredAccountType() {
1341 return requiredAccountType;
1342 }
1343
1344 @Nullable
1345 @Override
1346 public String getOverlayTarget() {
1347 return overlayTarget;
1348 }
1349
1350 @Nullable
1351 @Override
1352 public String getOverlayTargetName() {
1353 return overlayTargetName;
1354 }
1355
1356 @Nullable
1357 @Override
1358 public String getOverlayCategory() {
1359 return overlayCategory;
1360 }
1361
1362 @Override
1363 public int getOverlayPriority() {
1364 return overlayPriority;
1365 }
1366
1367 @Override
1368 public boolean isOverlayIsStatic() {
1369 return overlayIsStatic;
1370 }
1371
1372 @NonNull
1373 @Override
1374 public Map<String,String> getOverlayables() {
1375 return overlayables;
1376 }
1377
1378 @Nullable
1379 @Override
1380 public String getStaticSharedLibName() {
1381 return staticSharedLibName;
1382 }
1383
1384 @Override
1385 public long getStaticSharedLibVersion() {
1386 return staticSharedLibVersion;
1387 }
1388
1389 @NonNull
1390 @Override
1391 public List<String> getLibraryNames() {
1392 return libraryNames;
1393 }
1394
1395 @NonNull
1396 @Override
1397 public List<String> getUsesLibraries() {
1398 return usesLibraries;
1399 }
1400
1401 @NonNull
1402 @Override
1403 public List<String> getUsesOptionalLibraries() {
1404 return usesOptionalLibraries;
1405 }
1406
1407 @NonNull
1408 @Override
1409 public List<String> getUsesStaticLibraries() {
1410 return usesStaticLibraries;
1411 }
1412
1413 @Nullable
1414 @Override
1415 public long[] getUsesStaticLibrariesVersions() {
1416 return usesStaticLibrariesVersions;
1417 }
1418
1419 @Nullable
1420 @Override
1421 public String[][] getUsesStaticLibrariesCertDigests() {
1422 return usesStaticLibrariesCertDigests;
1423 }
1424
1425 @Nullable
1426 @Override
1427 public String getSharedUserId() {
1428 return sharedUserId;
1429 }
1430
1431 @Override
1432 public int getSharedUserLabel() {
1433 return sharedUserLabel;
1434 }
1435
1436 @NonNull
1437 @Override
1438 public List<ConfigurationInfo> getConfigPreferences() {
1439 return configPreferences;
1440 }
1441
1442 @NonNull
1443 @Override
1444 public List<FeatureInfo> getReqFeatures() {
1445 return reqFeatures;
1446 }
1447
1448 @NonNull
1449 @Override
1450 public List<FeatureGroupInfo> getFeatureGroups() {
1451 return featureGroups;
1452 }
1453
1454 @Nullable
1455 @Override
1456 public byte[] getRestrictUpdateHash() {
1457 return restrictUpdateHash;
1458 }
1459
1460 @NonNull
1461 @Override
1462 public List<String> getOriginalPackages() {
1463 return originalPackages;
1464 }
1465
1466 @NonNull
1467 @Override
1468 public List<String> getAdoptPermissions() {
1469 return adoptPermissions;
1470 }
1471
1472 @NonNull
1473 @Override
1474 public List<String> getRequestedPermissions() {
1475 return requestedPermissions;
1476 }
1477
1478 @NonNull
1479 @Override
1480 public List<String> getImplicitPermissions() {
1481 return implicitPermissions;
1482 }
1483
1484 @NonNull
1485 @Override
1486 public Set<String> getUpgradeKeySets() {
1487 return upgradeKeySets;
1488 }
1489
1490 @NonNull
1491 @Override
1492 public Map<String,ArraySet<PublicKey>> getKeySetMapping() {
1493 return keySetMapping;
1494 }
1495
1496 @NonNull
1497 @Override
1498 public List<String> getProtectedBroadcasts() {
1499 return protectedBroadcasts;
1500 }
1501
1502 @NonNull
1503 @Override
1504 public List<ParsedActivity> getActivities() {
1505 return activities;
1506 }
1507
1508 @NonNull
1509 @Override
1510 public List<ParsedActivity> getReceivers() {
1511 return receivers;
1512 }
1513
1514 @NonNull
1515 @Override
1516 public List<ParsedService> getServices() {
1517 return services;
1518 }
1519
1520 @NonNull
1521 @Override
1522 public List<ParsedProvider> getProviders() {
1523 return providers;
1524 }
1525
1526 @NonNull
1527 @Override
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -08001528 public List<ParsedAttribution> getAttributions() {
1529 return attributions;
Winson01e38f42020-01-24 11:50:11 -08001530 }
1531
1532 @NonNull
1533 @Override
1534 public List<ParsedPermission> getPermissions() {
1535 return permissions;
1536 }
1537
1538 @NonNull
1539 @Override
1540 public List<ParsedPermissionGroup> getPermissionGroups() {
1541 return permissionGroups;
1542 }
1543
1544 @NonNull
1545 @Override
1546 public List<ParsedInstrumentation> getInstrumentations() {
1547 return instrumentations;
1548 }
1549
1550 @NonNull
1551 @Override
Winsonf00c7552020-01-28 12:52:01 -08001552 public List<Pair<String,ParsedIntentInfo>> getPreferredActivityFilters() {
Winson01e38f42020-01-24 11:50:11 -08001553 return preferredActivityFilters;
1554 }
1555
1556 @NonNull
1557 @Override
1558 public Map<String,ParsedProcess> getProcesses() {
1559 return processes;
1560 }
1561
1562 @Nullable
1563 @Override
1564 public Bundle getMetaData() {
1565 return metaData;
1566 }
1567
Winsonf00c7552020-01-28 12:52:01 -08001568 private void addMimeGroupsFromComponent(ParsedComponent component) {
1569 for (int i = component.getIntents().size() - 1; i >= 0; i--) {
1570 IntentFilter filter = component.getIntents().get(i);
Winson01e38f42020-01-24 11:50:11 -08001571 for (int groupIndex = filter.countMimeGroups() - 1; groupIndex >= 0; groupIndex--) {
1572 mimeGroups = ArrayUtils.add(mimeGroups, filter.getMimeGroup(groupIndex));
1573 }
1574 }
1575 }
1576
1577 @Override
1578 @Nullable
1579 public Set<String> getMimeGroups() {
1580 return mimeGroups;
1581 }
1582
1583 @Nullable
1584 @Override
1585 public String getVolumeUuid() {
1586 return volumeUuid;
1587 }
1588
1589 @Nullable
1590 @Override
1591 public PackageParser.SigningDetails getSigningDetails() {
1592 return signingDetails;
1593 }
1594
1595 @NonNull
1596 @Override
1597 public String getCodePath() {
1598 return codePath;
1599 }
1600
1601 @Override
1602 public boolean isUse32BitAbi() {
1603 return use32BitAbi;
1604 }
1605
1606 @Override
1607 public boolean isVisibleToInstantApps() {
1608 return visibleToInstantApps;
1609 }
1610
1611 @Override
1612 public boolean isForceQueryable() {
1613 return forceQueryable;
1614 }
1615
1616 @NonNull
1617 @Override
1618 public List<Intent> getQueriesIntents() {
1619 return queriesIntents;
1620 }
1621
1622 @NonNull
1623 @Override
1624 public List<String> getQueriesPackages() {
1625 return queriesPackages;
1626 }
1627
1628 @NonNull
1629 @Override
1630 public Set<String> getQueriesProviders() {
1631 return queriesProviders;
1632 }
1633
1634 @Nullable
1635 @Override
1636 public String[] getSplitClassLoaderNames() {
1637 return splitClassLoaderNames;
1638 }
1639
1640 @Nullable
1641 @Override
1642 public String[] getSplitCodePaths() {
1643 return splitCodePaths;
1644 }
1645
1646 @Nullable
1647 @Override
1648 public SparseArray<int[]> getSplitDependencies() {
1649 return splitDependencies;
1650 }
1651
1652 @Nullable
1653 @Override
1654 public int[] getSplitFlags() {
1655 return splitFlags;
1656 }
1657
1658 @Nullable
1659 @Override
1660 public String[] getSplitNames() {
1661 return splitNames;
1662 }
1663
1664 @Nullable
1665 @Override
1666 public int[] getSplitRevisionCodes() {
1667 return splitRevisionCodes;
1668 }
1669
1670 @Nullable
1671 @Override
1672 public String getAppComponentFactory() {
1673 return appComponentFactory;
1674 }
1675
1676 @Nullable
1677 @Override
1678 public String getBackupAgentName() {
1679 return backupAgentName;
1680 }
1681
1682 @Override
1683 public int getBanner() {
1684 return banner;
1685 }
1686
1687 @Override
1688 public int getCategory() {
1689 return category;
1690 }
1691
1692 @Nullable
1693 @Override
1694 public String getClassLoaderName() {
1695 return classLoaderName;
1696 }
1697
1698 @Nullable
1699 @Override
1700 public String getClassName() {
1701 return className;
1702 }
1703
1704 @Override
1705 public int getCompatibleWidthLimitDp() {
1706 return compatibleWidthLimitDp;
1707 }
1708
1709 @Override
1710 public int getDescriptionRes() {
1711 return descriptionRes;
1712 }
1713
1714 @Override
1715 public boolean isEnabled() {
1716 return enabled;
1717 }
1718
1719 @Override
1720 public boolean isCrossProfile() {
1721 return crossProfile;
1722 }
1723
1724 @Override
1725 public int getFullBackupContent() {
1726 return fullBackupContent;
1727 }
1728
1729 @Override
1730 public int getIconRes() {
1731 return iconRes;
1732 }
1733
1734 @Override
1735 public int getInstallLocation() {
1736 return installLocation;
1737 }
1738
1739 @Override
1740 public int getLabelRes() {
1741 return labelRes;
1742 }
1743
1744 @Override
1745 public int getLargestWidthLimitDp() {
1746 return largestWidthLimitDp;
1747 }
1748
1749 @Override
1750 public int getLogo() {
1751 return logo;
1752 }
1753
1754 @Nullable
1755 @Override
1756 public String getManageSpaceActivityName() {
1757 return manageSpaceActivityName;
1758 }
1759
1760 @Override
1761 public float getMaxAspectRatio() {
1762 return maxAspectRatio;
1763 }
1764
1765 @Override
1766 public float getMinAspectRatio() {
1767 return minAspectRatio;
1768 }
1769
1770 @Override
1771 public int getMinSdkVersion() {
1772 return minSdkVersion;
1773 }
1774
1775 @Override
1776 public int getNetworkSecurityConfigRes() {
1777 return networkSecurityConfigRes;
1778 }
1779
1780 @Nullable
1781 @Override
1782 public CharSequence getNonLocalizedLabel() {
1783 return nonLocalizedLabel;
1784 }
1785
1786 @Nullable
1787 @Override
1788 public String getPermission() {
1789 return permission;
1790 }
1791
1792 @Override
1793 public int getRequiresSmallestWidthDp() {
1794 return requiresSmallestWidthDp;
1795 }
1796
1797 @Override
1798 public int getRoundIconRes() {
1799 return roundIconRes;
1800 }
1801
1802 @Override
1803 public int getTargetSandboxVersion() {
1804 return targetSandboxVersion;
1805 }
1806
1807 @Override
1808 public int getTargetSdkVersion() {
1809 return targetSdkVersion;
1810 }
1811
1812 @Nullable
1813 @Override
1814 public String getTaskAffinity() {
1815 return taskAffinity;
1816 }
1817
1818 @Override
1819 public int getTheme() {
1820 return theme;
1821 }
1822
1823 @Override
1824 public int getUiOptions() {
1825 return uiOptions;
1826 }
1827
1828 @Nullable
1829 @Override
1830 public String getZygotePreloadName() {
1831 return zygotePreloadName;
1832 }
1833
1834 @Override
1835 public boolean isExternalStorage() {
1836 return externalStorage;
1837 }
1838
1839 @Override
1840 public boolean isBaseHardwareAccelerated() {
1841 return baseHardwareAccelerated;
1842 }
1843
1844 @Override
1845 public boolean isAllowBackup() {
1846 return allowBackup;
1847 }
1848
1849 @Override
1850 public boolean isKillAfterRestore() {
1851 return killAfterRestore;
1852 }
1853
1854 @Override
1855 public boolean isRestoreAnyVersion() {
1856 return restoreAnyVersion;
1857 }
1858
1859 @Override
1860 public boolean isFullBackupOnly() {
1861 return fullBackupOnly;
1862 }
1863
1864 @Override
1865 public boolean isPersistent() {
1866 return persistent;
1867 }
1868
1869 @Override
1870 public boolean isDebuggable() {
1871 return debuggable;
1872 }
1873
1874 @Override
1875 public boolean isVmSafeMode() {
1876 return vmSafeMode;
1877 }
1878
1879 @Override
1880 public boolean isHasCode() {
1881 return hasCode;
1882 }
1883
1884 @Override
1885 public boolean isAllowTaskReparenting() {
1886 return allowTaskReparenting;
1887 }
1888
1889 @Override
1890 public boolean isAllowClearUserData() {
1891 return allowClearUserData;
1892 }
1893
1894 @Override
1895 public boolean isLargeHeap() {
1896 return largeHeap;
1897 }
1898
1899 @Override
1900 public boolean isUsesCleartextTraffic() {
1901 return usesCleartextTraffic;
1902 }
1903
1904 @Override
1905 public boolean isSupportsRtl() {
1906 return supportsRtl;
1907 }
1908
1909 @Override
1910 public boolean isTestOnly() {
1911 return testOnly;
1912 }
1913
1914 @Override
1915 public boolean isMultiArch() {
1916 return multiArch;
1917 }
1918
1919 @Override
1920 public boolean isExtractNativeLibs() {
1921 return extractNativeLibs;
1922 }
1923
1924 @Override
1925 public boolean isGame() {
1926 return game;
1927 }
1928
1929 /**
1930 * @see ParsingPackageRead#getResizeableActivity()
1931 */
1932 @Nullable
1933 @Override
1934 public Boolean getResizeableActivity() {
1935 return resizeableActivity;
1936 }
1937
1938 @Override
1939 public boolean isStaticSharedLibrary() {
1940 return staticSharedLibrary;
1941 }
1942
1943 @Override
1944 public boolean isOverlay() {
1945 return overlay;
1946 }
1947
1948 @Override
1949 public boolean isIsolatedSplitLoading() {
1950 return isolatedSplitLoading;
1951 }
1952
1953 @Override
1954 public boolean isHasDomainUrls() {
1955 return hasDomainUrls;
1956 }
1957
1958 @Override
1959 public boolean isProfileableByShell() {
1960 return profileableByShell;
1961 }
1962
1963 @Override
1964 public boolean isBackupInForeground() {
1965 return backupInForeground;
1966 }
1967
1968 @Override
1969 public boolean isUseEmbeddedDex() {
1970 return useEmbeddedDex;
1971 }
1972
1973 @Override
1974 public boolean isDefaultToDeviceProtectedStorage() {
1975 return defaultToDeviceProtectedStorage;
1976 }
1977
1978 @Override
1979 public boolean isDirectBootAware() {
1980 return directBootAware;
1981 }
1982
1983 @Override
Evgenii Stepanovd43d1092020-03-16 13:55:42 -07001984 public int getGwpAsanMode() {
1985 return gwpAsanMode;
Evgenii Stepanov102d3d82020-02-12 16:48:14 -08001986 }
1987
1988 @Override
Winson01e38f42020-01-24 11:50:11 -08001989 public boolean isPartiallyDirectBootAware() {
1990 return partiallyDirectBootAware;
1991 }
1992
1993 @Override
1994 public boolean isResizeableActivityViaSdkVersion() {
1995 return resizeableActivityViaSdkVersion;
1996 }
1997
1998 @Override
1999 public boolean isAllowClearUserDataOnFailedRestore() {
2000 return allowClearUserDataOnFailedRestore;
2001 }
2002
2003 @Override
2004 public boolean isAllowAudioPlaybackCapture() {
2005 return allowAudioPlaybackCapture;
2006 }
2007
2008 @Override
2009 public boolean isRequestLegacyExternalStorage() {
2010 return requestLegacyExternalStorage;
2011 }
2012
2013 @Override
2014 public boolean isUsesNonSdkApi() {
2015 return usesNonSdkApi;
2016 }
2017
2018 @Override
2019 public boolean isHasFragileUserData() {
2020 return hasFragileUserData;
2021 }
2022
2023 @Override
2024 public boolean isCantSaveState() {
2025 return cantSaveState;
2026 }
2027
2028 @Override
2029 public boolean isAllowNativeHeapPointerTagging() {
2030 return allowNativeHeapPointerTagging;
2031 }
2032
2033 @Override
Eugene Susla49b84c32020-03-23 15:19:29 -07002034 public int getAutoRevokePermissions() {
2035 return autoRevokePermissions;
Eugene Susladb77bc12020-03-03 12:09:00 -08002036 }
2037
2038 @Override
Winson01e38f42020-01-24 11:50:11 -08002039 public boolean hasPreserveLegacyExternalStorage() {
2040 return preserveLegacyExternalStorage;
2041 }
2042
2043 @Override
2044 public ParsingPackageImpl setBaseRevisionCode(int value) {
2045 baseRevisionCode = value;
2046 return this;
2047 }
2048
2049 @Override
2050 public ParsingPackageImpl setCompileSdkVersion(int value) {
2051 compileSdkVersion = value;
2052 return this;
2053 }
2054
2055 @Override
2056 public ParsingPackageImpl setRequiredForAllUsers(boolean value) {
2057 requiredForAllUsers = value;
2058 return this;
2059 }
2060
2061 @Override
2062 public ParsingPackageImpl setOverlayPriority(int value) {
2063 overlayPriority = value;
2064 return this;
2065 }
2066
2067 @Override
2068 public ParsingPackageImpl setOverlayIsStatic(boolean value) {
2069 overlayIsStatic = value;
2070 return this;
2071 }
2072
2073 @Override
2074 public ParsingPackageImpl setStaticSharedLibVersion(long value) {
2075 staticSharedLibVersion = value;
2076 return this;
2077 }
2078
2079 @Override
2080 public ParsingPackageImpl setSharedUserLabel(int value) {
2081 sharedUserLabel = value;
2082 return this;
2083 }
2084
2085 @Override
2086 public ParsingPackageImpl setRestrictUpdateHash(@Nullable byte... value) {
2087 restrictUpdateHash = value;
2088 return this;
2089 }
2090
2091 @Override
2092 public ParsingPackageImpl setUpgradeKeySets(@NonNull Set<String> value) {
2093 upgradeKeySets = value;
2094 return this;
2095 }
2096
2097 @Override
2098 public ParsingPackageImpl setProcesses(@NonNull Map<String,ParsedProcess> value) {
2099 processes = value;
2100 return this;
2101 }
2102
2103 @Override
2104 public ParsingPackageImpl setMetaData(@Nullable Bundle value) {
2105 metaData = value;
2106 return this;
2107 }
2108
2109 @Override
2110 public ParsingPackageImpl setSigningDetails(@Nullable PackageParser.SigningDetails value) {
2111 signingDetails = value;
2112 return this;
2113 }
2114
2115 @Override
2116 public ParsingPackageImpl setUse32BitAbi(boolean value) {
2117 use32BitAbi = value;
2118 return this;
2119 }
2120
2121 @Override
2122 public ParsingPackageImpl setVisibleToInstantApps(boolean value) {
2123 visibleToInstantApps = value;
2124 return this;
2125 }
2126
2127 @Override
2128 public ParsingPackageImpl setForceQueryable(boolean value) {
2129 forceQueryable = value;
2130 return this;
2131 }
2132
2133 @Override
2134 public ParsingPackageImpl setBanner(int value) {
2135 banner = value;
2136 return this;
2137 }
2138
2139 @Override
2140 public ParsingPackageImpl setCategory(int value) {
2141 category = value;
2142 return this;
2143 }
2144
2145 @Override
2146 public ParsingPackageImpl setCompatibleWidthLimitDp(int value) {
2147 compatibleWidthLimitDp = value;
2148 return this;
2149 }
2150
2151 @Override
2152 public ParsingPackageImpl setDescriptionRes(int value) {
2153 descriptionRes = value;
2154 return this;
2155 }
2156
2157 @Override
2158 public ParsingPackageImpl setEnabled(boolean value) {
2159 enabled = value;
2160 return this;
2161 }
2162
2163 @Override
2164 public ParsingPackageImpl setCrossProfile(boolean value) {
2165 crossProfile = value;
2166 return this;
2167 }
2168
2169 @Override
2170 public ParsingPackageImpl setFullBackupContent(int value) {
2171 fullBackupContent = value;
2172 return this;
2173 }
2174
2175 @Override
2176 public ParsingPackageImpl setIconRes(int value) {
2177 iconRes = value;
2178 return this;
2179 }
2180
2181 @Override
2182 public ParsingPackageImpl setInstallLocation(int value) {
2183 installLocation = value;
2184 return this;
2185 }
2186
2187 @Override
2188 public ParsingPackageImpl setLabelRes(int value) {
2189 labelRes = value;
2190 return this;
2191 }
2192
2193 @Override
2194 public ParsingPackageImpl setLargestWidthLimitDp(int value) {
2195 largestWidthLimitDp = value;
2196 return this;
2197 }
2198
2199 @Override
2200 public ParsingPackageImpl setLogo(int value) {
2201 logo = value;
2202 return this;
2203 }
2204
2205 @Override
2206 public ParsingPackageImpl setMaxAspectRatio(float value) {
2207 maxAspectRatio = value;
2208 return this;
2209 }
2210
2211 @Override
2212 public ParsingPackageImpl setMinAspectRatio(float value) {
2213 minAspectRatio = value;
2214 return this;
2215 }
2216
2217 @Override
2218 public ParsingPackageImpl setMinSdkVersion(int value) {
2219 minSdkVersion = value;
2220 return this;
2221 }
2222
2223 @Override
2224 public ParsingPackageImpl setNetworkSecurityConfigRes(int value) {
2225 networkSecurityConfigRes = value;
2226 return this;
2227 }
2228
2229 @Override
2230 public ParsingPackageImpl setNonLocalizedLabel(@Nullable CharSequence value) {
2231 nonLocalizedLabel = value;
2232 return this;
2233 }
2234
2235 @Override
2236 public ParsingPackageImpl setRequiresSmallestWidthDp(int value) {
2237 requiresSmallestWidthDp = value;
2238 return this;
2239 }
2240
2241 @Override
2242 public ParsingPackageImpl setRoundIconRes(int value) {
2243 roundIconRes = value;
2244 return this;
2245 }
2246
2247 @Override
2248 public ParsingPackageImpl setTargetSandboxVersion(int value) {
2249 targetSandboxVersion = value;
2250 return this;
2251 }
2252
2253 @Override
2254 public ParsingPackageImpl setTargetSdkVersion(int value) {
2255 targetSdkVersion = value;
2256 return this;
2257 }
2258
2259 @Override
2260 public ParsingPackageImpl setTheme(int value) {
2261 theme = value;
2262 return this;
2263 }
2264
2265 @Override
2266 public ParsingPackageImpl setUiOptions(int value) {
2267 uiOptions = value;
2268 return this;
2269 }
2270
2271 @Override
2272 public ParsingPackageImpl setExternalStorage(boolean value) {
2273 externalStorage = value;
2274 return this;
2275 }
2276
2277 @Override
2278 public ParsingPackageImpl setBaseHardwareAccelerated(boolean value) {
2279 baseHardwareAccelerated = value;
2280 return this;
2281 }
2282
2283 @Override
2284 public ParsingPackageImpl setAllowBackup(boolean value) {
2285 allowBackup = value;
2286 return this;
2287 }
2288
2289 @Override
2290 public ParsingPackageImpl setKillAfterRestore(boolean value) {
2291 killAfterRestore = value;
2292 return this;
2293 }
2294
2295 @Override
2296 public ParsingPackageImpl setRestoreAnyVersion(boolean value) {
2297 restoreAnyVersion = value;
2298 return this;
2299 }
2300
2301 @Override
2302 public ParsingPackageImpl setFullBackupOnly(boolean value) {
2303 fullBackupOnly = value;
2304 return this;
2305 }
2306
2307 @Override
2308 public ParsingPackageImpl setPersistent(boolean value) {
2309 persistent = value;
2310 return this;
2311 }
2312
2313 @Override
2314 public ParsingPackageImpl setDebuggable(boolean value) {
2315 debuggable = value;
2316 return this;
2317 }
2318
2319 @Override
2320 public ParsingPackageImpl setVmSafeMode(boolean value) {
2321 vmSafeMode = value;
2322 return this;
2323 }
2324
2325 @Override
2326 public ParsingPackageImpl setHasCode(boolean value) {
2327 hasCode = value;
2328 return this;
2329 }
2330
2331 @Override
2332 public ParsingPackageImpl setAllowTaskReparenting(boolean value) {
2333 allowTaskReparenting = value;
2334 return this;
2335 }
2336
2337 @Override
2338 public ParsingPackageImpl setAllowClearUserData(boolean value) {
2339 allowClearUserData = value;
2340 return this;
2341 }
2342
2343 @Override
2344 public ParsingPackageImpl setLargeHeap(boolean value) {
2345 largeHeap = value;
2346 return this;
2347 }
2348
2349 @Override
2350 public ParsingPackageImpl setUsesCleartextTraffic(boolean value) {
2351 usesCleartextTraffic = value;
2352 return this;
2353 }
2354
2355 @Override
2356 public ParsingPackageImpl setSupportsRtl(boolean value) {
2357 supportsRtl = value;
2358 return this;
2359 }
2360
2361 @Override
2362 public ParsingPackageImpl setTestOnly(boolean value) {
2363 testOnly = value;
2364 return this;
2365 }
2366
2367 @Override
2368 public ParsingPackageImpl setMultiArch(boolean value) {
2369 multiArch = value;
2370 return this;
2371 }
2372
2373 @Override
2374 public ParsingPackageImpl setExtractNativeLibs(boolean value) {
2375 extractNativeLibs = value;
2376 return this;
2377 }
2378
2379 @Override
2380 public ParsingPackageImpl setGame(boolean value) {
2381 game = value;
2382 return this;
2383 }
2384
2385 /**
2386 * @see ParsingPackageRead#getResizeableActivity()
2387 */
2388 @Override
2389 public ParsingPackageImpl setResizeableActivity(@Nullable Boolean value) {
2390 resizeableActivity = value;
2391 return this;
2392 }
2393
2394 @Override
2395 public ParsingPackageImpl setStaticSharedLibrary(boolean value) {
2396 staticSharedLibrary = value;
2397 return this;
2398 }
2399
2400 @Override
2401 public ParsingPackageImpl setOverlay(boolean value) {
2402 overlay = value;
2403 return this;
2404 }
2405
2406 @Override
2407 public ParsingPackageImpl setIsolatedSplitLoading(boolean value) {
2408 isolatedSplitLoading = value;
2409 return this;
2410 }
2411
2412 @Override
2413 public ParsingPackageImpl setHasDomainUrls(boolean value) {
2414 hasDomainUrls = value;
2415 return this;
2416 }
2417
2418 @Override
2419 public ParsingPackageImpl setProfileableByShell(boolean value) {
2420 profileableByShell = value;
2421 return this;
2422 }
2423
2424 @Override
2425 public ParsingPackageImpl setBackupInForeground(boolean value) {
2426 backupInForeground = value;
2427 return this;
2428 }
2429
2430 @Override
2431 public ParsingPackageImpl setUseEmbeddedDex(boolean value) {
2432 useEmbeddedDex = value;
2433 return this;
2434 }
2435
2436 @Override
2437 public ParsingPackageImpl setDefaultToDeviceProtectedStorage(boolean value) {
2438 defaultToDeviceProtectedStorage = value;
2439 return this;
2440 }
2441
2442 @Override
2443 public ParsingPackageImpl setDirectBootAware(boolean value) {
2444 directBootAware = value;
2445 return this;
2446 }
2447
2448 @Override
Evgenii Stepanovd43d1092020-03-16 13:55:42 -07002449 public ParsingPackageImpl setGwpAsanMode(int value) {
2450 gwpAsanMode = value;
Evgenii Stepanov102d3d82020-02-12 16:48:14 -08002451 return this;
2452 }
2453
2454 @Override
Winson01e38f42020-01-24 11:50:11 -08002455 public ParsingPackageImpl setPartiallyDirectBootAware(boolean value) {
2456 partiallyDirectBootAware = value;
2457 return this;
2458 }
2459
2460 @Override
2461 public ParsingPackageImpl setResizeableActivityViaSdkVersion(boolean value) {
2462 resizeableActivityViaSdkVersion = value;
2463 return this;
2464 }
2465
2466 @Override
2467 public ParsingPackageImpl setAllowClearUserDataOnFailedRestore(boolean value) {
2468 allowClearUserDataOnFailedRestore = value;
2469 return this;
2470 }
2471
2472 @Override
2473 public ParsingPackageImpl setAllowAudioPlaybackCapture(boolean value) {
2474 allowAudioPlaybackCapture = value;
2475 return this;
2476 }
2477
2478 @Override
2479 public ParsingPackageImpl setRequestLegacyExternalStorage(boolean value) {
2480 requestLegacyExternalStorage = value;
2481 return this;
2482 }
2483
2484 @Override
2485 public ParsingPackageImpl setUsesNonSdkApi(boolean value) {
2486 usesNonSdkApi = value;
2487 return this;
2488 }
2489
2490 @Override
2491 public ParsingPackageImpl setHasFragileUserData(boolean value) {
2492 hasFragileUserData = value;
2493 return this;
2494 }
2495
2496 @Override
2497 public ParsingPackageImpl setCantSaveState(boolean value) {
2498 cantSaveState = value;
2499 return this;
2500 }
2501
2502 @Override
2503 public ParsingPackageImpl setAllowNativeHeapPointerTagging(boolean value) {
2504 allowNativeHeapPointerTagging = value;
2505 return this;
2506 }
2507
2508 @Override
Eugene Susla49b84c32020-03-23 15:19:29 -07002509 public ParsingPackageImpl setAutoRevokePermissions(int value) {
2510 autoRevokePermissions = value;
Eugene Susladb77bc12020-03-03 12:09:00 -08002511 return this;
2512 }
2513
2514 @Override
Winson01e38f42020-01-24 11:50:11 -08002515 public ParsingPackageImpl setPreserveLegacyExternalStorage(boolean value) {
2516 preserveLegacyExternalStorage = value;
2517 return this;
2518 }
Winsondec01d62020-02-21 10:44:58 -08002519
2520 @Override
2521 public ParsingPackageImpl setVersionName(String versionName) {
2522 this.versionName = versionName;
2523 return this;
2524 }
2525
2526 @Override
2527 public ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename) {
2528 this.compileSdkVersionCodeName = compileSdkVersionCodename;
2529 return this;
2530 }
2531
2532 @Override
2533 public ParsingPackageImpl setProcessName(String processName) {
2534 this.processName = processName;
2535 return this;
2536 }
2537
2538 @Override
2539 public ParsingPackageImpl setRealPackage(@Nullable String realPackage) {
2540 this.realPackage = realPackage;
2541 return this;
2542 }
2543
2544 @Override
2545 public ParsingPackageImpl setRestrictedAccountType(@Nullable String restrictedAccountType) {
2546 this.restrictedAccountType = restrictedAccountType;
2547 return this;
2548 }
2549
2550 @Override
2551 public ParsingPackageImpl setOverlayTargetName(@Nullable String overlayTargetName) {
2552 this.overlayTargetName = overlayTargetName;
2553 return this;
2554 }
2555
2556 @Override
2557 public ParsingPackageImpl setOverlayCategory(@Nullable String overlayCategory) {
2558 this.overlayCategory = overlayCategory;
2559 return this;
2560 }
2561
2562 @Override
2563 public ParsingPackageImpl setAppComponentFactory(@Nullable String appComponentFactory) {
2564 this.appComponentFactory = appComponentFactory;
2565 return this;
2566 }
2567
2568 @Override
2569 public ParsingPackageImpl setBackupAgentName(@Nullable String backupAgentName) {
2570 this.backupAgentName = backupAgentName;
2571 return this;
2572 }
2573
2574 @Override
2575 public ParsingPackageImpl setClassLoaderName(@Nullable String classLoaderName) {
2576 this.classLoaderName = classLoaderName;
2577 return this;
2578 }
2579
2580 @Override
2581 public ParsingPackageImpl setClassName(@Nullable String className) {
2582 this.className = className;
2583 return this;
2584 }
2585
2586 @Override
2587 public ParsingPackageImpl setManageSpaceActivityName(@Nullable String manageSpaceActivityName) {
2588 this.manageSpaceActivityName = manageSpaceActivityName;
2589 return this;
2590 }
2591
2592 @Override
2593 public ParsingPackageImpl setPermission(@Nullable String permission) {
2594 this.permission = permission;
2595 return this;
2596 }
2597
2598 @Override
2599 public ParsingPackageImpl setTaskAffinity(@Nullable String taskAffinity) {
2600 this.taskAffinity = taskAffinity;
2601 return this;
2602 }
2603
2604 @Override
2605 public ParsingPackageImpl setZygotePreloadName(@Nullable String zygotePreloadName) {
2606 this.zygotePreloadName = zygotePreloadName;
2607 return this;
2608 }
Winson01e38f42020-01-24 11:50:11 -08002609}