• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 
17 package com.android.server.pm.parsing.pkg;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.content.pm.ActivityInfo;
22 import android.content.pm.ApplicationInfo;
23 import android.content.pm.PackageInfo;
24 import android.content.pm.PackageParser;
25 import android.content.pm.parsing.ParsingPackage;
26 import android.content.pm.parsing.ParsingPackageImpl;
27 import android.content.pm.parsing.component.ParsedActivity;
28 import android.content.pm.parsing.component.ParsedProvider;
29 import android.content.pm.parsing.component.ParsedService;
30 import android.content.res.TypedArray;
31 import android.os.Parcel;
32 import android.os.storage.StorageManager;
33 import android.text.TextUtils;
34 
35 import com.android.internal.annotations.VisibleForTesting;
36 import com.android.internal.util.CollectionUtils;
37 import com.android.internal.util.DataClass;
38 import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
39 import com.android.server.pm.parsing.PackageInfoUtils;
40 
41 import java.util.UUID;
42 
43 /**
44  * Extensions to {@link ParsingPackageImpl} including fields/state contained in the system server
45  * and not exposed to the core SDK.
46  *
47  * Many of the fields contained here will eventually be moved inside
48  * {@link com.android.server.pm.PackageSetting} or {@link android.content.pm.PackageUserState}.
49  *
50  * @hide
51  */
52 public final class PackageImpl extends ParsingPackageImpl implements ParsedPackage, AndroidPackage {
53 
forParsing(@onNull String packageName, @NonNull String baseCodePath, @NonNull String codePath, @NonNull TypedArray manifestArray, boolean isCoreApp)54     public static PackageImpl forParsing(@NonNull String packageName, @NonNull String baseCodePath,
55             @NonNull String codePath, @NonNull TypedArray manifestArray, boolean isCoreApp) {
56         return new PackageImpl(packageName, baseCodePath, codePath, manifestArray, isCoreApp);
57     }
58 
59     /**
60      * Mock an unavailable {@link AndroidPackage} to use when
61      * removing
62      * a package from the system.
63      * This can occur if the package was installed on a storage device that has since been removed.
64      * Since the infrastructure uses {@link AndroidPackage}, but
65      * for
66      * this case only cares about
67      * volumeUuid, just fake it rather than having separate method paths.
68      */
buildFakeForDeletion(String packageName, String volumeUuid)69     public static AndroidPackage buildFakeForDeletion(String packageName, String volumeUuid) {
70         return ((ParsedPackage) PackageImpl.forTesting(packageName)
71                 .setVolumeUuid(volumeUuid)
72                 .hideAsParsed())
73                 .hideAsFinal();
74     }
75 
76     @VisibleForTesting
forTesting(String packageName)77     public static ParsingPackage forTesting(String packageName) {
78         return forTesting(packageName, "");
79     }
80 
81     @VisibleForTesting
forTesting(String packageName, String baseCodePath)82     public static ParsingPackage forTesting(String packageName, String baseCodePath) {
83         return new PackageImpl(packageName, baseCodePath, baseCodePath, null, false);
84     }
85 
86     @NonNull
87     @DataClass.ParcelWith(ForInternedString.class)
88     private final String manifestPackageName;
89 
90     private boolean stub;
91 
92     @Nullable
93     @DataClass.ParcelWith(ForInternedString.class)
94     protected String nativeLibraryDir;
95 
96     @Nullable
97     @DataClass.ParcelWith(ForInternedString.class)
98     protected String nativeLibraryRootDir;
99 
100     private boolean nativeLibraryRootRequiresIsa;
101 
102     @Nullable
103     @DataClass.ParcelWith(ForInternedString.class)
104     protected String primaryCpuAbi;
105     @Nullable
106     @DataClass.ParcelWith(ForInternedString.class)
107     protected String secondaryCpuAbi;
108     @Nullable
109     @DataClass.ParcelWith(ForInternedString.class)
110     protected String secondaryNativeLibraryDir;
111 
112     @Nullable
113     @DataClass.ParcelWith(ForInternedString.class)
114     protected String seInfo;
115     @Nullable
116     @DataClass.ParcelWith(ForInternedString.class)
117     protected String seInfoUser;
118 
119     private boolean coreApp;
120 
121     private boolean system;
122     private boolean factoryTest;
123 
124     private boolean systemExt;
125     private boolean privileged;
126     private boolean oem;
127     private boolean vendor;
128     private boolean product;
129     private boolean odm;
130 
131     private boolean signedWithPlatformKey;
132 
133     /**
134      * This is an appId, the uid if the userId is == USER_SYSTEM
135      */
136     private int uid = -1;
137 
138     @VisibleForTesting
PackageImpl(@onNull String packageName, @NonNull String baseCodePath, @NonNull String codePath, @Nullable TypedArray manifestArray, boolean isCoreApp)139     public PackageImpl(@NonNull String packageName, @NonNull String baseCodePath,
140             @NonNull String codePath, @Nullable TypedArray manifestArray, boolean isCoreApp) {
141         super(packageName, baseCodePath, codePath, manifestArray);
142         this.manifestPackageName = this.packageName;
143         this.coreApp = isCoreApp;
144     }
145 
146     @Override
hideAsParsed()147     public ParsedPackage hideAsParsed() {
148         return this;
149     }
150 
151     @Override
hideAsFinal()152     public AndroidPackage hideAsFinal() {
153         // TODO(b/135203078): Lock as immutable
154         return this;
155     }
156 
157     @Override
getLongVersionCode()158     public long getLongVersionCode() {
159         return PackageInfo.composeLongVersionCode(versionCodeMajor, versionCode);
160     }
161 
162     @Override
removePermission(int index)163     public PackageImpl removePermission(int index) {
164         this.permissions.remove(index);
165         return this;
166     }
167 
168     @Override
addUsesOptionalLibrary(int index, String libraryName)169     public PackageImpl addUsesOptionalLibrary(int index, String libraryName) {
170         this.usesOptionalLibraries = CollectionUtils.add(usesOptionalLibraries, index,
171                 TextUtils.safeIntern(libraryName));
172         return this;
173     }
174 
175     @Override
addUsesLibrary(int index, String libraryName)176     public PackageImpl addUsesLibrary(int index, String libraryName) {
177         this.usesLibraries = CollectionUtils.add(usesLibraries, index,
178                 TextUtils.safeIntern(libraryName));
179         return this;
180     }
181 
182     @Override
removeUsesLibrary(String libraryName)183     public PackageImpl removeUsesLibrary(String libraryName) {
184         this.usesLibraries = CollectionUtils.remove(this.usesLibraries, libraryName);
185         return this;
186     }
187 
188     @Override
removeUsesOptionalLibrary(String libraryName)189     public PackageImpl removeUsesOptionalLibrary(String libraryName) {
190         super.removeUsesOptionalLibrary(libraryName);
191         return this;
192     }
193 
194     @Override
setSigningDetails(@ullable PackageParser.SigningDetails value)195     public PackageImpl setSigningDetails(@Nullable PackageParser.SigningDetails value) {
196         super.setSigningDetails(value);
197         return this;
198     }
199 
200     @Override
setRestrictUpdateHash(@ullable byte... value)201     public PackageImpl setRestrictUpdateHash(@Nullable byte... value) {
202         super.setRestrictUpdateHash(value);
203         return this;
204     }
205 
206     @Override
setRealPackage(@ullable String realPackage)207     public PackageImpl setRealPackage(@Nullable String realPackage) {
208         super.setRealPackage(realPackage);
209         return this;
210     }
211 
212     @Override
setPersistent(boolean value)213     public PackageImpl setPersistent(boolean value) {
214         super.setPersistent(value);
215         return this;
216     }
217 
218     @Override
setDefaultToDeviceProtectedStorage(boolean value)219     public PackageImpl setDefaultToDeviceProtectedStorage(boolean value) {
220         super.setDefaultToDeviceProtectedStorage(value);
221         return this;
222     }
223 
224     @Override
setDirectBootAware(boolean value)225     public PackageImpl setDirectBootAware(boolean value) {
226         super.setDirectBootAware(value);
227         return this;
228     }
229 
230     @Override
clearProtectedBroadcasts()231     public PackageImpl clearProtectedBroadcasts() {
232         protectedBroadcasts.clear();
233         return this;
234     }
235 
236     @Override
clearOriginalPackages()237     public PackageImpl clearOriginalPackages() {
238         originalPackages.clear();
239         return this;
240     }
241 
242     @Override
clearAdoptPermissions()243     public PackageImpl clearAdoptPermissions() {
244         adoptPermissions.clear();
245         return this;
246     }
247 
248     @Override
setCodePath(@onNull String value)249     public PackageImpl setCodePath(@NonNull String value) {
250         this.codePath = value;
251         return this;
252     }
253 
254     // TODO(b/135203078): Move PackageManagerService#renameStaticSharedLibraryPackage
255     //  into initial package parsing
256     @Override
setPackageName(@onNull String packageName)257     public PackageImpl setPackageName(@NonNull String packageName) {
258         this.packageName = TextUtils.safeIntern(packageName);
259 
260         int permissionsSize = permissions.size();
261         for (int index = 0; index < permissionsSize; index++) {
262             permissions.get(index).setPackageName(this.packageName);
263         }
264 
265         int permissionGroupsSize = permissionGroups.size();
266         for (int index = 0; index < permissionGroupsSize; index++) {
267             permissionGroups.get(index).setPackageName(this.packageName);
268         }
269 
270         int activitiesSize = activities.size();
271         for (int index = 0; index < activitiesSize; index++) {
272             activities.get(index).setPackageName(this.packageName);
273         }
274 
275         int receiversSize = receivers.size();
276         for (int index = 0; index < receiversSize; index++) {
277             receivers.get(index).setPackageName(this.packageName);
278         }
279 
280         int providersSize = providers.size();
281         for (int index = 0; index < providersSize; index++) {
282             providers.get(index).setPackageName(this.packageName);
283         }
284 
285         int servicesSize = services.size();
286         for (int index = 0; index < servicesSize; index++) {
287             services.get(index).setPackageName(this.packageName);
288         }
289 
290         int instrumentationsSize = instrumentations.size();
291         for (int index = 0; index < instrumentationsSize; index++) {
292             instrumentations.get(index).setPackageName(this.packageName);
293         }
294 
295         return this;
296     }
297 
298     @Override
setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware)299     public PackageImpl setAllComponentsDirectBootAware(boolean allComponentsDirectBootAware) {
300         int activitiesSize = activities.size();
301         for (int index = 0; index < activitiesSize; index++) {
302             activities.get(index).setDirectBootAware(allComponentsDirectBootAware);
303         }
304 
305         int receiversSize = receivers.size();
306         for (int index = 0; index < receiversSize; index++) {
307             receivers.get(index).setDirectBootAware(allComponentsDirectBootAware);
308         }
309 
310         int providersSize = providers.size();
311         for (int index = 0; index < providersSize; index++) {
312             providers.get(index).setDirectBootAware(allComponentsDirectBootAware);
313         }
314 
315         int servicesSize = services.size();
316         for (int index = 0; index < servicesSize; index++) {
317             services.get(index).setDirectBootAware(allComponentsDirectBootAware);
318         }
319 
320         return this;
321     }
322 
323     @Override
setBaseCodePath(@onNull String baseCodePath)324     public PackageImpl setBaseCodePath(@NonNull String baseCodePath) {
325         this.baseCodePath = TextUtils.safeIntern(baseCodePath);
326         return this;
327     }
328 
329     @Override
setNativeLibraryDir(@ullable String nativeLibraryDir)330     public PackageImpl setNativeLibraryDir(@Nullable String nativeLibraryDir) {
331         this.nativeLibraryDir = TextUtils.safeIntern(nativeLibraryDir);
332         return this;
333     }
334 
335     @Override
setNativeLibraryRootDir(@ullable String nativeLibraryRootDir)336     public PackageImpl setNativeLibraryRootDir(@Nullable String nativeLibraryRootDir) {
337         this.nativeLibraryRootDir = TextUtils.safeIntern(nativeLibraryRootDir);
338         return this;
339     }
340 
341     @Override
setPrimaryCpuAbi(@ullable String primaryCpuAbi)342     public PackageImpl setPrimaryCpuAbi(@Nullable String primaryCpuAbi) {
343         this.primaryCpuAbi = TextUtils.safeIntern(primaryCpuAbi);
344         return this;
345     }
346 
347     @Override
setSecondaryCpuAbi(@ullable String secondaryCpuAbi)348     public PackageImpl setSecondaryCpuAbi(@Nullable String secondaryCpuAbi) {
349         this.secondaryCpuAbi = TextUtils.safeIntern(secondaryCpuAbi);
350         return this;
351     }
352 
353     @Override
setSecondaryNativeLibraryDir(@ullable String secondaryNativeLibraryDir)354     public PackageImpl setSecondaryNativeLibraryDir(@Nullable String secondaryNativeLibraryDir) {
355         this.secondaryNativeLibraryDir = TextUtils.safeIntern(secondaryNativeLibraryDir);
356         return this;
357     }
358 
359     @Override
setSeInfo(@ullable String seInfo)360     public PackageImpl setSeInfo(@Nullable String seInfo) {
361         this.seInfo = TextUtils.safeIntern(seInfo);
362         return this;
363     }
364 
365     @Override
setSeInfoUser(@ullable String seInfoUser)366     public PackageImpl setSeInfoUser(@Nullable String seInfoUser) {
367         this.seInfoUser = TextUtils.safeIntern(seInfoUser);
368         return this;
369     }
370 
371     @Override
setSplitCodePaths(@ullable String[] splitCodePaths)372     public PackageImpl setSplitCodePaths(@Nullable String[] splitCodePaths) {
373         this.splitCodePaths = splitCodePaths;
374         if (splitCodePaths != null) {
375             int size = splitCodePaths.length;
376             for (int index = 0; index < size; index++) {
377                 this.splitCodePaths[index] = TextUtils.safeIntern(this.splitCodePaths[index]);
378             }
379         }
380         return this;
381     }
382 
383     @Override
capPermissionPriorities()384     public PackageImpl capPermissionPriorities() {
385         int size = permissionGroups.size();
386         for (int index = size - 1; index >= 0; --index) {
387             // TODO(b/135203078): Builder/immutability
388             permissionGroups.get(index).setPriority(0);
389         }
390         return this;
391     }
392 
393     @Override
markNotActivitiesAsNotExportedIfSingleUser()394     public PackageImpl markNotActivitiesAsNotExportedIfSingleUser() {
395         // ignore export request for single user receivers
396         int receiversSize = receivers.size();
397         for (int index = 0; index < receiversSize; index++) {
398             ParsedActivity receiver = receivers.get(index);
399             if ((receiver.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) {
400                 receiver.setExported(false);
401             }
402         }
403 
404         // ignore export request for single user services
405         int servicesSize = services.size();
406         for (int index = 0; index < servicesSize; index++) {
407             ParsedService service = services.get(index);
408             if ((service.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) {
409                 service.setExported(false);
410             }
411         }
412 
413         // ignore export request for single user providers
414         int providersSize = providers.size();
415         for (int index = 0; index < providersSize; index++) {
416             ParsedProvider provider = providers.get(index);
417             if ((provider.getFlags() & ActivityInfo.FLAG_SINGLE_USER) != 0) {
418                 provider.setExported(false);
419             }
420         }
421 
422         return this;
423     }
424 
425     @Override
getStorageUuid()426     public UUID getStorageUuid() {
427         return StorageManager.convert(volumeUuid);
428     }
429 
430     @Deprecated
431     @Override
toAppInfoToString()432     public String toAppInfoToString() {
433         return "ApplicationInfo{"
434                 + Integer.toHexString(System.identityHashCode(this))
435                 + " " + getPackageName() + "}";
436     }
437 
438     @Override
setCoreApp(boolean coreApp)439     public ParsedPackage setCoreApp(boolean coreApp) {
440         this.coreApp = coreApp;
441         return this;
442     }
443 
444     @Override
setVersionCode(int versionCode)445     public ParsedPackage setVersionCode(int versionCode) {
446         this.versionCode = versionCode;
447         return this;
448     }
449 
450     @Override
setVersionCodeMajor(int versionCodeMajor)451     public ParsedPackage setVersionCodeMajor(int versionCodeMajor) {
452         this.versionCodeMajor = versionCodeMajor;
453         return this;
454     }
455 
456     @Override
toAppInfoWithoutState()457     public ApplicationInfo toAppInfoWithoutState() {
458         ApplicationInfo appInfo = super.toAppInfoWithoutStateWithoutFlags();
459         appInfo.flags = PackageInfoUtils.appInfoFlags(this, null);
460         appInfo.privateFlags = PackageInfoUtils.appInfoPrivateFlags(this, null);
461         appInfo.nativeLibraryDir = nativeLibraryDir;
462         appInfo.nativeLibraryRootDir = nativeLibraryRootDir;
463         appInfo.nativeLibraryRootRequiresIsa = nativeLibraryRootRequiresIsa;
464         appInfo.primaryCpuAbi = primaryCpuAbi;
465         appInfo.secondaryCpuAbi = secondaryCpuAbi;
466         appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir;
467         appInfo.seInfo = seInfo;
468         appInfo.seInfoUser = seInfoUser;
469         appInfo.uid = uid;
470         return appInfo;
471     }
472 
473     @Override
describeContents()474     public int describeContents() {
475         return 0;
476     }
477 
478     @Override
writeToParcel(Parcel dest, int flags)479     public void writeToParcel(Parcel dest, int flags) {
480         super.writeToParcel(dest, flags);
481         sForInternedString.parcel(this.manifestPackageName, dest, flags);
482         dest.writeBoolean(this.stub);
483         dest.writeString(this.nativeLibraryDir);
484         dest.writeString(this.nativeLibraryRootDir);
485         dest.writeBoolean(this.nativeLibraryRootRequiresIsa);
486         sForInternedString.parcel(this.primaryCpuAbi, dest, flags);
487         sForInternedString.parcel(this.secondaryCpuAbi, dest, flags);
488         dest.writeString(this.secondaryNativeLibraryDir);
489         dest.writeString(this.seInfo);
490         dest.writeString(this.seInfoUser);
491         dest.writeInt(this.uid);
492         dest.writeBoolean(this.coreApp);
493         dest.writeBoolean(this.system);
494         dest.writeBoolean(this.factoryTest);
495         dest.writeBoolean(this.systemExt);
496         dest.writeBoolean(this.privileged);
497         dest.writeBoolean(this.oem);
498         dest.writeBoolean(this.vendor);
499         dest.writeBoolean(this.product);
500         dest.writeBoolean(this.odm);
501         dest.writeBoolean(this.signedWithPlatformKey);
502     }
503 
PackageImpl(Parcel in)504     public PackageImpl(Parcel in) {
505         super(in);
506         this.manifestPackageName = sForInternedString.unparcel(in);
507         this.stub = in.readBoolean();
508         this.nativeLibraryDir = in.readString();
509         this.nativeLibraryRootDir = in.readString();
510         this.nativeLibraryRootRequiresIsa = in.readBoolean();
511         this.primaryCpuAbi = sForInternedString.unparcel(in);
512         this.secondaryCpuAbi = sForInternedString.unparcel(in);
513         this.secondaryNativeLibraryDir = in.readString();
514         this.seInfo = in.readString();
515         this.seInfoUser = in.readString();
516         this.uid = in.readInt();
517         this.coreApp = in.readBoolean();
518         this.system = in.readBoolean();
519         this.factoryTest = in.readBoolean();
520         this.systemExt = in.readBoolean();
521         this.privileged = in.readBoolean();
522         this.oem = in.readBoolean();
523         this.vendor = in.readBoolean();
524         this.product = in.readBoolean();
525         this.odm = in.readBoolean();
526         this.signedWithPlatformKey = in.readBoolean();
527     }
528 
529     public static final Creator<PackageImpl> CREATOR = new Creator<PackageImpl>() {
530         @Override
531         public PackageImpl createFromParcel(Parcel source) {
532             return new PackageImpl(source);
533         }
534 
535         @Override
536         public PackageImpl[] newArray(int size) {
537             return new PackageImpl[size];
538         }
539     };
540 
541     @NonNull
542     @Override
getManifestPackageName()543     public String getManifestPackageName() {
544         return manifestPackageName;
545     }
546 
547     @DataClass.Generated.Member
isStub()548     public boolean isStub() {
549         return stub;
550     }
551 
552     @Nullable
553     @Override
getNativeLibraryDir()554     public String getNativeLibraryDir() {
555         return nativeLibraryDir;
556     }
557 
558     @Nullable
559     @Override
getNativeLibraryRootDir()560     public String getNativeLibraryRootDir() {
561         return nativeLibraryRootDir;
562     }
563 
564     @Override
isNativeLibraryRootRequiresIsa()565     public boolean isNativeLibraryRootRequiresIsa() {
566         return nativeLibraryRootRequiresIsa;
567     }
568 
569     @Nullable
570     @Override
getPrimaryCpuAbi()571     public String getPrimaryCpuAbi() {
572         return primaryCpuAbi;
573     }
574 
575     @Nullable
576     @Override
getSecondaryCpuAbi()577     public String getSecondaryCpuAbi() {
578         return secondaryCpuAbi;
579     }
580 
581     @Nullable
582     @Override
getSecondaryNativeLibraryDir()583     public String getSecondaryNativeLibraryDir() {
584         return secondaryNativeLibraryDir;
585     }
586 
587     @Nullable
588     @Override
getSeInfo()589     public String getSeInfo() {
590         return seInfo;
591     }
592 
593     @Nullable
594     @Override
getSeInfoUser()595     public String getSeInfoUser() {
596         return seInfoUser;
597     }
598 
599     @Override
isCoreApp()600     public boolean isCoreApp() {
601         return coreApp;
602     }
603 
604     @Override
isSystem()605     public boolean isSystem() {
606         return system;
607     }
608 
609     @Override
isFactoryTest()610     public boolean isFactoryTest() {
611         return factoryTest;
612     }
613 
614     @Override
isSystemExt()615     public boolean isSystemExt() {
616         return systemExt;
617     }
618 
619     @Override
isPrivileged()620     public boolean isPrivileged() {
621         return privileged;
622     }
623 
624     @Override
isOem()625     public boolean isOem() {
626         return oem;
627     }
628 
629     @Override
isVendor()630     public boolean isVendor() {
631         return vendor;
632     }
633 
634     @Override
isProduct()635     public boolean isProduct() {
636         return product;
637     }
638 
639     @Override
isOdm()640     public boolean isOdm() {
641         return odm;
642     }
643 
644     @Override
isSignedWithPlatformKey()645     public boolean isSignedWithPlatformKey() {
646         return signedWithPlatformKey;
647     }
648 
649     /**
650      * This is an appId, the uid if the userId is == USER_SYSTEM
651      */
652     @Override
getUid()653     public int getUid() {
654         return uid;
655     }
656 
657     @DataClass.Generated.Member
setStub(boolean value)658     public PackageImpl setStub(boolean value) {
659         stub = value;
660         return this;
661     }
662 
663     @Override
setNativeLibraryRootRequiresIsa(boolean value)664     public PackageImpl setNativeLibraryRootRequiresIsa(boolean value) {
665         nativeLibraryRootRequiresIsa = value;
666         return this;
667     }
668 
669     @Override
setSystem(boolean value)670     public PackageImpl setSystem(boolean value) {
671         system = value;
672         return this;
673     }
674 
675     @Override
setFactoryTest(boolean value)676     public PackageImpl setFactoryTest(boolean value) {
677         factoryTest = value;
678         return this;
679     }
680 
681     @Override
setSystemExt(boolean value)682     public PackageImpl setSystemExt(boolean value) {
683         systemExt = value;
684         return this;
685     }
686 
687     @Override
setPrivileged(boolean value)688     public PackageImpl setPrivileged(boolean value) {
689         privileged = value;
690         return this;
691     }
692 
693     @Override
setOem(boolean value)694     public PackageImpl setOem(boolean value) {
695         oem = value;
696         return this;
697     }
698 
699     @Override
setVendor(boolean value)700     public PackageImpl setVendor(boolean value) {
701         vendor = value;
702         return this;
703     }
704 
705     @Override
setProduct(boolean value)706     public PackageImpl setProduct(boolean value) {
707         product = value;
708         return this;
709     }
710 
711     @Override
setOdm(boolean value)712     public PackageImpl setOdm(boolean value) {
713         odm = value;
714         return this;
715     }
716 
717     @Override
setSignedWithPlatformKey(boolean value)718     public PackageImpl setSignedWithPlatformKey(boolean value) {
719         signedWithPlatformKey = value;
720         return this;
721     }
722 
723     /**
724      * This is an appId, the uid if the userId is == USER_SYSTEM
725      */
726     @Override
setUid(int value)727     public PackageImpl setUid(int value) {
728         uid = value;
729         return this;
730     }
731 
732     @DataClass.Generated(
733             time = 1580517688900L,
734             codegenVersion = "1.0.14",
735             sourceFile = "frameworks/base/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java",
736             inputSignatures = "private final @android.annotation.NonNull @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String manifestPackageName\nprivate  boolean stub\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String nativeLibraryDir\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String nativeLibraryRootDir\nprivate  boolean nativeLibraryRootRequiresIsa\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String primaryCpuAbi\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String secondaryCpuAbi\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String secondaryNativeLibraryDir\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String seInfo\nprotected @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String seInfoUser\nprivate  boolean system\nprivate  boolean factoryTest\nprivate  boolean systemExt\nprivate  boolean privileged\nprivate  boolean oem\nprivate  boolean vendor\nprivate  boolean product\nprivate  boolean odm\nprivate  boolean signedWithPlatformKey\nprivate  int uid\npublic static final  com.android.server.pm.parsing.pkg.Creator<com.android.server.pm.parsing.pkg.PackageImpl> CREATOR\npublic static  com.android.server.pm.parsing.pkg.PackageImpl forParsing(java.lang.String,java.lang.String,java.lang.String,android.content.res.TypedArray,boolean)\npublic static  com.android.server.pm.parsing.pkg.AndroidPackage buildFakeForDeletion(java.lang.String,java.lang.String)\npublic static @com.android.internal.annotations.VisibleForTesting android.content.pm.parsing.ParsingPackage forTesting(java.lang.String)\npublic static @com.android.internal.annotations.VisibleForTesting android.content.pm.parsing.ParsingPackage forTesting(java.lang.String,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage hideAsParsed()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.AndroidPackage hideAsFinal()\npublic @java.lang.Override long getLongVersionCode()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removePermission(int)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl addUsesOptionalLibrary(int,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl addUsesLibrary(int,java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removeUsesLibrary(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl removeUsesOptionalLibrary(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSigningDetails(android.content.pm.PackageParser.SigningDetails)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setRestrictUpdateHash(byte)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setRealPackage(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPersistent(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setDefaultToDeviceProtectedStorage(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setDirectBootAware(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearProtectedBroadcasts()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearOriginalPackages()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl clearAdoptPermissions()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setCodePath(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPackageName(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setAllComponentsDirectBootAware(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setBaseCodePath(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setNativeLibraryDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setNativeLibraryRootDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setPrimaryCpuAbi(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSecondaryCpuAbi(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSecondaryNativeLibraryDir(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSeInfo(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSeInfoUser(java.lang.String)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl setSplitCodePaths(java.lang.String[])\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl capPermissionPriorities()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.PackageImpl markNotActivitiesAsNotExportedIfSingleUser()\npublic @java.lang.Override java.util.UUID getStorageUuid()\npublic @java.lang.Deprecated @java.lang.Override java.lang.String toAppInfoToString()\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setCoreApp(boolean)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setVersionCode(int)\npublic @java.lang.Override com.android.server.pm.parsing.pkg.ParsedPackage setVersionCodeMajor(int)\npublic @java.lang.Override android.content.pm.ApplicationInfo toAppInfoWithoutState()\npublic @java.lang.Override int describeContents()\npublic @java.lang.Override void writeToParcel(android.os.Parcel,int)\nclass PackageImpl extends android.content.pm.parsing.ParsingPackageImpl implements [com.android.server.pm.parsing.pkg.ParsedPackage, com.android.server.pm.parsing.pkg.AndroidPackage]\n@com.android.internal.util.DataClass(genConstructor=false, genParcelable=false, genAidl=false, genBuilder=false, genHiddenConstructor=false, genCopyConstructor=false)")
737     @Deprecated
__metadata()738     private void __metadata() {}
739 
740 
741     //@formatter:on
742     // End of generated code
743 
744 }
745