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 static com.android.server.pm.parsing.pkg.PackageImpl.sForInternedString; 20 21 import android.annotation.NonNull; 22 import android.annotation.Nullable; 23 import android.content.ComponentName; 24 import android.content.pm.PathPermission; 25 import android.os.Parcel; 26 import android.os.Parcelable; 27 import android.os.PatternMatcher; 28 import android.text.TextUtils; 29 30 import com.android.internal.annotations.VisibleForTesting; 31 import com.android.internal.util.CollectionUtils; 32 import com.android.internal.util.DataClass; 33 import com.android.internal.util.Parcelling.BuiltIn.ForInternedString; 34 35 import java.util.ArrayList; 36 import java.util.Collections; 37 import java.util.List; 38 39 /** 40 * @hide 41 **/ 42 @DataClass(genSetters = true, genGetters = true, genParcelable = false, genBuilder = false) 43 @DataClass.Suppress({"setUriPermissionPatterns", "setPathPermissions"}) 44 @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) 45 public class ParsedProviderImpl extends ParsedMainComponentImpl implements ParsedProvider, 46 Parcelable { 47 48 @Nullable 49 @DataClass.ParcelWith(ForInternedString.class) 50 private String authority; 51 private boolean syncable; 52 @Nullable 53 @DataClass.ParcelWith(ForInternedString.class) 54 private String readPermission; 55 @Nullable 56 @DataClass.ParcelWith(ForInternedString.class) 57 private String writePermission; 58 private boolean grantUriPermissions; 59 private boolean forceUriPermissions; 60 private boolean multiProcess; 61 private int initOrder; 62 @NonNull 63 private List<PatternMatcher> uriPermissionPatterns = Collections.emptyList(); 64 @NonNull 65 private List<PathPermission> pathPermissions = Collections.emptyList(); 66 ParsedProviderImpl(ParsedProvider other)67 public ParsedProviderImpl(ParsedProvider other) { 68 super(other); 69 70 this.authority = other.getAuthority(); 71 this.syncable = other.isSyncable(); 72 this.readPermission = other.getReadPermission(); 73 this.writePermission = other.getWritePermission(); 74 this.grantUriPermissions = other.isGrantUriPermissions(); 75 this.forceUriPermissions = other.isForceUriPermissions(); 76 this.multiProcess = other.isMultiProcess(); 77 this.initOrder = other.getInitOrder(); 78 this.uriPermissionPatterns = new ArrayList<>(other.getUriPermissionPatterns()); 79 this.pathPermissions = new ArrayList<>(other.getPathPermissions()); 80 } 81 setReadPermission(String readPermission)82 public ParsedProviderImpl setReadPermission(String readPermission) { 83 // Empty string must be converted to null 84 this.readPermission = TextUtils.isEmpty(readPermission) 85 ? null : readPermission.intern(); 86 return this; 87 } 88 setWritePermission(String writePermission)89 public ParsedProviderImpl setWritePermission(String writePermission) { 90 // Empty string must be converted to null 91 this.writePermission = TextUtils.isEmpty(writePermission) 92 ? null : writePermission.intern(); 93 return this; 94 } 95 96 @NonNull addUriPermissionPattern(@onNull PatternMatcher value)97 public ParsedProviderImpl addUriPermissionPattern(@NonNull PatternMatcher value) { 98 uriPermissionPatterns = CollectionUtils.add(uriPermissionPatterns, value); 99 return this; 100 } 101 102 @NonNull addPathPermission(@onNull PathPermission value)103 public ParsedProviderImpl addPathPermission(@NonNull PathPermission value) { 104 pathPermissions = CollectionUtils.add(pathPermissions, value); 105 return this; 106 } 107 toString()108 public String toString() { 109 StringBuilder sb = new StringBuilder(128); 110 sb.append("Provider{"); 111 sb.append(Integer.toHexString(System.identityHashCode(this))); 112 sb.append(' '); 113 ComponentName.appendShortString(sb, getPackageName(), getName()); 114 sb.append('}'); 115 return sb.toString(); 116 } 117 118 @Override describeContents()119 public int describeContents() { 120 return 0; 121 } 122 123 @Override writeToParcel(Parcel dest, int flags)124 public void writeToParcel(Parcel dest, int flags) { 125 super.writeToParcel(dest, flags); 126 dest.writeString(this.authority); 127 dest.writeBoolean(this.syncable); 128 sForInternedString.parcel(this.readPermission, dest, flags); 129 sForInternedString.parcel(this.writePermission, dest, flags); 130 dest.writeBoolean(this.grantUriPermissions); 131 dest.writeBoolean(this.forceUriPermissions); 132 dest.writeBoolean(this.multiProcess); 133 dest.writeInt(this.initOrder); 134 dest.writeTypedList(this.uriPermissionPatterns, flags); 135 dest.writeTypedList(this.pathPermissions, flags); 136 } 137 ParsedProviderImpl()138 public ParsedProviderImpl() { 139 } 140 ParsedProviderImpl(Parcel in)141 protected ParsedProviderImpl(Parcel in) { 142 super(in); 143 this.authority = in.readString(); 144 this.syncable = in.readBoolean(); 145 this.readPermission = sForInternedString.unparcel(in); 146 this.writePermission = sForInternedString.unparcel(in); 147 this.grantUriPermissions = in.readBoolean(); 148 this.forceUriPermissions = in.readBoolean(); 149 this.multiProcess = in.readBoolean(); 150 this.initOrder = in.readInt(); 151 this.uriPermissionPatterns = in.createTypedArrayList(PatternMatcher.CREATOR); 152 this.pathPermissions = in.createTypedArrayList(PathPermission.CREATOR); 153 } 154 155 @NonNull 156 public static final Parcelable.Creator<ParsedProviderImpl> CREATOR = 157 new Parcelable.Creator<ParsedProviderImpl>() { 158 @Override 159 public ParsedProviderImpl createFromParcel(Parcel source) { 160 return new ParsedProviderImpl(source); 161 } 162 163 @Override 164 public ParsedProviderImpl[] newArray(int size) { 165 return new ParsedProviderImpl[size]; 166 } 167 }; 168 169 170 171 // Code below generated by codegen v1.0.23. 172 // 173 // DO NOT MODIFY! 174 // CHECKSTYLE:OFF Generated code 175 // 176 // To regenerate run: 177 // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/component/ParsedProviderImpl.java 178 // 179 // To exclude the generated code from IntelliJ auto-formatting enable (one-time): 180 // Settings > Editor > Code Style > Formatter Control 181 //@formatter:off 182 183 184 @DataClass.Generated.Member ParsedProviderImpl( @ullable String authority, boolean syncable, @Nullable String readPermission, @Nullable String writePermission, boolean grantUriPermissions, boolean forceUriPermissions, boolean multiProcess, int initOrder, @NonNull List<PatternMatcher> uriPermissionPatterns, @NonNull List<PathPermission> pathPermissions)185 public ParsedProviderImpl( 186 @Nullable String authority, 187 boolean syncable, 188 @Nullable String readPermission, 189 @Nullable String writePermission, 190 boolean grantUriPermissions, 191 boolean forceUriPermissions, 192 boolean multiProcess, 193 int initOrder, 194 @NonNull List<PatternMatcher> uriPermissionPatterns, 195 @NonNull List<PathPermission> pathPermissions) { 196 this.authority = authority; 197 this.syncable = syncable; 198 this.readPermission = readPermission; 199 this.writePermission = writePermission; 200 this.grantUriPermissions = grantUriPermissions; 201 this.forceUriPermissions = forceUriPermissions; 202 this.multiProcess = multiProcess; 203 this.initOrder = initOrder; 204 this.uriPermissionPatterns = uriPermissionPatterns; 205 com.android.internal.util.AnnotationValidations.validate( 206 NonNull.class, null, uriPermissionPatterns); 207 this.pathPermissions = pathPermissions; 208 com.android.internal.util.AnnotationValidations.validate( 209 NonNull.class, null, pathPermissions); 210 211 // onConstructed(); // You can define this method to get a callback 212 } 213 214 @DataClass.Generated.Member getAuthority()215 public @Nullable String getAuthority() { 216 return authority; 217 } 218 219 @DataClass.Generated.Member isSyncable()220 public boolean isSyncable() { 221 return syncable; 222 } 223 224 @DataClass.Generated.Member getReadPermission()225 public @Nullable String getReadPermission() { 226 return readPermission; 227 } 228 229 @DataClass.Generated.Member getWritePermission()230 public @Nullable String getWritePermission() { 231 return writePermission; 232 } 233 234 @DataClass.Generated.Member isGrantUriPermissions()235 public boolean isGrantUriPermissions() { 236 return grantUriPermissions; 237 } 238 239 @DataClass.Generated.Member isForceUriPermissions()240 public boolean isForceUriPermissions() { 241 return forceUriPermissions; 242 } 243 244 @DataClass.Generated.Member isMultiProcess()245 public boolean isMultiProcess() { 246 return multiProcess; 247 } 248 249 @DataClass.Generated.Member getInitOrder()250 public int getInitOrder() { 251 return initOrder; 252 } 253 254 @DataClass.Generated.Member getUriPermissionPatterns()255 public @NonNull List<PatternMatcher> getUriPermissionPatterns() { 256 return uriPermissionPatterns; 257 } 258 259 @DataClass.Generated.Member getPathPermissions()260 public @NonNull List<PathPermission> getPathPermissions() { 261 return pathPermissions; 262 } 263 264 @DataClass.Generated.Member setAuthority(@onNull String value)265 public @NonNull ParsedProviderImpl setAuthority(@NonNull String value) { 266 authority = value; 267 return this; 268 } 269 270 @DataClass.Generated.Member setSyncable( boolean value)271 public @NonNull ParsedProviderImpl setSyncable( boolean value) { 272 syncable = value; 273 return this; 274 } 275 276 @DataClass.Generated.Member setGrantUriPermissions( boolean value)277 public @NonNull ParsedProviderImpl setGrantUriPermissions( boolean value) { 278 grantUriPermissions = value; 279 return this; 280 } 281 282 @DataClass.Generated.Member setForceUriPermissions( boolean value)283 public @NonNull ParsedProviderImpl setForceUriPermissions( boolean value) { 284 forceUriPermissions = value; 285 return this; 286 } 287 288 @DataClass.Generated.Member setMultiProcess( boolean value)289 public @NonNull ParsedProviderImpl setMultiProcess( boolean value) { 290 multiProcess = value; 291 return this; 292 } 293 294 @DataClass.Generated.Member setInitOrder( int value)295 public @NonNull ParsedProviderImpl setInitOrder( int value) { 296 initOrder = value; 297 return this; 298 } 299 300 @DataClass.Generated( 301 time = 1642560323360L, 302 codegenVersion = "1.0.23", 303 sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/component/ParsedProviderImpl.java", 304 inputSignatures = "private @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String authority\nprivate boolean syncable\nprivate @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String readPermission\nprivate @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String writePermission\nprivate boolean grantUriPermissions\nprivate boolean forceUriPermissions\nprivate boolean multiProcess\nprivate int initOrder\nprivate @android.annotation.NonNull java.util.List<android.os.PatternMatcher> uriPermissionPatterns\nprivate @android.annotation.NonNull java.util.List<android.content.pm.PathPermission> pathPermissions\npublic static final @android.annotation.NonNull android.os.Parcelable.Creator<com.android.server.pm.pkg.component.ParsedProviderImpl> CREATOR\npublic com.android.server.pm.pkg.component.ParsedProviderImpl setReadPermission(java.lang.String)\npublic com.android.server.pm.pkg.component.ParsedProviderImpl setWritePermission(java.lang.String)\npublic @android.annotation.NonNull com.android.server.pm.pkg.component.ParsedProviderImpl addUriPermissionPattern(android.os.PatternMatcher)\npublic @android.annotation.NonNull com.android.server.pm.pkg.component.ParsedProviderImpl addPathPermission(android.content.pm.PathPermission)\npublic java.lang.String toString()\npublic @java.lang.Override int describeContents()\npublic @java.lang.Override void writeToParcel(android.os.Parcel,int)\nclass ParsedProviderImpl extends com.android.server.pm.pkg.component.ParsedMainComponentImpl implements [com.android.server.pm.pkg.component.ParsedProvider, android.os.Parcelable]\n@com.android.internal.util.DataClass(genSetters=true, genGetters=true, genParcelable=false, genBuilder=false)") 305 @Deprecated __metadata()306 private void __metadata() {} 307 308 309 //@formatter:on 310 // End of generated code 311 312 } 313