blob: 19d48b40909ae8f635338eaaaaa9e87e32dd7195 [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;
325 private boolean enabled;
326 private boolean crossProfile;
327 private int fullBackupContent;
328 private int iconRes;
329 private int installLocation = PackageParser.PARSE_DEFAULT_INSTALL_LOCATION;
330 private int labelRes;
331 private int largestWidthLimitDp;
332 private int logo;
333 @Nullable
334 @DataClass.ParcelWith(ForInternedString.class)
335 private String manageSpaceActivityName;
336 private float maxAspectRatio;
337 private float minAspectRatio;
338 private int minSdkVersion;
339 private int networkSecurityConfigRes;
340 @Nullable
341 private CharSequence nonLocalizedLabel;
342 @Nullable
343 @DataClass.ParcelWith(ForInternedString.class)
344 private String permission;
345 @Nullable
346 @DataClass.ParcelWith(ForInternedString.class)
347 private String processName;
348 private int requiresSmallestWidthDp;
349 private int roundIconRes;
350 private int targetSandboxVersion;
351 private int targetSdkVersion;
352 @Nullable
353 @DataClass.ParcelWith(ForInternedString.class)
354 private String taskAffinity;
355 private int theme;
356
357 private int uiOptions;
358 @Nullable
359 @DataClass.ParcelWith(ForInternedString.class)
360 private String zygotePreloadName;
361
362 private boolean externalStorage;
363 private boolean baseHardwareAccelerated;
364 private boolean allowBackup;
365 private boolean killAfterRestore;
366 private boolean restoreAnyVersion;
367 private boolean fullBackupOnly;
368 private boolean persistent;
369 private boolean debuggable;
370 private boolean vmSafeMode;
371 private boolean hasCode;
372 private boolean allowTaskReparenting;
373 private boolean allowClearUserData;
374 private boolean largeHeap;
375 private boolean usesCleartextTraffic;
376 private boolean supportsRtl;
377 private boolean testOnly;
378 private boolean multiArch;
379 private boolean extractNativeLibs;
380 private boolean game;
381
382 /**
383 * @see ParsingPackageRead#getResizeableActivity()
384 */
385 @Nullable
386 @DataClass.ParcelWith(ForBoolean.class)
387 private Boolean resizeableActivity;
388
389 private boolean staticSharedLibrary;
390 private boolean overlay;
391 private boolean isolatedSplitLoading;
392 private boolean hasDomainUrls;
393 private boolean profileableByShell;
394 private boolean backupInForeground;
395 private boolean useEmbeddedDex;
396 private boolean defaultToDeviceProtectedStorage;
397 private boolean directBootAware;
398 private boolean partiallyDirectBootAware;
399 private boolean resizeableActivityViaSdkVersion;
400 private boolean allowClearUserDataOnFailedRestore;
401 private boolean allowAudioPlaybackCapture;
402 private boolean requestLegacyExternalStorage;
403 private boolean usesNonSdkApi;
404 private boolean hasFragileUserData;
405 private boolean cantSaveState;
406 private boolean allowNativeHeapPointerTagging;
407 private boolean preserveLegacyExternalStorage;
408
409 // TODO(chiuwinson): Non-null
410 @Nullable
411 private ArraySet<String> mimeGroups;
412
413 @VisibleForTesting
414 public ParsingPackageImpl(@NonNull String packageName, @NonNull String baseCodePath,
415 @NonNull String codePath, @Nullable TypedArray manifestArray) {
416 this.packageName = TextUtils.safeIntern(packageName);
Winsondec01d62020-02-21 10:44:58 -0800417 this.baseCodePath = baseCodePath;
418 this.codePath = codePath;
Winson01e38f42020-01-24 11:50:11 -0800419
420 if (manifestArray != null) {
421 versionCode = manifestArray.getInteger(R.styleable.AndroidManifest_versionCode, 0);
422 versionCodeMajor = manifestArray.getInteger(
423 R.styleable.AndroidManifest_versionCodeMajor, 0);
424 setBaseRevisionCode(
425 manifestArray.getInteger(R.styleable.AndroidManifest_revisionCode, 0));
426 setVersionName(manifestArray.getNonConfigurationString(
427 R.styleable.AndroidManifest_versionName, 0));
428
429 setCompileSdkVersion(manifestArray.getInteger(
430 R.styleable.AndroidManifest_compileSdkVersion, 0));
431 setCompileSdkVersionCodename(manifestArray.getNonConfigurationString(
432 R.styleable.AndroidManifest_compileSdkVersionCodename, 0));
433 }
434 }
435
436 public boolean isSupportsSmallScreens() {
437 if (supportsSmallScreens == null) {
438 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
439 }
440
441 return supportsSmallScreens;
442 }
443
444 public boolean isSupportsNormalScreens() {
445 return supportsNormalScreens == null || supportsNormalScreens;
446 }
447
448 public boolean isSupportsLargeScreens() {
449 if (supportsLargeScreens == null) {
450 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
451 }
452
453 return supportsLargeScreens;
454 }
455
456 public boolean isSupportsExtraLargeScreens() {
457 if (supportsExtraLargeScreens == null) {
458 return targetSdkVersion >= Build.VERSION_CODES.GINGERBREAD;
459 }
460
461 return supportsExtraLargeScreens;
462 }
463
464 public boolean isResizeable() {
465 if (resizeable == null) {
466 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
467 }
468
469 return resizeable;
470 }
471
472 public boolean isAnyDensity() {
473 if (anyDensity == null) {
474 return targetSdkVersion >= Build.VERSION_CODES.DONUT;
475 }
476
477 return anyDensity;
478 }
479
480 @Override
481 public ParsingPackageImpl sortActivities() {
Winsonf00c7552020-01-28 12:52:01 -0800482 Collections.sort(this.activities, ORDER_COMPARATOR);
Winson01e38f42020-01-24 11:50:11 -0800483 return this;
484 }
485
486 @Override
487 public ParsingPackageImpl sortReceivers() {
Winsonf00c7552020-01-28 12:52:01 -0800488 Collections.sort(this.receivers, ORDER_COMPARATOR);
Winson01e38f42020-01-24 11:50:11 -0800489 return this;
490 }
491
492 @Override
493 public ParsingPackageImpl sortServices() {
Winsonf00c7552020-01-28 12:52:01 -0800494 Collections.sort(this.services, ORDER_COMPARATOR);
Winson01e38f42020-01-24 11:50:11 -0800495 return this;
496 }
497
498 @Override
Winson01e38f42020-01-24 11:50:11 -0800499 public Object hideAsParsed() {
500 // There is no equivalent for core-only parsing
501 throw new UnsupportedOperationException();
502 }
503
504 @Override
Winson01e38f42020-01-24 11:50:11 -0800505 public ParsingPackageImpl addConfigPreference(ConfigurationInfo configPreference) {
506 this.configPreferences = CollectionUtils.add(this.configPreferences, configPreference);
507 return this;
508 }
509
510 @Override
511 public ParsingPackageImpl addReqFeature(FeatureInfo reqFeature) {
512 this.reqFeatures = CollectionUtils.add(this.reqFeatures, reqFeature);
513 return this;
514 }
515
516 @Override
517 public ParsingPackageImpl addFeatureGroup(FeatureGroupInfo featureGroup) {
518 this.featureGroups = CollectionUtils.add(this.featureGroups, featureGroup);
519 return this;
520 }
521
522 @Override
523 public ParsingPackageImpl addProtectedBroadcast(String protectedBroadcast) {
524 if (!this.protectedBroadcasts.contains(protectedBroadcast)) {
525 this.protectedBroadcasts = CollectionUtils.add(this.protectedBroadcasts,
526 TextUtils.safeIntern(protectedBroadcast));
527 }
528 return this;
529 }
530
531 @Override
532 public ParsingPackageImpl addInstrumentation(ParsedInstrumentation instrumentation) {
533 this.instrumentations = CollectionUtils.add(this.instrumentations, instrumentation);
534 return this;
535 }
536
537 @Override
538 public ParsingPackageImpl addOriginalPackage(String originalPackage) {
Winsondec01d62020-02-21 10:44:58 -0800539 this.originalPackages = CollectionUtils.add(this.originalPackages, originalPackage);
Winson01e38f42020-01-24 11:50:11 -0800540 return this;
541 }
542
543 @Override
544 public ParsingPackage addOverlayable(String overlayableName, String actorName) {
Winsondec01d62020-02-21 10:44:58 -0800545 this.overlayables = CollectionUtils.add(this.overlayables, overlayableName,
546 TextUtils.safeIntern(actorName));
Winson01e38f42020-01-24 11:50:11 -0800547 return this;
548 }
549
550 @Override
551 public ParsingPackageImpl addAdoptPermission(String adoptPermission) {
552 this.adoptPermissions = CollectionUtils.add(this.adoptPermissions,
553 TextUtils.safeIntern(adoptPermission));
554 return this;
555 }
556
557 @Override
558 public ParsingPackageImpl addPermission(ParsedPermission permission) {
559 this.permissions = CollectionUtils.add(this.permissions, permission);
560 return this;
561 }
562
563 @Override
564 public ParsingPackageImpl addPermissionGroup(ParsedPermissionGroup permissionGroup) {
565 this.permissionGroups = CollectionUtils.add(this.permissionGroups, permissionGroup);
566 return this;
567 }
568
569 @Override
570 public ParsingPackageImpl addRequestedPermission(String permission) {
571 this.requestedPermissions = CollectionUtils.add(this.requestedPermissions,
572 TextUtils.safeIntern(permission));
573 return this;
574 }
575
576 @Override
577 public ParsingPackageImpl addImplicitPermission(String permission) {
578 this.implicitPermissions = CollectionUtils.add(this.implicitPermissions,
579 TextUtils.safeIntern(permission));
580 return this;
581 }
582
583 @Override
584 public ParsingPackageImpl addKeySet(String keySetName, PublicKey publicKey) {
585 ArraySet<PublicKey> publicKeys = keySetMapping.get(keySetName);
586 if (publicKeys == null) {
587 publicKeys = new ArraySet<>();
588 }
589 publicKeys.add(publicKey);
590 keySetMapping = CollectionUtils.add(this.keySetMapping, keySetName, publicKeys);
591 return this;
592 }
593
594 @Override
595 public ParsingPackageImpl addActivity(ParsedActivity parsedActivity) {
596 this.activities = CollectionUtils.add(this.activities, parsedActivity);
597 addMimeGroupsFromComponent(parsedActivity);
598 return this;
599 }
600
601 @Override
602 public ParsingPackageImpl addReceiver(ParsedActivity parsedReceiver) {
603 this.receivers = CollectionUtils.add(this.receivers, parsedReceiver);
604 addMimeGroupsFromComponent(parsedReceiver);
605 return this;
606 }
607
608 @Override
609 public ParsingPackageImpl addService(ParsedService parsedService) {
610 this.services = CollectionUtils.add(this.services, parsedService);
611 addMimeGroupsFromComponent(parsedService);
612 return this;
613 }
614
615 @Override
616 public ParsingPackageImpl addProvider(ParsedProvider parsedProvider) {
617 this.providers = CollectionUtils.add(this.providers, parsedProvider);
618 addMimeGroupsFromComponent(parsedProvider);
619 return this;
620 }
621
622 @Override
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -0800623 public ParsingPackageImpl addAttribution(ParsedAttribution attribution) {
624 this.attributions = CollectionUtils.add(this.attributions, attribution);
Winson01e38f42020-01-24 11:50:11 -0800625 return this;
626 }
627
628 @Override
629 public ParsingPackageImpl addLibraryName(String libraryName) {
630 this.libraryNames = CollectionUtils.add(this.libraryNames,
631 TextUtils.safeIntern(libraryName));
632 return this;
633 }
634
635 @Override
636 public ParsingPackageImpl addUsesOptionalLibrary(String libraryName) {
637 this.usesOptionalLibraries = CollectionUtils.add(this.usesOptionalLibraries,
638 TextUtils.safeIntern(libraryName));
639 return this;
640 }
641
642 @Override
643 public ParsingPackageImpl addUsesLibrary(String libraryName) {
644 this.usesLibraries = CollectionUtils.add(this.usesLibraries,
645 TextUtils.safeIntern(libraryName));
646 return this;
647 }
648
649 @Override
650 public ParsingPackageImpl removeUsesOptionalLibrary(String libraryName) {
651 this.usesOptionalLibraries = CollectionUtils.remove(this.usesOptionalLibraries,
652 libraryName);
653 return this;
654 }
655
656 @Override
657 public ParsingPackageImpl addUsesStaticLibrary(String libraryName) {
658 this.usesStaticLibraries = CollectionUtils.add(this.usesStaticLibraries,
659 TextUtils.safeIntern(libraryName));
660 return this;
661 }
662
663 @Override
664 public ParsingPackageImpl addUsesStaticLibraryVersion(long version) {
665 this.usesStaticLibrariesVersions = ArrayUtils.appendLong(this.usesStaticLibrariesVersions,
666 version, true);
667 return this;
668 }
669
670 @Override
671 public ParsingPackageImpl addUsesStaticLibraryCertDigests(String[] certSha256Digests) {
672 this.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String[].class,
673 this.usesStaticLibrariesCertDigests, certSha256Digests, true);
674 return this;
675 }
676
677 @Override
Winsonf00c7552020-01-28 12:52:01 -0800678 public ParsingPackageImpl addPreferredActivityFilter(String className,
679 ParsedIntentInfo intentInfo) {
Winson01e38f42020-01-24 11:50:11 -0800680 this.preferredActivityFilters = CollectionUtils.add(this.preferredActivityFilters,
Winsonf00c7552020-01-28 12:52:01 -0800681 Pair.create(className, intentInfo));
Winson01e38f42020-01-24 11:50:11 -0800682 return this;
683 }
684
685 @Override
686 public ParsingPackageImpl addQueriesIntent(Intent intent) {
687 this.queriesIntents = CollectionUtils.add(this.queriesIntents, intent);
688 return this;
689 }
690
691 @Override
692 public ParsingPackageImpl addQueriesPackage(String packageName) {
693 this.queriesPackages = CollectionUtils.add(this.queriesPackages,
694 TextUtils.safeIntern(packageName));
695 return this;
696 }
697
698 @Override
699 public ParsingPackageImpl addQueriesProvider(String authority) {
Winsondec01d62020-02-21 10:44:58 -0800700 this.queriesProviders = CollectionUtils.add(this.queriesProviders, authority);
Winson01e38f42020-01-24 11:50:11 -0800701 return this;
702 }
703
704 @Override
705 public ParsingPackageImpl setSupportsSmallScreens(int supportsSmallScreens) {
706 if (supportsSmallScreens == 1) {
707 return this;
708 }
709
710 this.supportsSmallScreens = supportsSmallScreens < 0;
711 return this;
712 }
713
714 @Override
715 public ParsingPackageImpl setSupportsNormalScreens(int supportsNormalScreens) {
716 if (supportsNormalScreens == 1) {
717 return this;
718 }
719
720 this.supportsNormalScreens = supportsNormalScreens < 0;
721 return this;
722 }
723
724 @Override
725 public ParsingPackageImpl setSupportsLargeScreens(int supportsLargeScreens) {
726 if (supportsLargeScreens == 1) {
727 return this;
728 }
729
730 this.supportsLargeScreens = supportsLargeScreens < 0;
731 return this;
732 }
733
734 @Override
735 public ParsingPackageImpl setSupportsExtraLargeScreens(int supportsExtraLargeScreens) {
736 if (supportsExtraLargeScreens == 1) {
737 return this;
738 }
739
740 this.supportsExtraLargeScreens = supportsExtraLargeScreens < 0;
741 return this;
742 }
743
744 @Override
745 public ParsingPackageImpl setResizeable(int resizeable) {
746 if (resizeable == 1) {
747 return this;
748 }
749
750 this.resizeable = resizeable < 0;
751 return this;
752 }
753
754 @Override
755 public ParsingPackageImpl setAnyDensity(int anyDensity) {
756 if (anyDensity == 1) {
757 return this;
758 }
759
760 this.anyDensity = anyDensity < 0;
761 return this;
762 }
763
764 @Override
Winsondec01d62020-02-21 10:44:58 -0800765 public ParsingPackageImpl asSplit(String[] splitNames, String[] splitCodePaths,
766 int[] splitRevisionCodes, SparseArray<int[]> splitDependencies) {
Winson01e38f42020-01-24 11:50:11 -0800767 this.splitNames = splitNames;
Winson01e38f42020-01-24 11:50:11 -0800768 this.splitCodePaths = splitCodePaths;
769 this.splitRevisionCodes = splitRevisionCodes;
770 this.splitDependencies = splitDependencies;
771
772 int count = splitNames.length;
773 this.splitFlags = new int[count];
774 this.splitClassLoaderNames = new String[count];
775 return this;
776 }
777
778 @Override
779 public ParsingPackageImpl setSplitHasCode(int splitIndex, boolean splitHasCode) {
780 this.splitFlags[splitIndex] = splitHasCode
781 ? this.splitFlags[splitIndex] | ApplicationInfo.FLAG_HAS_CODE
782 : this.splitFlags[splitIndex] & ~ApplicationInfo.FLAG_HAS_CODE;
783 return this;
784 }
785
786 @Override
787 public ParsingPackageImpl setSplitClassLoaderName(int splitIndex, String classLoaderName) {
788 this.splitClassLoaderNames[splitIndex] = classLoaderName;
789 return this;
790 }
791
792 @Override
Winson01e38f42020-01-24 11:50:11 -0800793 public ParsingPackageImpl setRequiredAccountType(@Nullable String requiredAccountType) {
Winsondec01d62020-02-21 10:44:58 -0800794 this.requiredAccountType = TextUtils.nullIfEmpty(requiredAccountType);
Winson01e38f42020-01-24 11:50:11 -0800795 return this;
796 }
797
798 @Override
799 public ParsingPackageImpl setOverlayTarget(@Nullable String overlayTarget) {
800 this.overlayTarget = TextUtils.safeIntern(overlayTarget);
801 return this;
802 }
803
804 @Override
Winson01e38f42020-01-24 11:50:11 -0800805 public ParsingPackageImpl setVolumeUuid(@Nullable String volumeUuid) {
806 this.volumeUuid = TextUtils.safeIntern(volumeUuid);
807 return this;
808 }
809
810 @Override
Winson01e38f42020-01-24 11:50:11 -0800811 public ParsingPackageImpl setStaticSharedLibName(String staticSharedLibName) {
812 this.staticSharedLibName = TextUtils.safeIntern(staticSharedLibName);
813 return this;
814 }
815
816 @Override
817 public ParsingPackageImpl setSharedUserId(String sharedUserId) {
818 this.sharedUserId = TextUtils.safeIntern(sharedUserId);
819 return this;
820 }
821
822 @NonNull
823 @Override
824 public String getProcessName() {
825 return processName != null ? processName : packageName;
826 }
827
828 @Override
829 public String toString() {
830 return "Package{"
831 + Integer.toHexString(System.identityHashCode(this))
832 + " " + packageName + "}";
833 }
834
835 @Deprecated
836 @Override
837 public ApplicationInfo toAppInfoWithoutState() {
838 ApplicationInfo appInfo = new ApplicationInfo();
839 appInfo.flags = PackageInfoWithoutStateUtils.appInfoFlags(this);
840 appInfo.privateFlags = PackageInfoWithoutStateUtils.appInfoPrivateFlags(this);
841
842 appInfo.appComponentFactory = appComponentFactory;
843 appInfo.backupAgentName = backupAgentName;
844 appInfo.banner = banner;
845 appInfo.category = category;
846 appInfo.classLoaderName = classLoaderName;
847 appInfo.className = className;
848 appInfo.compatibleWidthLimitDp = compatibleWidthLimitDp;
849 appInfo.compileSdkVersion = compileSdkVersion;
850 appInfo.compileSdkVersionCodename = compileSdkVersionCodeName;
851// appInfo.credentialProtectedDataDir = credentialProtectedDataDir;
852// appInfo.dataDir = dataDir;
853 appInfo.descriptionRes = descriptionRes;
854// appInfo.deviceProtectedDataDir = deviceProtectedDataDir;
855 appInfo.enabled = enabled;
856 appInfo.fullBackupContent = fullBackupContent;
857// appInfo.hiddenUntilInstalled = hiddenUntilInstalled;
858 appInfo.icon = (PackageParser.sUseRoundIcon && roundIconRes != 0) ? roundIconRes : iconRes;
859 appInfo.iconRes = iconRes;
860 appInfo.roundIconRes = roundIconRes;
861 appInfo.installLocation = installLocation;
862 appInfo.labelRes = labelRes;
863 appInfo.largestWidthLimitDp = largestWidthLimitDp;
864 appInfo.logo = logo;
865 appInfo.manageSpaceActivityName = manageSpaceActivityName;
866 appInfo.maxAspectRatio = maxAspectRatio;
867 appInfo.metaData = metaData;
868 appInfo.minAspectRatio = minAspectRatio;
869 appInfo.minSdkVersion = minSdkVersion;
870 appInfo.name = className;
871 if (appInfo.name != null) {
872 appInfo.name = appInfo.name.trim();
873 }
874// appInfo.nativeLibraryDir = nativeLibraryDir;
875// appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
876// appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
877 appInfo.networkSecurityConfigRes = networkSecurityConfigRes;
878 appInfo.nonLocalizedLabel = nonLocalizedLabel;
879 if (appInfo.nonLocalizedLabel != null) {
880 appInfo.nonLocalizedLabel = appInfo.nonLocalizedLabel.toString().trim();
881 }
882 appInfo.packageName = packageName;
883 appInfo.permission = permission;
884// appInfo.primaryCpuAbi = primaryCpuAbi;
885 appInfo.processName = getProcessName();
886 appInfo.requiresSmallestWidthDp = requiresSmallestWidthDp;
887// appInfo.secondaryCpuAbi = secondaryCpuAbi;
888// appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
889// appInfo.seInfo = seInfo;
890// appInfo.seInfoUser = seInfoUser;
891// appInfo.sharedLibraryFiles = usesLibraryFiles.isEmpty()
892// ? null : usesLibraryFiles.toArray(new String[0]);
893// appInfo.sharedLibraryInfos = usesLibraryInfos.isEmpty() ? null : usesLibraryInfos;
894 appInfo.splitClassLoaderNames = splitClassLoaderNames;
895 appInfo.splitDependencies = splitDependencies;
896 appInfo.splitNames = splitNames;
897 appInfo.storageUuid = StorageManager.convert(volumeUuid);
898 appInfo.targetSandboxVersion = targetSandboxVersion;
899 appInfo.targetSdkVersion = targetSdkVersion;
900 appInfo.taskAffinity = taskAffinity;
901 appInfo.theme = theme;
902// appInfo.uid = uid;
903 appInfo.uiOptions = uiOptions;
904 appInfo.volumeUuid = volumeUuid;
905 appInfo.zygotePreloadName = zygotePreloadName;
906 appInfo.crossProfile = isCrossProfile();
907
908 appInfo.setBaseCodePath(baseCodePath);
909 appInfo.setBaseResourcePath(baseCodePath);
910 appInfo.setCodePath(codePath);
911 appInfo.setResourcePath(codePath);
912 appInfo.setSplitCodePaths(splitCodePaths);
913 appInfo.setSplitResourcePaths(splitCodePaths);
914 appInfo.setVersionCode(PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode));
915
916 // TODO(b/135203078): Can this be removed? Looks only used in ActivityInfo.
917// appInfo.showUserIcon = pkg.getShowUserIcon();
918 // TODO(b/135203078): Unused?
919// appInfo.resourceDirs = pkg.getResourceDirs();
920 // TODO(b/135203078): Unused?
921// appInfo.enabledSetting = pkg.getEnabledSetting();
922 // TODO(b/135203078): See ParsingPackageImpl#getHiddenApiEnforcementPolicy
923// appInfo.mHiddenApiPolicy = pkg.getHiddenApiPolicy();
924
925 return appInfo;
926 }
927
928 @Override
929 public int describeContents() {
930 return 0;
931 }
932
933 @Override
934 public void writeToParcel(Parcel dest, int flags) {
935 sForBoolean.parcel(this.supportsSmallScreens, dest, flags);
936 sForBoolean.parcel(this.supportsNormalScreens, dest, flags);
937 sForBoolean.parcel(this.supportsLargeScreens, dest, flags);
938 sForBoolean.parcel(this.supportsExtraLargeScreens, dest, flags);
939 sForBoolean.parcel(this.resizeable, dest, flags);
940 sForBoolean.parcel(this.anyDensity, dest, flags);
941 dest.writeInt(this.versionCode);
942 dest.writeInt(this.versionCodeMajor);
943 dest.writeInt(this.baseRevisionCode);
Winsondec01d62020-02-21 10:44:58 -0800944 sForInternedString.parcel(this.versionName, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800945 dest.writeInt(this.compileSdkVersion);
Winsondec01d62020-02-21 10:44:58 -0800946 dest.writeString(this.compileSdkVersionCodeName);
947 sForInternedString.parcel(this.packageName, dest, flags);
948 dest.writeString(this.realPackage);
949 dest.writeString(this.baseCodePath);
Winson01e38f42020-01-24 11:50:11 -0800950 dest.writeBoolean(this.requiredForAllUsers);
Winsondec01d62020-02-21 10:44:58 -0800951 dest.writeString(this.restrictedAccountType);
952 dest.writeString(this.requiredAccountType);
953 sForInternedString.parcel(this.overlayTarget, dest, flags);
954 dest.writeString(this.overlayTargetName);
955 dest.writeString(this.overlayCategory);
Winson01e38f42020-01-24 11:50:11 -0800956 dest.writeInt(this.overlayPriority);
957 dest.writeBoolean(this.overlayIsStatic);
Winsondec01d62020-02-21 10:44:58 -0800958 sForInternedStringValueMap.parcel(this.overlayables, dest, flags);
959 sForInternedString.parcel(this.staticSharedLibName, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800960 dest.writeLong(this.staticSharedLibVersion);
Winsondec01d62020-02-21 10:44:58 -0800961 sForInternedStringList.parcel(this.libraryNames, dest, flags);
962 sForInternedStringList.parcel(this.usesLibraries, dest, flags);
963 sForInternedStringList.parcel(this.usesOptionalLibraries, dest, flags);
964 sForInternedStringList.parcel(this.usesStaticLibraries, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800965 dest.writeLongArray(this.usesStaticLibrariesVersions);
966
967 if (this.usesStaticLibrariesCertDigests == null) {
968 dest.writeInt(-1);
969 } else {
970 dest.writeInt(this.usesStaticLibrariesCertDigests.length);
971 for (int index = 0; index < this.usesStaticLibrariesCertDigests.length; index++) {
Winsondec01d62020-02-21 10:44:58 -0800972 dest.writeStringArray(this.usesStaticLibrariesCertDigests[index]);
Winson01e38f42020-01-24 11:50:11 -0800973 }
974 }
975
Winsondec01d62020-02-21 10:44:58 -0800976 sForInternedString.parcel(this.sharedUserId, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800977 dest.writeInt(this.sharedUserLabel);
978 dest.writeTypedList(this.configPreferences);
979 dest.writeTypedList(this.reqFeatures);
980 dest.writeTypedList(this.featureGroups);
981 dest.writeByteArray(this.restrictUpdateHash);
Winsondec01d62020-02-21 10:44:58 -0800982 dest.writeStringList(this.originalPackages);
983 sForInternedStringList.parcel(this.adoptPermissions, dest, flags);
984 sForInternedStringList.parcel(this.requestedPermissions, dest, flags);
985 sForInternedStringList.parcel(this.implicitPermissions, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800986 sForStringSet.parcel(this.upgradeKeySets, dest, flags);
987 dest.writeMap(this.keySetMapping);
Winsondec01d62020-02-21 10:44:58 -0800988 sForInternedStringList.parcel(this.protectedBroadcasts, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800989 dest.writeTypedList(this.activities);
990 dest.writeTypedList(this.receivers);
991 dest.writeTypedList(this.services);
992 dest.writeTypedList(this.providers);
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -0800993 dest.writeTypedList(this.attributions);
Winson01e38f42020-01-24 11:50:11 -0800994 dest.writeTypedList(this.permissions);
995 dest.writeTypedList(this.permissionGroups);
996 dest.writeTypedList(this.instrumentations);
Winsonf00c7552020-01-28 12:52:01 -0800997 sForIntentInfoPairs.parcel(this.preferredActivityFilters, dest, flags);
Winson01e38f42020-01-24 11:50:11 -0800998 dest.writeMap(this.processes);
999 dest.writeBundle(this.metaData);
Winsondec01d62020-02-21 10:44:58 -08001000 sForInternedString.parcel(this.volumeUuid, dest, flags);
Winson01e38f42020-01-24 11:50:11 -08001001 dest.writeParcelable(this.signingDetails, flags);
Winsondec01d62020-02-21 10:44:58 -08001002 dest.writeString(this.codePath);
Winson01e38f42020-01-24 11:50:11 -08001003 dest.writeBoolean(this.use32BitAbi);
1004 dest.writeBoolean(this.visibleToInstantApps);
1005 dest.writeBoolean(this.forceQueryable);
1006 dest.writeParcelableList(this.queriesIntents, flags);
Winsondec01d62020-02-21 10:44:58 -08001007 sForInternedStringList.parcel(this.queriesPackages, dest, flags);
1008 dest.writeString(this.appComponentFactory);
1009 dest.writeString(this.backupAgentName);
Winson01e38f42020-01-24 11:50:11 -08001010 dest.writeInt(this.banner);
1011 dest.writeInt(this.category);
Winsondec01d62020-02-21 10:44:58 -08001012 dest.writeString(this.classLoaderName);
1013 dest.writeString(this.className);
Winson01e38f42020-01-24 11:50:11 -08001014 dest.writeInt(this.compatibleWidthLimitDp);
1015 dest.writeInt(this.descriptionRes);
1016 dest.writeBoolean(this.enabled);
1017 dest.writeBoolean(this.crossProfile);
1018 dest.writeInt(this.fullBackupContent);
1019 dest.writeInt(this.iconRes);
1020 dest.writeInt(this.installLocation);
1021 dest.writeInt(this.labelRes);
1022 dest.writeInt(this.largestWidthLimitDp);
1023 dest.writeInt(this.logo);
Winsondec01d62020-02-21 10:44:58 -08001024 dest.writeString(this.manageSpaceActivityName);
Winson01e38f42020-01-24 11:50:11 -08001025 dest.writeFloat(this.maxAspectRatio);
1026 dest.writeFloat(this.minAspectRatio);
1027 dest.writeInt(this.minSdkVersion);
1028 dest.writeInt(this.networkSecurityConfigRes);
1029 dest.writeCharSequence(this.nonLocalizedLabel);
Winsondec01d62020-02-21 10:44:58 -08001030 dest.writeString(this.permission);
1031 dest.writeString(this.processName);
Winson01e38f42020-01-24 11:50:11 -08001032 dest.writeInt(this.requiresSmallestWidthDp);
1033 dest.writeInt(this.roundIconRes);
1034 dest.writeInt(this.targetSandboxVersion);
1035 dest.writeInt(this.targetSdkVersion);
Winsondec01d62020-02-21 10:44:58 -08001036 dest.writeString(this.taskAffinity);
Winson01e38f42020-01-24 11:50:11 -08001037 dest.writeInt(this.theme);
1038 dest.writeInt(this.uiOptions);
Winsondec01d62020-02-21 10:44:58 -08001039 dest.writeString(this.zygotePreloadName);
1040 dest.writeStringArray(this.splitClassLoaderNames);
1041 dest.writeStringArray(this.splitCodePaths);
Winson01e38f42020-01-24 11:50:11 -08001042 dest.writeSparseArray(this.splitDependencies);
1043 dest.writeIntArray(this.splitFlags);
Winsondec01d62020-02-21 10:44:58 -08001044 dest.writeStringArray(this.splitNames);
Winson01e38f42020-01-24 11:50:11 -08001045 dest.writeIntArray(this.splitRevisionCodes);
1046
1047 dest.writeBoolean(this.externalStorage);
1048 dest.writeBoolean(this.baseHardwareAccelerated);
1049 dest.writeBoolean(this.allowBackup);
1050 dest.writeBoolean(this.killAfterRestore);
1051 dest.writeBoolean(this.restoreAnyVersion);
1052 dest.writeBoolean(this.fullBackupOnly);
1053 dest.writeBoolean(this.persistent);
1054 dest.writeBoolean(this.debuggable);
1055 dest.writeBoolean(this.vmSafeMode);
1056 dest.writeBoolean(this.hasCode);
1057 dest.writeBoolean(this.allowTaskReparenting);
1058 dest.writeBoolean(this.allowClearUserData);
1059 dest.writeBoolean(this.largeHeap);
1060 dest.writeBoolean(this.usesCleartextTraffic);
1061 dest.writeBoolean(this.supportsRtl);
1062 dest.writeBoolean(this.testOnly);
1063 dest.writeBoolean(this.multiArch);
1064 dest.writeBoolean(this.extractNativeLibs);
1065 dest.writeBoolean(this.game);
1066
1067 sForBoolean.parcel(this.resizeableActivity, dest, flags);
1068
1069 dest.writeBoolean(this.staticSharedLibrary);
1070 dest.writeBoolean(this.overlay);
1071 dest.writeBoolean(this.isolatedSplitLoading);
1072 dest.writeBoolean(this.hasDomainUrls);
1073 dest.writeBoolean(this.profileableByShell);
1074 dest.writeBoolean(this.backupInForeground);
1075 dest.writeBoolean(this.useEmbeddedDex);
1076 dest.writeBoolean(this.defaultToDeviceProtectedStorage);
1077 dest.writeBoolean(this.directBootAware);
1078 dest.writeBoolean(this.partiallyDirectBootAware);
1079 dest.writeBoolean(this.resizeableActivityViaSdkVersion);
1080 dest.writeBoolean(this.allowClearUserDataOnFailedRestore);
1081 dest.writeBoolean(this.allowAudioPlaybackCapture);
1082 dest.writeBoolean(this.requestLegacyExternalStorage);
1083 dest.writeBoolean(this.usesNonSdkApi);
1084 dest.writeBoolean(this.hasFragileUserData);
1085 dest.writeBoolean(this.cantSaveState);
1086 dest.writeBoolean(this.allowNativeHeapPointerTagging);
1087 dest.writeBoolean(this.preserveLegacyExternalStorage);
1088 dest.writeArraySet(this.mimeGroups);
1089 }
1090
1091 public ParsingPackageImpl(Parcel in) {
1092 // We use the boot classloader for all classes that we load.
1093 final ClassLoader boot = Object.class.getClassLoader();
1094 this.supportsSmallScreens = sForBoolean.unparcel(in);
1095 this.supportsNormalScreens = sForBoolean.unparcel(in);
1096 this.supportsLargeScreens = sForBoolean.unparcel(in);
1097 this.supportsExtraLargeScreens = sForBoolean.unparcel(in);
1098 this.resizeable = sForBoolean.unparcel(in);
1099 this.anyDensity = sForBoolean.unparcel(in);
1100 this.versionCode = in.readInt();
1101 this.versionCodeMajor = in.readInt();
1102 this.baseRevisionCode = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001103 this.versionName = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001104 this.compileSdkVersion = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001105 this.compileSdkVersionCodeName = in.readString();
1106 this.packageName = sForInternedString.unparcel(in);
1107 this.realPackage = in.readString();
1108 this.baseCodePath = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001109 this.requiredForAllUsers = in.readBoolean();
Winsondec01d62020-02-21 10:44:58 -08001110 this.restrictedAccountType = in.readString();
1111 this.requiredAccountType = in.readString();
1112 this.overlayTarget = sForInternedString.unparcel(in);
1113 this.overlayTargetName = in.readString();
1114 this.overlayCategory = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001115 this.overlayPriority = in.readInt();
1116 this.overlayIsStatic = in.readBoolean();
Winsondec01d62020-02-21 10:44:58 -08001117 this.overlayables = sForInternedStringValueMap.unparcel(in);
1118 this.staticSharedLibName = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001119 this.staticSharedLibVersion = in.readLong();
Winsondec01d62020-02-21 10:44:58 -08001120 this.libraryNames = sForInternedStringList.unparcel(in);
1121 this.usesLibraries = sForInternedStringList.unparcel(in);
1122 this.usesOptionalLibraries = sForInternedStringList.unparcel(in);
1123 this.usesStaticLibraries = sForInternedStringList.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001124 this.usesStaticLibrariesVersions = in.createLongArray();
1125
1126 int digestsSize = in.readInt();
1127 if (digestsSize >= 0) {
1128 this.usesStaticLibrariesCertDigests = new String[digestsSize][];
1129 for (int index = 0; index < digestsSize; index++) {
Winsondec01d62020-02-21 10:44:58 -08001130 this.usesStaticLibrariesCertDigests[index] = sForInternedStringArray.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001131 }
1132 }
1133
Winsondec01d62020-02-21 10:44:58 -08001134 this.sharedUserId = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001135 this.sharedUserLabel = in.readInt();
1136 this.configPreferences = in.createTypedArrayList(ConfigurationInfo.CREATOR);
1137 this.reqFeatures = in.createTypedArrayList(FeatureInfo.CREATOR);
1138 this.featureGroups = in.createTypedArrayList(FeatureGroupInfo.CREATOR);
1139 this.restrictUpdateHash = in.createByteArray();
Winsondec01d62020-02-21 10:44:58 -08001140 this.originalPackages = in.createStringArrayList();
1141 this.adoptPermissions = sForInternedStringList.unparcel(in);
1142 this.requestedPermissions = sForInternedStringList.unparcel(in);
1143 this.implicitPermissions = sForInternedStringList.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001144 this.upgradeKeySets = sForStringSet.unparcel(in);
1145 this.keySetMapping = in.readHashMap(boot);
Winsondec01d62020-02-21 10:44:58 -08001146 this.protectedBroadcasts = sForInternedStringList.unparcel(in);
1147
Winson01e38f42020-01-24 11:50:11 -08001148 this.activities = in.createTypedArrayList(ParsedActivity.CREATOR);
1149 this.receivers = in.createTypedArrayList(ParsedActivity.CREATOR);
1150 this.services = in.createTypedArrayList(ParsedService.CREATOR);
1151 this.providers = in.createTypedArrayList(ParsedProvider.CREATOR);
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -08001152 this.attributions = in.createTypedArrayList(ParsedAttribution.CREATOR);
Winson01e38f42020-01-24 11:50:11 -08001153 this.permissions = in.createTypedArrayList(ParsedPermission.CREATOR);
1154 this.permissionGroups = in.createTypedArrayList(ParsedPermissionGroup.CREATOR);
1155 this.instrumentations = in.createTypedArrayList(ParsedInstrumentation.CREATOR);
Winsonf00c7552020-01-28 12:52:01 -08001156 this.preferredActivityFilters = sForIntentInfoPairs.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001157 this.processes = in.readHashMap(boot);
1158 this.metaData = in.readBundle(boot);
Winsondec01d62020-02-21 10:44:58 -08001159 this.volumeUuid = sForInternedString.unparcel(in);
Winson01e38f42020-01-24 11:50:11 -08001160 this.signingDetails = in.readParcelable(boot);
Winsondec01d62020-02-21 10:44:58 -08001161 this.codePath = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001162 this.use32BitAbi = in.readBoolean();
1163 this.visibleToInstantApps = in.readBoolean();
1164 this.forceQueryable = in.readBoolean();
1165 this.queriesIntents = in.createTypedArrayList(Intent.CREATOR);
Winsondec01d62020-02-21 10:44:58 -08001166 this.queriesPackages = sForInternedStringList.unparcel(in);
1167 this.appComponentFactory = in.readString();
1168 this.backupAgentName = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001169 this.banner = in.readInt();
1170 this.category = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001171 this.classLoaderName = in.readString();
1172 this.className = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001173 this.compatibleWidthLimitDp = in.readInt();
1174 this.descriptionRes = in.readInt();
1175 this.enabled = in.readBoolean();
1176 this.crossProfile = in.readBoolean();
1177 this.fullBackupContent = in.readInt();
1178 this.iconRes = in.readInt();
1179 this.installLocation = in.readInt();
1180 this.labelRes = in.readInt();
1181 this.largestWidthLimitDp = in.readInt();
1182 this.logo = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001183 this.manageSpaceActivityName = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001184 this.maxAspectRatio = in.readFloat();
1185 this.minAspectRatio = in.readFloat();
1186 this.minSdkVersion = in.readInt();
1187 this.networkSecurityConfigRes = in.readInt();
1188 this.nonLocalizedLabel = in.readCharSequence();
Winsondec01d62020-02-21 10:44:58 -08001189 this.permission = in.readString();
1190 this.processName = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001191 this.requiresSmallestWidthDp = in.readInt();
1192 this.roundIconRes = in.readInt();
1193 this.targetSandboxVersion = in.readInt();
1194 this.targetSdkVersion = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001195 this.taskAffinity = in.readString();
Winson01e38f42020-01-24 11:50:11 -08001196 this.theme = in.readInt();
1197 this.uiOptions = in.readInt();
Winsondec01d62020-02-21 10:44:58 -08001198 this.zygotePreloadName = in.readString();
1199 this.splitClassLoaderNames = in.createStringArray();
1200 this.splitCodePaths = in.createStringArray();
Winson01e38f42020-01-24 11:50:11 -08001201 this.splitDependencies = in.readSparseArray(boot);
1202 this.splitFlags = in.createIntArray();
Winsondec01d62020-02-21 10:44:58 -08001203 this.splitNames = in.createStringArray();
Winson01e38f42020-01-24 11:50:11 -08001204 this.splitRevisionCodes = in.createIntArray();
1205 this.externalStorage = in.readBoolean();
1206 this.baseHardwareAccelerated = in.readBoolean();
1207 this.allowBackup = in.readBoolean();
1208 this.killAfterRestore = in.readBoolean();
1209 this.restoreAnyVersion = in.readBoolean();
1210 this.fullBackupOnly = in.readBoolean();
1211 this.persistent = in.readBoolean();
1212 this.debuggable = in.readBoolean();
1213 this.vmSafeMode = in.readBoolean();
1214 this.hasCode = in.readBoolean();
1215 this.allowTaskReparenting = in.readBoolean();
1216 this.allowClearUserData = in.readBoolean();
1217 this.largeHeap = in.readBoolean();
1218 this.usesCleartextTraffic = in.readBoolean();
1219 this.supportsRtl = in.readBoolean();
1220 this.testOnly = in.readBoolean();
1221 this.multiArch = in.readBoolean();
1222 this.extractNativeLibs = in.readBoolean();
1223 this.game = in.readBoolean();
Winson01e38f42020-01-24 11:50:11 -08001224 this.resizeableActivity = sForBoolean.unparcel(in);
1225
1226 this.staticSharedLibrary = in.readBoolean();
1227 this.overlay = in.readBoolean();
1228 this.isolatedSplitLoading = in.readBoolean();
1229 this.hasDomainUrls = in.readBoolean();
1230 this.profileableByShell = in.readBoolean();
1231 this.backupInForeground = in.readBoolean();
1232 this.useEmbeddedDex = in.readBoolean();
1233 this.defaultToDeviceProtectedStorage = in.readBoolean();
1234 this.directBootAware = in.readBoolean();
1235 this.partiallyDirectBootAware = in.readBoolean();
1236 this.resizeableActivityViaSdkVersion = in.readBoolean();
1237 this.allowClearUserDataOnFailedRestore = in.readBoolean();
1238 this.allowAudioPlaybackCapture = in.readBoolean();
1239 this.requestLegacyExternalStorage = in.readBoolean();
1240 this.usesNonSdkApi = in.readBoolean();
1241 this.hasFragileUserData = in.readBoolean();
1242 this.cantSaveState = in.readBoolean();
1243 this.allowNativeHeapPointerTagging = in.readBoolean();
1244 this.preserveLegacyExternalStorage = in.readBoolean();
1245 this.mimeGroups = (ArraySet<String>) in.readArraySet(boot);
1246 }
1247
1248 public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
1249 new Parcelable.Creator<ParsingPackageImpl>() {
1250 @Override
1251 public ParsingPackageImpl createFromParcel(Parcel source) {
1252 return new ParsingPackageImpl(source);
1253 }
1254
1255 @Override
1256 public ParsingPackageImpl[] newArray(int size) {
1257 return new ParsingPackageImpl[size];
1258 }
1259 };
1260
1261 @Override
1262 public int getVersionCode() {
1263 return versionCode;
1264 }
1265
1266 @Override
1267 public int getVersionCodeMajor() {
1268 return versionCodeMajor;
1269 }
1270
1271 @Override
1272 public int getBaseRevisionCode() {
1273 return baseRevisionCode;
1274 }
1275
1276 @Nullable
1277 @Override
1278 public String getVersionName() {
1279 return versionName;
1280 }
1281
1282 @Override
1283 public int getCompileSdkVersion() {
1284 return compileSdkVersion;
1285 }
1286
1287 @Nullable
1288 @Override
1289 public String getCompileSdkVersionCodeName() {
1290 return compileSdkVersionCodeName;
1291 }
1292
1293 @NonNull
1294 @Override
1295 public String getPackageName() {
1296 return packageName;
1297 }
1298
1299 @Nullable
1300 @Override
1301 public String getRealPackage() {
1302 return realPackage;
1303 }
1304
1305 @NonNull
1306 @Override
1307 public String getBaseCodePath() {
1308 return baseCodePath;
1309 }
1310
1311 @Override
1312 public boolean isRequiredForAllUsers() {
1313 return requiredForAllUsers;
1314 }
1315
1316 @Nullable
1317 @Override
1318 public String getRestrictedAccountType() {
1319 return restrictedAccountType;
1320 }
1321
1322 @Nullable
1323 @Override
1324 public String getRequiredAccountType() {
1325 return requiredAccountType;
1326 }
1327
1328 @Nullable
1329 @Override
1330 public String getOverlayTarget() {
1331 return overlayTarget;
1332 }
1333
1334 @Nullable
1335 @Override
1336 public String getOverlayTargetName() {
1337 return overlayTargetName;
1338 }
1339
1340 @Nullable
1341 @Override
1342 public String getOverlayCategory() {
1343 return overlayCategory;
1344 }
1345
1346 @Override
1347 public int getOverlayPriority() {
1348 return overlayPriority;
1349 }
1350
1351 @Override
1352 public boolean isOverlayIsStatic() {
1353 return overlayIsStatic;
1354 }
1355
1356 @NonNull
1357 @Override
1358 public Map<String,String> getOverlayables() {
1359 return overlayables;
1360 }
1361
1362 @Nullable
1363 @Override
1364 public String getStaticSharedLibName() {
1365 return staticSharedLibName;
1366 }
1367
1368 @Override
1369 public long getStaticSharedLibVersion() {
1370 return staticSharedLibVersion;
1371 }
1372
1373 @NonNull
1374 @Override
1375 public List<String> getLibraryNames() {
1376 return libraryNames;
1377 }
1378
1379 @NonNull
1380 @Override
1381 public List<String> getUsesLibraries() {
1382 return usesLibraries;
1383 }
1384
1385 @NonNull
1386 @Override
1387 public List<String> getUsesOptionalLibraries() {
1388 return usesOptionalLibraries;
1389 }
1390
1391 @NonNull
1392 @Override
1393 public List<String> getUsesStaticLibraries() {
1394 return usesStaticLibraries;
1395 }
1396
1397 @Nullable
1398 @Override
1399 public long[] getUsesStaticLibrariesVersions() {
1400 return usesStaticLibrariesVersions;
1401 }
1402
1403 @Nullable
1404 @Override
1405 public String[][] getUsesStaticLibrariesCertDigests() {
1406 return usesStaticLibrariesCertDigests;
1407 }
1408
1409 @Nullable
1410 @Override
1411 public String getSharedUserId() {
1412 return sharedUserId;
1413 }
1414
1415 @Override
1416 public int getSharedUserLabel() {
1417 return sharedUserLabel;
1418 }
1419
1420 @NonNull
1421 @Override
1422 public List<ConfigurationInfo> getConfigPreferences() {
1423 return configPreferences;
1424 }
1425
1426 @NonNull
1427 @Override
1428 public List<FeatureInfo> getReqFeatures() {
1429 return reqFeatures;
1430 }
1431
1432 @NonNull
1433 @Override
1434 public List<FeatureGroupInfo> getFeatureGroups() {
1435 return featureGroups;
1436 }
1437
1438 @Nullable
1439 @Override
1440 public byte[] getRestrictUpdateHash() {
1441 return restrictUpdateHash;
1442 }
1443
1444 @NonNull
1445 @Override
1446 public List<String> getOriginalPackages() {
1447 return originalPackages;
1448 }
1449
1450 @NonNull
1451 @Override
1452 public List<String> getAdoptPermissions() {
1453 return adoptPermissions;
1454 }
1455
1456 @NonNull
1457 @Override
1458 public List<String> getRequestedPermissions() {
1459 return requestedPermissions;
1460 }
1461
1462 @NonNull
1463 @Override
1464 public List<String> getImplicitPermissions() {
1465 return implicitPermissions;
1466 }
1467
1468 @NonNull
1469 @Override
1470 public Set<String> getUpgradeKeySets() {
1471 return upgradeKeySets;
1472 }
1473
1474 @NonNull
1475 @Override
1476 public Map<String,ArraySet<PublicKey>> getKeySetMapping() {
1477 return keySetMapping;
1478 }
1479
1480 @NonNull
1481 @Override
1482 public List<String> getProtectedBroadcasts() {
1483 return protectedBroadcasts;
1484 }
1485
1486 @NonNull
1487 @Override
1488 public List<ParsedActivity> getActivities() {
1489 return activities;
1490 }
1491
1492 @NonNull
1493 @Override
1494 public List<ParsedActivity> getReceivers() {
1495 return receivers;
1496 }
1497
1498 @NonNull
1499 @Override
1500 public List<ParsedService> getServices() {
1501 return services;
1502 }
1503
1504 @NonNull
1505 @Override
1506 public List<ParsedProvider> getProviders() {
1507 return providers;
1508 }
1509
1510 @NonNull
1511 @Override
Philip P. Moltmann12ac3f42020-03-05 15:01:29 -08001512 public List<ParsedAttribution> getAttributions() {
1513 return attributions;
Winson01e38f42020-01-24 11:50:11 -08001514 }
1515
1516 @NonNull
1517 @Override
1518 public List<ParsedPermission> getPermissions() {
1519 return permissions;
1520 }
1521
1522 @NonNull
1523 @Override
1524 public List<ParsedPermissionGroup> getPermissionGroups() {
1525 return permissionGroups;
1526 }
1527
1528 @NonNull
1529 @Override
1530 public List<ParsedInstrumentation> getInstrumentations() {
1531 return instrumentations;
1532 }
1533
1534 @NonNull
1535 @Override
Winsonf00c7552020-01-28 12:52:01 -08001536 public List<Pair<String,ParsedIntentInfo>> getPreferredActivityFilters() {
Winson01e38f42020-01-24 11:50:11 -08001537 return preferredActivityFilters;
1538 }
1539
1540 @NonNull
1541 @Override
1542 public Map<String,ParsedProcess> getProcesses() {
1543 return processes;
1544 }
1545
1546 @Nullable
1547 @Override
1548 public Bundle getMetaData() {
1549 return metaData;
1550 }
1551
Winsonf00c7552020-01-28 12:52:01 -08001552 private void addMimeGroupsFromComponent(ParsedComponent component) {
1553 for (int i = component.getIntents().size() - 1; i >= 0; i--) {
1554 IntentFilter filter = component.getIntents().get(i);
Winson01e38f42020-01-24 11:50:11 -08001555 for (int groupIndex = filter.countMimeGroups() - 1; groupIndex >= 0; groupIndex--) {
1556 mimeGroups = ArrayUtils.add(mimeGroups, filter.getMimeGroup(groupIndex));
1557 }
1558 }
1559 }
1560
1561 @Override
1562 @Nullable
1563 public Set<String> getMimeGroups() {
1564 return mimeGroups;
1565 }
1566
1567 @Nullable
1568 @Override
1569 public String getVolumeUuid() {
1570 return volumeUuid;
1571 }
1572
1573 @Nullable
1574 @Override
1575 public PackageParser.SigningDetails getSigningDetails() {
1576 return signingDetails;
1577 }
1578
1579 @NonNull
1580 @Override
1581 public String getCodePath() {
1582 return codePath;
1583 }
1584
1585 @Override
1586 public boolean isUse32BitAbi() {
1587 return use32BitAbi;
1588 }
1589
1590 @Override
1591 public boolean isVisibleToInstantApps() {
1592 return visibleToInstantApps;
1593 }
1594
1595 @Override
1596 public boolean isForceQueryable() {
1597 return forceQueryable;
1598 }
1599
1600 @NonNull
1601 @Override
1602 public List<Intent> getQueriesIntents() {
1603 return queriesIntents;
1604 }
1605
1606 @NonNull
1607 @Override
1608 public List<String> getQueriesPackages() {
1609 return queriesPackages;
1610 }
1611
1612 @NonNull
1613 @Override
1614 public Set<String> getQueriesProviders() {
1615 return queriesProviders;
1616 }
1617
1618 @Nullable
1619 @Override
1620 public String[] getSplitClassLoaderNames() {
1621 return splitClassLoaderNames;
1622 }
1623
1624 @Nullable
1625 @Override
1626 public String[] getSplitCodePaths() {
1627 return splitCodePaths;
1628 }
1629
1630 @Nullable
1631 @Override
1632 public SparseArray<int[]> getSplitDependencies() {
1633 return splitDependencies;
1634 }
1635
1636 @Nullable
1637 @Override
1638 public int[] getSplitFlags() {
1639 return splitFlags;
1640 }
1641
1642 @Nullable
1643 @Override
1644 public String[] getSplitNames() {
1645 return splitNames;
1646 }
1647
1648 @Nullable
1649 @Override
1650 public int[] getSplitRevisionCodes() {
1651 return splitRevisionCodes;
1652 }
1653
1654 @Nullable
1655 @Override
1656 public String getAppComponentFactory() {
1657 return appComponentFactory;
1658 }
1659
1660 @Nullable
1661 @Override
1662 public String getBackupAgentName() {
1663 return backupAgentName;
1664 }
1665
1666 @Override
1667 public int getBanner() {
1668 return banner;
1669 }
1670
1671 @Override
1672 public int getCategory() {
1673 return category;
1674 }
1675
1676 @Nullable
1677 @Override
1678 public String getClassLoaderName() {
1679 return classLoaderName;
1680 }
1681
1682 @Nullable
1683 @Override
1684 public String getClassName() {
1685 return className;
1686 }
1687
1688 @Override
1689 public int getCompatibleWidthLimitDp() {
1690 return compatibleWidthLimitDp;
1691 }
1692
1693 @Override
1694 public int getDescriptionRes() {
1695 return descriptionRes;
1696 }
1697
1698 @Override
1699 public boolean isEnabled() {
1700 return enabled;
1701 }
1702
1703 @Override
1704 public boolean isCrossProfile() {
1705 return crossProfile;
1706 }
1707
1708 @Override
1709 public int getFullBackupContent() {
1710 return fullBackupContent;
1711 }
1712
1713 @Override
1714 public int getIconRes() {
1715 return iconRes;
1716 }
1717
1718 @Override
1719 public int getInstallLocation() {
1720 return installLocation;
1721 }
1722
1723 @Override
1724 public int getLabelRes() {
1725 return labelRes;
1726 }
1727
1728 @Override
1729 public int getLargestWidthLimitDp() {
1730 return largestWidthLimitDp;
1731 }
1732
1733 @Override
1734 public int getLogo() {
1735 return logo;
1736 }
1737
1738 @Nullable
1739 @Override
1740 public String getManageSpaceActivityName() {
1741 return manageSpaceActivityName;
1742 }
1743
1744 @Override
1745 public float getMaxAspectRatio() {
1746 return maxAspectRatio;
1747 }
1748
1749 @Override
1750 public float getMinAspectRatio() {
1751 return minAspectRatio;
1752 }
1753
1754 @Override
1755 public int getMinSdkVersion() {
1756 return minSdkVersion;
1757 }
1758
1759 @Override
1760 public int getNetworkSecurityConfigRes() {
1761 return networkSecurityConfigRes;
1762 }
1763
1764 @Nullable
1765 @Override
1766 public CharSequence getNonLocalizedLabel() {
1767 return nonLocalizedLabel;
1768 }
1769
1770 @Nullable
1771 @Override
1772 public String getPermission() {
1773 return permission;
1774 }
1775
1776 @Override
1777 public int getRequiresSmallestWidthDp() {
1778 return requiresSmallestWidthDp;
1779 }
1780
1781 @Override
1782 public int getRoundIconRes() {
1783 return roundIconRes;
1784 }
1785
1786 @Override
1787 public int getTargetSandboxVersion() {
1788 return targetSandboxVersion;
1789 }
1790
1791 @Override
1792 public int getTargetSdkVersion() {
1793 return targetSdkVersion;
1794 }
1795
1796 @Nullable
1797 @Override
1798 public String getTaskAffinity() {
1799 return taskAffinity;
1800 }
1801
1802 @Override
1803 public int getTheme() {
1804 return theme;
1805 }
1806
1807 @Override
1808 public int getUiOptions() {
1809 return uiOptions;
1810 }
1811
1812 @Nullable
1813 @Override
1814 public String getZygotePreloadName() {
1815 return zygotePreloadName;
1816 }
1817
1818 @Override
1819 public boolean isExternalStorage() {
1820 return externalStorage;
1821 }
1822
1823 @Override
1824 public boolean isBaseHardwareAccelerated() {
1825 return baseHardwareAccelerated;
1826 }
1827
1828 @Override
1829 public boolean isAllowBackup() {
1830 return allowBackup;
1831 }
1832
1833 @Override
1834 public boolean isKillAfterRestore() {
1835 return killAfterRestore;
1836 }
1837
1838 @Override
1839 public boolean isRestoreAnyVersion() {
1840 return restoreAnyVersion;
1841 }
1842
1843 @Override
1844 public boolean isFullBackupOnly() {
1845 return fullBackupOnly;
1846 }
1847
1848 @Override
1849 public boolean isPersistent() {
1850 return persistent;
1851 }
1852
1853 @Override
1854 public boolean isDebuggable() {
1855 return debuggable;
1856 }
1857
1858 @Override
1859 public boolean isVmSafeMode() {
1860 return vmSafeMode;
1861 }
1862
1863 @Override
1864 public boolean isHasCode() {
1865 return hasCode;
1866 }
1867
1868 @Override
1869 public boolean isAllowTaskReparenting() {
1870 return allowTaskReparenting;
1871 }
1872
1873 @Override
1874 public boolean isAllowClearUserData() {
1875 return allowClearUserData;
1876 }
1877
1878 @Override
1879 public boolean isLargeHeap() {
1880 return largeHeap;
1881 }
1882
1883 @Override
1884 public boolean isUsesCleartextTraffic() {
1885 return usesCleartextTraffic;
1886 }
1887
1888 @Override
1889 public boolean isSupportsRtl() {
1890 return supportsRtl;
1891 }
1892
1893 @Override
1894 public boolean isTestOnly() {
1895 return testOnly;
1896 }
1897
1898 @Override
1899 public boolean isMultiArch() {
1900 return multiArch;
1901 }
1902
1903 @Override
1904 public boolean isExtractNativeLibs() {
1905 return extractNativeLibs;
1906 }
1907
1908 @Override
1909 public boolean isGame() {
1910 return game;
1911 }
1912
1913 /**
1914 * @see ParsingPackageRead#getResizeableActivity()
1915 */
1916 @Nullable
1917 @Override
1918 public Boolean getResizeableActivity() {
1919 return resizeableActivity;
1920 }
1921
1922 @Override
1923 public boolean isStaticSharedLibrary() {
1924 return staticSharedLibrary;
1925 }
1926
1927 @Override
1928 public boolean isOverlay() {
1929 return overlay;
1930 }
1931
1932 @Override
1933 public boolean isIsolatedSplitLoading() {
1934 return isolatedSplitLoading;
1935 }
1936
1937 @Override
1938 public boolean isHasDomainUrls() {
1939 return hasDomainUrls;
1940 }
1941
1942 @Override
1943 public boolean isProfileableByShell() {
1944 return profileableByShell;
1945 }
1946
1947 @Override
1948 public boolean isBackupInForeground() {
1949 return backupInForeground;
1950 }
1951
1952 @Override
1953 public boolean isUseEmbeddedDex() {
1954 return useEmbeddedDex;
1955 }
1956
1957 @Override
1958 public boolean isDefaultToDeviceProtectedStorage() {
1959 return defaultToDeviceProtectedStorage;
1960 }
1961
1962 @Override
1963 public boolean isDirectBootAware() {
1964 return directBootAware;
1965 }
1966
1967 @Override
1968 public boolean isPartiallyDirectBootAware() {
1969 return partiallyDirectBootAware;
1970 }
1971
1972 @Override
1973 public boolean isResizeableActivityViaSdkVersion() {
1974 return resizeableActivityViaSdkVersion;
1975 }
1976
1977 @Override
1978 public boolean isAllowClearUserDataOnFailedRestore() {
1979 return allowClearUserDataOnFailedRestore;
1980 }
1981
1982 @Override
1983 public boolean isAllowAudioPlaybackCapture() {
1984 return allowAudioPlaybackCapture;
1985 }
1986
1987 @Override
1988 public boolean isRequestLegacyExternalStorage() {
1989 return requestLegacyExternalStorage;
1990 }
1991
1992 @Override
1993 public boolean isUsesNonSdkApi() {
1994 return usesNonSdkApi;
1995 }
1996
1997 @Override
1998 public boolean isHasFragileUserData() {
1999 return hasFragileUserData;
2000 }
2001
2002 @Override
2003 public boolean isCantSaveState() {
2004 return cantSaveState;
2005 }
2006
2007 @Override
2008 public boolean isAllowNativeHeapPointerTagging() {
2009 return allowNativeHeapPointerTagging;
2010 }
2011
2012 @Override
2013 public boolean hasPreserveLegacyExternalStorage() {
2014 return preserveLegacyExternalStorage;
2015 }
2016
2017 @Override
2018 public ParsingPackageImpl setBaseRevisionCode(int value) {
2019 baseRevisionCode = value;
2020 return this;
2021 }
2022
2023 @Override
2024 public ParsingPackageImpl setCompileSdkVersion(int value) {
2025 compileSdkVersion = value;
2026 return this;
2027 }
2028
2029 @Override
2030 public ParsingPackageImpl setRequiredForAllUsers(boolean value) {
2031 requiredForAllUsers = value;
2032 return this;
2033 }
2034
2035 @Override
2036 public ParsingPackageImpl setOverlayPriority(int value) {
2037 overlayPriority = value;
2038 return this;
2039 }
2040
2041 @Override
2042 public ParsingPackageImpl setOverlayIsStatic(boolean value) {
2043 overlayIsStatic = value;
2044 return this;
2045 }
2046
2047 @Override
2048 public ParsingPackageImpl setStaticSharedLibVersion(long value) {
2049 staticSharedLibVersion = value;
2050 return this;
2051 }
2052
2053 @Override
2054 public ParsingPackageImpl setSharedUserLabel(int value) {
2055 sharedUserLabel = value;
2056 return this;
2057 }
2058
2059 @Override
2060 public ParsingPackageImpl setRestrictUpdateHash(@Nullable byte... value) {
2061 restrictUpdateHash = value;
2062 return this;
2063 }
2064
2065 @Override
2066 public ParsingPackageImpl setUpgradeKeySets(@NonNull Set<String> value) {
2067 upgradeKeySets = value;
2068 return this;
2069 }
2070
2071 @Override
2072 public ParsingPackageImpl setProcesses(@NonNull Map<String,ParsedProcess> value) {
2073 processes = value;
2074 return this;
2075 }
2076
2077 @Override
2078 public ParsingPackageImpl setMetaData(@Nullable Bundle value) {
2079 metaData = value;
2080 return this;
2081 }
2082
2083 @Override
2084 public ParsingPackageImpl setSigningDetails(@Nullable PackageParser.SigningDetails value) {
2085 signingDetails = value;
2086 return this;
2087 }
2088
2089 @Override
2090 public ParsingPackageImpl setUse32BitAbi(boolean value) {
2091 use32BitAbi = value;
2092 return this;
2093 }
2094
2095 @Override
2096 public ParsingPackageImpl setVisibleToInstantApps(boolean value) {
2097 visibleToInstantApps = value;
2098 return this;
2099 }
2100
2101 @Override
2102 public ParsingPackageImpl setForceQueryable(boolean value) {
2103 forceQueryable = value;
2104 return this;
2105 }
2106
2107 @Override
2108 public ParsingPackageImpl setBanner(int value) {
2109 banner = value;
2110 return this;
2111 }
2112
2113 @Override
2114 public ParsingPackageImpl setCategory(int value) {
2115 category = value;
2116 return this;
2117 }
2118
2119 @Override
2120 public ParsingPackageImpl setCompatibleWidthLimitDp(int value) {
2121 compatibleWidthLimitDp = value;
2122 return this;
2123 }
2124
2125 @Override
2126 public ParsingPackageImpl setDescriptionRes(int value) {
2127 descriptionRes = value;
2128 return this;
2129 }
2130
2131 @Override
2132 public ParsingPackageImpl setEnabled(boolean value) {
2133 enabled = value;
2134 return this;
2135 }
2136
2137 @Override
2138 public ParsingPackageImpl setCrossProfile(boolean value) {
2139 crossProfile = value;
2140 return this;
2141 }
2142
2143 @Override
2144 public ParsingPackageImpl setFullBackupContent(int value) {
2145 fullBackupContent = value;
2146 return this;
2147 }
2148
2149 @Override
2150 public ParsingPackageImpl setIconRes(int value) {
2151 iconRes = value;
2152 return this;
2153 }
2154
2155 @Override
2156 public ParsingPackageImpl setInstallLocation(int value) {
2157 installLocation = value;
2158 return this;
2159 }
2160
2161 @Override
2162 public ParsingPackageImpl setLabelRes(int value) {
2163 labelRes = value;
2164 return this;
2165 }
2166
2167 @Override
2168 public ParsingPackageImpl setLargestWidthLimitDp(int value) {
2169 largestWidthLimitDp = value;
2170 return this;
2171 }
2172
2173 @Override
2174 public ParsingPackageImpl setLogo(int value) {
2175 logo = value;
2176 return this;
2177 }
2178
2179 @Override
2180 public ParsingPackageImpl setMaxAspectRatio(float value) {
2181 maxAspectRatio = value;
2182 return this;
2183 }
2184
2185 @Override
2186 public ParsingPackageImpl setMinAspectRatio(float value) {
2187 minAspectRatio = value;
2188 return this;
2189 }
2190
2191 @Override
2192 public ParsingPackageImpl setMinSdkVersion(int value) {
2193 minSdkVersion = value;
2194 return this;
2195 }
2196
2197 @Override
2198 public ParsingPackageImpl setNetworkSecurityConfigRes(int value) {
2199 networkSecurityConfigRes = value;
2200 return this;
2201 }
2202
2203 @Override
2204 public ParsingPackageImpl setNonLocalizedLabel(@Nullable CharSequence value) {
2205 nonLocalizedLabel = value;
2206 return this;
2207 }
2208
2209 @Override
2210 public ParsingPackageImpl setRequiresSmallestWidthDp(int value) {
2211 requiresSmallestWidthDp = value;
2212 return this;
2213 }
2214
2215 @Override
2216 public ParsingPackageImpl setRoundIconRes(int value) {
2217 roundIconRes = value;
2218 return this;
2219 }
2220
2221 @Override
2222 public ParsingPackageImpl setTargetSandboxVersion(int value) {
2223 targetSandboxVersion = value;
2224 return this;
2225 }
2226
2227 @Override
2228 public ParsingPackageImpl setTargetSdkVersion(int value) {
2229 targetSdkVersion = value;
2230 return this;
2231 }
2232
2233 @Override
2234 public ParsingPackageImpl setTheme(int value) {
2235 theme = value;
2236 return this;
2237 }
2238
2239 @Override
2240 public ParsingPackageImpl setUiOptions(int value) {
2241 uiOptions = value;
2242 return this;
2243 }
2244
2245 @Override
2246 public ParsingPackageImpl setExternalStorage(boolean value) {
2247 externalStorage = value;
2248 return this;
2249 }
2250
2251 @Override
2252 public ParsingPackageImpl setBaseHardwareAccelerated(boolean value) {
2253 baseHardwareAccelerated = value;
2254 return this;
2255 }
2256
2257 @Override
2258 public ParsingPackageImpl setAllowBackup(boolean value) {
2259 allowBackup = value;
2260 return this;
2261 }
2262
2263 @Override
2264 public ParsingPackageImpl setKillAfterRestore(boolean value) {
2265 killAfterRestore = value;
2266 return this;
2267 }
2268
2269 @Override
2270 public ParsingPackageImpl setRestoreAnyVersion(boolean value) {
2271 restoreAnyVersion = value;
2272 return this;
2273 }
2274
2275 @Override
2276 public ParsingPackageImpl setFullBackupOnly(boolean value) {
2277 fullBackupOnly = value;
2278 return this;
2279 }
2280
2281 @Override
2282 public ParsingPackageImpl setPersistent(boolean value) {
2283 persistent = value;
2284 return this;
2285 }
2286
2287 @Override
2288 public ParsingPackageImpl setDebuggable(boolean value) {
2289 debuggable = value;
2290 return this;
2291 }
2292
2293 @Override
2294 public ParsingPackageImpl setVmSafeMode(boolean value) {
2295 vmSafeMode = value;
2296 return this;
2297 }
2298
2299 @Override
2300 public ParsingPackageImpl setHasCode(boolean value) {
2301 hasCode = value;
2302 return this;
2303 }
2304
2305 @Override
2306 public ParsingPackageImpl setAllowTaskReparenting(boolean value) {
2307 allowTaskReparenting = value;
2308 return this;
2309 }
2310
2311 @Override
2312 public ParsingPackageImpl setAllowClearUserData(boolean value) {
2313 allowClearUserData = value;
2314 return this;
2315 }
2316
2317 @Override
2318 public ParsingPackageImpl setLargeHeap(boolean value) {
2319 largeHeap = value;
2320 return this;
2321 }
2322
2323 @Override
2324 public ParsingPackageImpl setUsesCleartextTraffic(boolean value) {
2325 usesCleartextTraffic = value;
2326 return this;
2327 }
2328
2329 @Override
2330 public ParsingPackageImpl setSupportsRtl(boolean value) {
2331 supportsRtl = value;
2332 return this;
2333 }
2334
2335 @Override
2336 public ParsingPackageImpl setTestOnly(boolean value) {
2337 testOnly = value;
2338 return this;
2339 }
2340
2341 @Override
2342 public ParsingPackageImpl setMultiArch(boolean value) {
2343 multiArch = value;
2344 return this;
2345 }
2346
2347 @Override
2348 public ParsingPackageImpl setExtractNativeLibs(boolean value) {
2349 extractNativeLibs = value;
2350 return this;
2351 }
2352
2353 @Override
2354 public ParsingPackageImpl setGame(boolean value) {
2355 game = value;
2356 return this;
2357 }
2358
2359 /**
2360 * @see ParsingPackageRead#getResizeableActivity()
2361 */
2362 @Override
2363 public ParsingPackageImpl setResizeableActivity(@Nullable Boolean value) {
2364 resizeableActivity = value;
2365 return this;
2366 }
2367
2368 @Override
2369 public ParsingPackageImpl setStaticSharedLibrary(boolean value) {
2370 staticSharedLibrary = value;
2371 return this;
2372 }
2373
2374 @Override
2375 public ParsingPackageImpl setOverlay(boolean value) {
2376 overlay = value;
2377 return this;
2378 }
2379
2380 @Override
2381 public ParsingPackageImpl setIsolatedSplitLoading(boolean value) {
2382 isolatedSplitLoading = value;
2383 return this;
2384 }
2385
2386 @Override
2387 public ParsingPackageImpl setHasDomainUrls(boolean value) {
2388 hasDomainUrls = value;
2389 return this;
2390 }
2391
2392 @Override
2393 public ParsingPackageImpl setProfileableByShell(boolean value) {
2394 profileableByShell = value;
2395 return this;
2396 }
2397
2398 @Override
2399 public ParsingPackageImpl setBackupInForeground(boolean value) {
2400 backupInForeground = value;
2401 return this;
2402 }
2403
2404 @Override
2405 public ParsingPackageImpl setUseEmbeddedDex(boolean value) {
2406 useEmbeddedDex = value;
2407 return this;
2408 }
2409
2410 @Override
2411 public ParsingPackageImpl setDefaultToDeviceProtectedStorage(boolean value) {
2412 defaultToDeviceProtectedStorage = value;
2413 return this;
2414 }
2415
2416 @Override
2417 public ParsingPackageImpl setDirectBootAware(boolean value) {
2418 directBootAware = value;
2419 return this;
2420 }
2421
2422 @Override
2423 public ParsingPackageImpl setPartiallyDirectBootAware(boolean value) {
2424 partiallyDirectBootAware = value;
2425 return this;
2426 }
2427
2428 @Override
2429 public ParsingPackageImpl setResizeableActivityViaSdkVersion(boolean value) {
2430 resizeableActivityViaSdkVersion = value;
2431 return this;
2432 }
2433
2434 @Override
2435 public ParsingPackageImpl setAllowClearUserDataOnFailedRestore(boolean value) {
2436 allowClearUserDataOnFailedRestore = value;
2437 return this;
2438 }
2439
2440 @Override
2441 public ParsingPackageImpl setAllowAudioPlaybackCapture(boolean value) {
2442 allowAudioPlaybackCapture = value;
2443 return this;
2444 }
2445
2446 @Override
2447 public ParsingPackageImpl setRequestLegacyExternalStorage(boolean value) {
2448 requestLegacyExternalStorage = value;
2449 return this;
2450 }
2451
2452 @Override
2453 public ParsingPackageImpl setUsesNonSdkApi(boolean value) {
2454 usesNonSdkApi = value;
2455 return this;
2456 }
2457
2458 @Override
2459 public ParsingPackageImpl setHasFragileUserData(boolean value) {
2460 hasFragileUserData = value;
2461 return this;
2462 }
2463
2464 @Override
2465 public ParsingPackageImpl setCantSaveState(boolean value) {
2466 cantSaveState = value;
2467 return this;
2468 }
2469
2470 @Override
2471 public ParsingPackageImpl setAllowNativeHeapPointerTagging(boolean value) {
2472 allowNativeHeapPointerTagging = value;
2473 return this;
2474 }
2475
2476 @Override
2477 public ParsingPackageImpl setPreserveLegacyExternalStorage(boolean value) {
2478 preserveLegacyExternalStorage = value;
2479 return this;
2480 }
Winsondec01d62020-02-21 10:44:58 -08002481
2482 @Override
2483 public ParsingPackageImpl setVersionName(String versionName) {
2484 this.versionName = versionName;
2485 return this;
2486 }
2487
2488 @Override
2489 public ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename) {
2490 this.compileSdkVersionCodeName = compileSdkVersionCodename;
2491 return this;
2492 }
2493
2494 @Override
2495 public ParsingPackageImpl setProcessName(String processName) {
2496 this.processName = processName;
2497 return this;
2498 }
2499
2500 @Override
2501 public ParsingPackageImpl setRealPackage(@Nullable String realPackage) {
2502 this.realPackage = realPackage;
2503 return this;
2504 }
2505
2506 @Override
2507 public ParsingPackageImpl setRestrictedAccountType(@Nullable String restrictedAccountType) {
2508 this.restrictedAccountType = restrictedAccountType;
2509 return this;
2510 }
2511
2512 @Override
2513 public ParsingPackageImpl setOverlayTargetName(@Nullable String overlayTargetName) {
2514 this.overlayTargetName = overlayTargetName;
2515 return this;
2516 }
2517
2518 @Override
2519 public ParsingPackageImpl setOverlayCategory(@Nullable String overlayCategory) {
2520 this.overlayCategory = overlayCategory;
2521 return this;
2522 }
2523
2524 @Override
2525 public ParsingPackageImpl setAppComponentFactory(@Nullable String appComponentFactory) {
2526 this.appComponentFactory = appComponentFactory;
2527 return this;
2528 }
2529
2530 @Override
2531 public ParsingPackageImpl setBackupAgentName(@Nullable String backupAgentName) {
2532 this.backupAgentName = backupAgentName;
2533 return this;
2534 }
2535
2536 @Override
2537 public ParsingPackageImpl setClassLoaderName(@Nullable String classLoaderName) {
2538 this.classLoaderName = classLoaderName;
2539 return this;
2540 }
2541
2542 @Override
2543 public ParsingPackageImpl setClassName(@Nullable String className) {
2544 this.className = className;
2545 return this;
2546 }
2547
2548 @Override
2549 public ParsingPackageImpl setManageSpaceActivityName(@Nullable String manageSpaceActivityName) {
2550 this.manageSpaceActivityName = manageSpaceActivityName;
2551 return this;
2552 }
2553
2554 @Override
2555 public ParsingPackageImpl setPermission(@Nullable String permission) {
2556 this.permission = permission;
2557 return this;
2558 }
2559
2560 @Override
2561 public ParsingPackageImpl setTaskAffinity(@Nullable String taskAffinity) {
2562 this.taskAffinity = taskAffinity;
2563 return this;
2564 }
2565
2566 @Override
2567 public ParsingPackageImpl setZygotePreloadName(@Nullable String zygotePreloadName) {
2568 this.zygotePreloadName = zygotePreloadName;
2569 return this;
2570 }
Winson01e38f42020-01-24 11:50:11 -08002571}