• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.pm.pkg.component;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.os.Parcel;
22 import android.os.Parcelable;
23 import android.text.TextUtils;
24 import android.util.ArraySet;
25 
26 import com.android.internal.annotations.VisibleForTesting;
27 import com.android.internal.util.DataClass;
28 import com.android.internal.util.Parcelling;
29 import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;
30 import com.android.internal.util.Parcelling.BuiltIn.ForStringSet;
31 
32 import java.util.Collections;
33 import java.util.Locale;
34 import java.util.Set;
35 
36 /**
37  * @hide
38  */
39 @DataClass(genGetters = true, genSetters = true, genBuilder = false, genParcelable = false)
40 @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
41 public class ParsedPermissionImpl extends ParsedComponentImpl implements ParsedPermission,
42         Parcelable {
43 
44     private static ForStringSet sForStringSet = Parcelling.Cache.getOrCreate(ForStringSet.class);
45 
46     @Nullable
47     private String backgroundPermission;
48     @Nullable
49     @DataClass.ParcelWith(ForInternedString.class)
50     private String group;
51     private int requestRes;
52     private int protectionLevel;
53     private boolean tree;
54     @Nullable
55     private ParsedPermissionGroup parsedPermissionGroup;
56     @Nullable
57     private Set<String> knownCerts;
58 
59     @VisibleForTesting
ParsedPermissionImpl()60     public ParsedPermissionImpl() {
61     }
62 
getParsedPermissionGroup()63     public ParsedPermissionGroup getParsedPermissionGroup() {
64         return parsedPermissionGroup;
65     }
66 
setGroup(String group)67     public ParsedPermissionImpl setGroup(String group) {
68         this.group = TextUtils.safeIntern(group);
69         return this;
70     }
71 
setKnownCert(String knownCert)72     protected void setKnownCert(String knownCert) {
73         // Convert the provided digest to upper case for consistent Set membership
74         // checks when verifying the signing certificate digests of requesting apps.
75         this.knownCerts = Set.of(knownCert.toUpperCase(Locale.US));
76     }
77 
setKnownCerts(String[] knownCerts)78     protected void setKnownCerts(String[] knownCerts) {
79         this.knownCerts = new ArraySet<>();
80         for (String knownCert : knownCerts) {
81             this.knownCerts.add(knownCert.toUpperCase(Locale.US));
82         }
83     }
84 
85     @NonNull
86     @Override
getKnownCerts()87     public Set<String> getKnownCerts() {
88         return knownCerts == null ? Collections.emptySet() : knownCerts;
89     }
90 
toString()91     public String toString() {
92         return "Permission{"
93                 + Integer.toHexString(System.identityHashCode(this))
94                 + " " + getName() + "}";
95     }
96 
97     @Override
describeContents()98     public int describeContents() {
99         return 0;
100     }
101 
102     @Override
writeToParcel(Parcel dest, int flags)103     public void writeToParcel(Parcel dest, int flags) {
104         super.writeToParcel(dest, flags);
105         dest.writeString(this.backgroundPermission);
106         dest.writeString(this.group);
107         dest.writeInt(this.requestRes);
108         dest.writeInt(this.protectionLevel);
109         dest.writeBoolean(this.tree);
110         dest.writeParcelable((ParsedPermissionGroupImpl) this.parsedPermissionGroup, flags);
111         sForStringSet.parcel(knownCerts, dest, flags);
112     }
113 
ParsedPermissionImpl(Parcel in)114     protected ParsedPermissionImpl(Parcel in) {
115         super(in);
116         this.backgroundPermission = in.readString();
117         this.group = TextUtils.safeIntern(in.readString());
118         this.requestRes = in.readInt();
119         this.protectionLevel = in.readInt();
120         this.tree = in.readBoolean();
121         this.parsedPermissionGroup = in.readParcelable(ParsedPermissionGroup.class.getClassLoader(),
122                 ParsedPermissionGroupImpl.class);
123         this.knownCerts = sForStringSet.unparcel(in);
124     }
125 
126     @NonNull
127     public static final Parcelable.Creator<ParsedPermissionImpl> CREATOR =
128             new Parcelable.Creator<ParsedPermissionImpl>() {
129                 @Override
130                 public ParsedPermissionImpl createFromParcel(Parcel source) {
131                     return new ParsedPermissionImpl(source);
132                 }
133 
134                 @Override
135                 public ParsedPermissionImpl[] newArray(int size) {
136                     return new ParsedPermissionImpl[size];
137                 }
138             };
139 
140 
141 
142     // Code below generated by codegen v1.0.23.
143     //
144     // DO NOT MODIFY!
145     // CHECKSTYLE:OFF Generated code
146     //
147     // To regenerate run:
148     // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/content/pm/parsing/component/ParsedPermissionImpl.java
149     //
150     // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
151     //   Settings > Editor > Code Style > Formatter Control
152     //@formatter:off
153 
154 
155     @DataClass.Generated.Member
ParsedPermissionImpl( @ullable String backgroundPermission, @Nullable String group, int requestRes, int protectionLevel, boolean tree, @Nullable ParsedPermissionGroupImpl parsedPermissionGroup, @Nullable Set<String> knownCerts)156     public ParsedPermissionImpl(
157             @Nullable String backgroundPermission,
158             @Nullable String group,
159             int requestRes,
160             int protectionLevel,
161             boolean tree,
162             @Nullable ParsedPermissionGroupImpl parsedPermissionGroup,
163             @Nullable Set<String> knownCerts) {
164         this.backgroundPermission = backgroundPermission;
165         this.group = group;
166         this.requestRes = requestRes;
167         this.protectionLevel = protectionLevel;
168         this.tree = tree;
169         this.parsedPermissionGroup = parsedPermissionGroup;
170         this.knownCerts = knownCerts;
171 
172         // onConstructed(); // You can define this method to get a callback
173     }
174 
175     @DataClass.Generated.Member
getBackgroundPermission()176     public @Nullable String getBackgroundPermission() {
177         return backgroundPermission;
178     }
179 
180     @DataClass.Generated.Member
getGroup()181     public @Nullable String getGroup() {
182         return group;
183     }
184 
185     @DataClass.Generated.Member
getRequestRes()186     public int getRequestRes() {
187         return requestRes;
188     }
189 
190     @DataClass.Generated.Member
getProtectionLevel()191     public int getProtectionLevel() {
192         return protectionLevel;
193     }
194 
195     @DataClass.Generated.Member
isTree()196     public boolean isTree() {
197         return tree;
198     }
199 
200     @DataClass.Generated.Member
setBackgroundPermission(@onNull String value)201     public @NonNull ParsedPermissionImpl setBackgroundPermission(@NonNull String value) {
202         backgroundPermission = value;
203         return this;
204     }
205 
206     @DataClass.Generated.Member
setRequestRes( int value)207     public @NonNull ParsedPermissionImpl setRequestRes( int value) {
208         requestRes = value;
209         return this;
210     }
211 
212     @DataClass.Generated.Member
setProtectionLevel( int value)213     public @NonNull ParsedPermissionImpl setProtectionLevel( int value) {
214         protectionLevel = value;
215         return this;
216     }
217 
218     @DataClass.Generated.Member
setTree( boolean value)219     public @NonNull ParsedPermissionImpl setTree( boolean value) {
220         tree = value;
221         return this;
222     }
223 
224     @DataClass.Generated.Member
setParsedPermissionGroup(@onNull ParsedPermissionGroup value)225     public @NonNull ParsedPermissionImpl setParsedPermissionGroup(@NonNull ParsedPermissionGroup value) {
226         parsedPermissionGroup = value;
227         return this;
228     }
229 
230     @DataClass.Generated.Member
setKnownCerts(@onNull Set<String> value)231     public @NonNull ParsedPermissionImpl setKnownCerts(@NonNull Set<String> value) {
232         knownCerts = value;
233         return this;
234     }
235 
236     @DataClass.Generated(
237             time = 1641414649731L,
238             codegenVersion = "1.0.23",
239             sourceFile = "frameworks/base/core/java/android/content/pm/parsing/component/ParsedPermissionImpl.java",
240             inputSignatures = "private static  com.android.internal.util.Parcelling.BuiltIn.ForStringSet sForStringSet\nprivate @android.annotation.Nullable java.lang.String backgroundPermission\nprivate @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String group\nprivate  int requestRes\nprivate  int protectionLevel\nprivate  boolean tree\nprivate @android.annotation.Nullable android.content.pm.parsing.component.ParsedPermissionGroupImpl parsedPermissionGroup\nprivate @android.annotation.Nullable java.util.Set<java.lang.String> knownCerts\npublic static final @android.annotation.NonNull android.os.Parcelable.Creator<android.content.pm.parsing.component.ParsedPermissionImpl> CREATOR\npublic  android.content.pm.parsing.component.ParsedPermissionGroup getParsedPermissionGroup()\npublic  android.content.pm.parsing.component.ParsedPermissionImpl setGroup(java.lang.String)\nprotected  void setKnownCert(java.lang.String)\nprotected  void setKnownCerts(java.lang.String[])\npublic @android.annotation.NonNull @java.lang.Override java.util.Set<java.lang.String> getKnownCerts()\npublic  java.lang.String toString()\npublic @java.lang.Override int describeContents()\npublic @java.lang.Override void writeToParcel(android.os.Parcel,int)\nclass ParsedPermissionImpl extends android.content.pm.parsing.component.ParsedComponentImpl implements [android.content.pm.parsing.component.ParsedPermission, android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=true, genBuilder=false, genParcelable=false)")
241     @Deprecated
__metadata()242     private void __metadata() {}
243 
244 
245     //@formatter:on
246     // End of generated code
247 
248 }
249