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.internal.pm.pkg.component; 18 19 import static com.android.internal.pm.parsing.pkg.PackageImpl.sForInternedString; 20 21 import android.annotation.NonNull; 22 import android.annotation.Nullable; 23 import android.os.Parcel; 24 import android.os.Parcelable; 25 import android.text.TextUtils; 26 27 import com.android.internal.util.DataClass; 28 import com.android.internal.util.Parcelling.BuiltIn.ForInternedString; 29 30 import libcore.util.EmptyArray; 31 32 /** 33 * @hide 34 */ 35 @DataClass(genGetters = true, genSetters = true, genBuilder = false, genParcelable = false) 36 public class ParsedMainComponentImpl extends ParsedComponentImpl implements ParsedMainComponent, 37 Parcelable { 38 39 @Nullable 40 @DataClass.ParcelWith(ForInternedString.class) 41 private String processName; 42 private boolean directBootAware; 43 private boolean enabled = true; 44 private boolean exported; 45 private int order; 46 47 @Nullable 48 private String splitName; 49 @Nullable 50 private String[] attributionTags; 51 52 private int mIntentMatchingFlags; 53 54 /** 55 * Opt-out of all intent filter matching rules. The value corresponds to the <code>none</code> 56 * value of {@link android.R.attr#intentMatchingFlags} 57 * @hide 58 */ 59 public static final int INTENT_MATCHING_FLAGS_NONE = 1; 60 61 /** 62 * Opt-in to enforce intent filter matching. The value corresponds to the 63 * <code>enforceIntentFilter</code> value of {@link android.R.attr#intentMatchingFlags} 64 * @hide 65 */ 66 public static final int INTENT_MATCHING_FLAGS_ENFORCE_INTENT_FILTER = 1 << 1; 67 68 /** 69 * Allows intent filters to match actions even when the action value is null. The value 70 * corresponds to the <code>allowNullAction</code> value of 71 * {@link android.R.attr#intentMatchingFlags} 72 * @hide 73 */ 74 public static final int INTENT_MATCHING_FLAGS_ALLOW_NULL_ACTION = 1 << 2; 75 ParsedMainComponentImpl()76 public ParsedMainComponentImpl() { 77 } 78 ParsedMainComponentImpl(ParsedMainComponent other)79 public ParsedMainComponentImpl(ParsedMainComponent other) { 80 super(other); 81 this.processName = other.getProcessName(); 82 this.directBootAware = other.isDirectBootAware(); 83 this.enabled = other.isEnabled(); 84 this.exported = other.isExported(); 85 this.order = other.getOrder(); 86 this.splitName = other.getSplitName(); 87 this.attributionTags = other.getAttributionTags(); 88 } 89 setProcessName(String processName)90 public ParsedMainComponentImpl setProcessName(String processName) { 91 this.processName = TextUtils.safeIntern(processName); 92 return this; 93 } 94 95 /** 96 * A main component's name is a class name. This makes code slightly more readable. 97 */ getClassName()98 public String getClassName() { 99 return getName(); 100 } 101 102 @NonNull 103 @Override getAttributionTags()104 public String[] getAttributionTags() { 105 return attributionTags == null ? EmptyArray.STRING : attributionTags; 106 } 107 108 /** 109 * Sets the intent matching flags. This value is intended to be set from the "component" tags. 110 * @see android.R.styleable#AndroidManifestApplication_intentMatchingFlags 111 */ setIntentMatchingFlags(int intentMatchingFlags)112 public ParsedMainComponent setIntentMatchingFlags(int intentMatchingFlags) { 113 mIntentMatchingFlags = intentMatchingFlags; 114 return this; 115 } 116 117 @Override getIntentMatchingFlags()118 public int getIntentMatchingFlags() { 119 return this.mIntentMatchingFlags; 120 } 121 122 @Override describeContents()123 public int describeContents() { 124 return 0; 125 } 126 127 @Override writeToParcel(Parcel dest, int flags)128 public void writeToParcel(Parcel dest, int flags) { 129 super.writeToParcel(dest, flags); 130 sForInternedString.parcel(this.processName, dest, flags); 131 dest.writeBoolean(this.directBootAware); 132 dest.writeBoolean(this.enabled); 133 dest.writeBoolean(this.exported); 134 dest.writeInt(this.order); 135 dest.writeString(this.splitName); 136 dest.writeString8Array(this.attributionTags); 137 dest.writeInt(this.mIntentMatchingFlags); 138 } 139 ParsedMainComponentImpl(Parcel in)140 protected ParsedMainComponentImpl(Parcel in) { 141 super(in); 142 this.processName = sForInternedString.unparcel(in); 143 this.directBootAware = in.readBoolean(); 144 this.enabled = in.readBoolean(); 145 this.exported = in.readBoolean(); 146 this.order = in.readInt(); 147 this.splitName = in.readString(); 148 this.attributionTags = in.createString8Array(); 149 this.mIntentMatchingFlags = in.readInt(); 150 } 151 152 public static final Parcelable.Creator<ParsedMainComponentImpl> CREATOR = 153 new Parcelable.Creator<ParsedMainComponentImpl>() { 154 @Override 155 public ParsedMainComponentImpl createFromParcel(Parcel source) { 156 return new ParsedMainComponentImpl(source); 157 } 158 159 @Override 160 public ParsedMainComponentImpl[] newArray(int size) { 161 return new ParsedMainComponentImpl[size]; 162 } 163 }; 164 165 166 167 // Code below generated by codegen v1.0.23. 168 // 169 // DO NOT MODIFY! 170 // CHECKSTYLE:OFF Generated code 171 // 172 // To regenerate run: 173 // $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/com/android/internal/pm/pkg/component/ParsedMainComponentImpl.java 174 // 175 // To exclude the generated code from IntelliJ auto-formatting enable (one-time): 176 // Settings > Editor > Code Style > Formatter Control 177 //@formatter:off 178 179 180 @android.annotation.IntDef(prefix = "INTENT_MATCHING_FLAGS_", value = { 181 INTENT_MATCHING_FLAGS_NONE, 182 INTENT_MATCHING_FLAGS_ENFORCE_INTENT_FILTER, 183 INTENT_MATCHING_FLAGS_ALLOW_NULL_ACTION 184 }) 185 @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) 186 @DataClass.Generated.Member 187 public @interface IntentMatchingFlags {} 188 189 @DataClass.Generated.Member intentMatchingFlagsToString(@ntentMatchingFlags int value)190 public static String intentMatchingFlagsToString(@IntentMatchingFlags int value) { 191 switch (value) { 192 case INTENT_MATCHING_FLAGS_NONE: 193 return "INTENT_MATCHING_FLAGS_NONE"; 194 case INTENT_MATCHING_FLAGS_ENFORCE_INTENT_FILTER: 195 return "INTENT_MATCHING_FLAGS_ENFORCE_INTENT_FILTER"; 196 case INTENT_MATCHING_FLAGS_ALLOW_NULL_ACTION: 197 return "INTENT_MATCHING_FLAGS_ALLOW_NULL_ACTION"; 198 default: return Integer.toHexString(value); 199 } 200 } 201 202 @DataClass.Generated.Member ParsedMainComponentImpl( @ullable String processName, boolean directBootAware, boolean enabled, boolean exported, int order, @Nullable String splitName, @Nullable String[] attributionTags, int intentMatchingFlags)203 public ParsedMainComponentImpl( 204 @Nullable String processName, 205 boolean directBootAware, 206 boolean enabled, 207 boolean exported, 208 int order, 209 @Nullable String splitName, 210 @Nullable String[] attributionTags, 211 int intentMatchingFlags) { 212 this.processName = processName; 213 this.directBootAware = directBootAware; 214 this.enabled = enabled; 215 this.exported = exported; 216 this.order = order; 217 this.splitName = splitName; 218 this.attributionTags = attributionTags; 219 this.mIntentMatchingFlags = intentMatchingFlags; 220 221 // onConstructed(); // You can define this method to get a callback 222 } 223 224 @DataClass.Generated.Member getProcessName()225 public @Nullable String getProcessName() { 226 return processName; 227 } 228 229 @DataClass.Generated.Member isDirectBootAware()230 public boolean isDirectBootAware() { 231 return directBootAware; 232 } 233 234 @DataClass.Generated.Member isEnabled()235 public boolean isEnabled() { 236 return enabled; 237 } 238 239 @DataClass.Generated.Member isExported()240 public boolean isExported() { 241 return exported; 242 } 243 244 @DataClass.Generated.Member getOrder()245 public int getOrder() { 246 return order; 247 } 248 249 @DataClass.Generated.Member getSplitName()250 public @Nullable String getSplitName() { 251 return splitName; 252 } 253 254 @DataClass.Generated.Member setDirectBootAware( boolean value)255 public @NonNull ParsedMainComponentImpl setDirectBootAware( boolean value) { 256 directBootAware = value; 257 return this; 258 } 259 260 @DataClass.Generated.Member setEnabled( boolean value)261 public @NonNull ParsedMainComponentImpl setEnabled( boolean value) { 262 enabled = value; 263 return this; 264 } 265 266 @DataClass.Generated.Member setExported( boolean value)267 public @NonNull ParsedMainComponentImpl setExported( boolean value) { 268 exported = value; 269 return this; 270 } 271 272 @DataClass.Generated.Member setOrder( int value)273 public @NonNull ParsedMainComponentImpl setOrder( int value) { 274 order = value; 275 return this; 276 } 277 278 @DataClass.Generated.Member setSplitName(@onNull String value)279 public @NonNull ParsedMainComponentImpl setSplitName(@NonNull String value) { 280 splitName = value; 281 return this; 282 } 283 284 @DataClass.Generated.Member setAttributionTags(@onNull String... value)285 public @NonNull ParsedMainComponentImpl setAttributionTags(@NonNull String... value) { 286 attributionTags = value; 287 return this; 288 } 289 290 @DataClass.Generated( 291 time = 1729613643190L, 292 codegenVersion = "1.0.23", 293 sourceFile = "frameworks/base/core/java/com/android/internal/pm/pkg/component/ParsedMainComponentImpl.java", 294 inputSignatures = "private @android.annotation.Nullable @com.android.internal.util.DataClass.ParcelWith(com.android.internal.util.Parcelling.BuiltIn.ForInternedString.class) java.lang.String processName\nprivate boolean directBootAware\nprivate boolean enabled\nprivate boolean exported\nprivate int order\nprivate @android.annotation.Nullable java.lang.String splitName\nprivate @android.annotation.Nullable java.lang.String[] attributionTags\nprivate int mIntentMatchingFlags\npublic static final int INTENT_MATCHING_FLAGS_NONE\npublic static final int INTENT_MATCHING_FLAGS_ENFORCE_INTENT_FILTER\npublic static final int INTENT_MATCHING_FLAGS_ALLOW_NULL_ACTION\npublic static final android.os.Parcelable.Creator<com.android.internal.pm.pkg.component.ParsedMainComponentImpl> CREATOR\npublic com.android.internal.pm.pkg.component.ParsedMainComponentImpl setProcessName(java.lang.String)\npublic java.lang.String getClassName()\npublic @android.annotation.NonNull @java.lang.Override java.lang.String[] getAttributionTags()\npublic com.android.internal.pm.pkg.component.ParsedMainComponent setIntentMatchingFlags(int)\npublic @java.lang.Override int getIntentMatchingFlags()\npublic @java.lang.Override int describeContents()\npublic @java.lang.Override void writeToParcel(android.os.Parcel,int)\nclass ParsedMainComponentImpl extends com.android.internal.pm.pkg.component.ParsedComponentImpl implements [com.android.internal.pm.pkg.component.ParsedMainComponent, android.os.Parcelable]\n@com.android.internal.util.DataClass(genGetters=true, genSetters=true, genBuilder=false, genParcelable=false)") 295 @Deprecated __metadata()296 private void __metadata() {} 297 298 299 //@formatter:on 300 // End of generated code 301 302 } 303