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