1 /*
2  * Copyright (C) 2021 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 android.car.watchdog;
18 
19 import static com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport.BOILERPLATE_CODE;
20 
21 import android.annotation.IntDef;
22 import android.annotation.NonNull;
23 import android.annotation.Nullable;
24 import android.annotation.StringDef;
25 import android.annotation.SystemApi;
26 import android.os.Parcelable;
27 
28 import com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport;
29 import com.android.car.internal.util.AnnotationValidations;
30 import com.android.car.internal.util.DataClass;
31 
32 import java.lang.annotation.Retention;
33 import java.lang.annotation.RetentionPolicy;
34 import java.util.List;
35 import java.util.Map;
36 
37 /**
38  * Resource overuse configuration for a component.
39  *
40  * @hide
41  */
42 @SystemApi
43 @DataClass(genToString = true, genBuilder = true, genHiddenConstDefs = true)
44 public final class ResourceOveruseConfiguration implements Parcelable {
45     /**
46      * System component.
47      */
48     @ComponentType
49     public static final int COMPONENT_TYPE_SYSTEM = 1;
50 
51     /**
52      * Vendor component.
53      */
54     @ComponentType
55     public static final int COMPONENT_TYPE_VENDOR = 2;
56 
57     /**
58      * Third party component.
59      */
60     @ComponentType
61     public static final int COMPONENT_TYPE_THIRD_PARTY = 3;
62 
63     /**
64      * Map applications.
65      */
66     @ApplicationCategoryType
67     public static final String APPLICATION_CATEGORY_TYPE_MAPS =
68             "android.car.watchdog.app.category.MAPS";
69 
70     /**
71      * Media applications.
72      */
73     @ApplicationCategoryType
74     public static final String APPLICATION_CATEGORY_TYPE_MEDIA =
75             "android.car.watchdog.app.category.MEDIA";
76 
77     /**
78      * Component type of the I/O overuse configuration.
79      */
80     private @ComponentType int mComponentType;
81 
82     /**
83      * List of system or vendor packages that are safe to be killed on resource overuse.
84      *
85      * <p>When specifying shared package names, the package names should contain the prefix
86      * 'shared:'.
87      * <p>System components must provide only safe-to-kill system packages in this list.
88      * <p>Vendor components must provide only safe-to-kill vendor packages in this list.
89      */
90     private @NonNull List<String> mSafeToKillPackages;
91 
92     /**
93      * List of vendor package prefixes.
94      *
95      * <p>Any pre-installed package name starting with one of the prefixes or any package from the
96      * vendor partition is identified as a vendor package and vendor provided thresholds are applied
97      * to these packages. This list must be provided only by the vendor component.
98      *
99      * <p>When specifying shared package name prefixes, the prefix should contain 'shared:' at
100      * the beginning.
101      */
102     private @NonNull List<String> mVendorPackagePrefixes;
103 
104 
105     /**
106      * Mappings from package name to application category types.
107      *
108      * <p>This mapping must contain only packages that can be mapped to one of the
109      * {@link ApplicationCategoryType} types. This mapping must be defined only by the system and
110      * vendor components.
111      *
112      * <p>For packages under a shared UID, the application category type must be specified
113      * for the shared package name and not for individual packages under the shared UID. When
114      * specifying shared package names, the package names should contain the prefix 'shared:'.
115      */
116     private @NonNull Map<String, String> mPackagesToAppCategoryTypes;
117 
118     /**
119      * I/O overuse configuration for the component specified by
120      * {@link ResourceOveruseConfiguration#getComponentType}.
121      */
122     private @Nullable IoOveruseConfiguration mIoOveruseConfiguration = null;
123 
124 
125 
126     // Code below generated by codegen v1.0.23.
127     //
128     // DO NOT MODIFY!
129     // CHECKSTYLE:OFF Generated code
130     //
131     // To regenerate run:
132     // $ codegen $ANDROID_BUILD_TOP/packages/services/Car/car-lib/src/android/car/watchdog/ResourceOveruseConfiguration.java
133     // Added AddedInOrBefore or ApiRequirement Annotation manually
134     //
135     // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
136     //   Settings > Editor > Code Style > Formatter Control
137     //@formatter:off
138 
139 
140     /** @hide */
141     @IntDef(prefix = "COMPONENT_TYPE_", value = {
142         COMPONENT_TYPE_SYSTEM,
143         COMPONENT_TYPE_VENDOR,
144         COMPONENT_TYPE_THIRD_PARTY
145     })
146     @Retention(RetentionPolicy.SOURCE)
147     @DataClass.Generated.Member
148     public @interface ComponentType {}
149 
150     /** @hide */
151     @DataClass.Generated.Member
componentTypeToString(@omponentType int value)152     public static String componentTypeToString(@ComponentType int value) {
153         switch (value) {
154             case COMPONENT_TYPE_SYSTEM:
155                     return "COMPONENT_TYPE_SYSTEM";
156             case COMPONENT_TYPE_VENDOR:
157                     return "COMPONENT_TYPE_VENDOR";
158             case COMPONENT_TYPE_THIRD_PARTY:
159                     return "COMPONENT_TYPE_THIRD_PARTY";
160             default: return Integer.toHexString(value);
161         }
162     }
163 
164     /** @hide */
165     @StringDef(prefix = "APPLICATION_CATEGORY_TYPE_", value = {
166         APPLICATION_CATEGORY_TYPE_MAPS,
167         APPLICATION_CATEGORY_TYPE_MEDIA
168     })
169     @Retention(RetentionPolicy.SOURCE)
170     @DataClass.Generated.Member
171     public @interface ApplicationCategoryType {}
172 
173     @DataClass.Generated.Member
ResourceOveruseConfiguration( @omponentType int componentType, @NonNull List<String> safeToKillPackages, @NonNull List<String> vendorPackagePrefixes, @NonNull Map<String,String> packagesToAppCategoryTypes, @Nullable IoOveruseConfiguration ioOveruseConfiguration)174     /* package-private */ ResourceOveruseConfiguration(
175             @ComponentType int componentType,
176             @NonNull List<String> safeToKillPackages,
177             @NonNull List<String> vendorPackagePrefixes,
178             @NonNull Map<String,String> packagesToAppCategoryTypes,
179             @Nullable IoOveruseConfiguration ioOveruseConfiguration) {
180         this.mComponentType = componentType;
181 
182         if (!(mComponentType == COMPONENT_TYPE_SYSTEM)
183                 && !(mComponentType == COMPONENT_TYPE_VENDOR)
184                 && !(mComponentType == COMPONENT_TYPE_THIRD_PARTY)) {
185             throw new java.lang.IllegalArgumentException(
186                     "componentType was " + mComponentType + " but must be one of: "
187                             + "COMPONENT_TYPE_SYSTEM(" + COMPONENT_TYPE_SYSTEM + "), "
188                             + "COMPONENT_TYPE_VENDOR(" + COMPONENT_TYPE_VENDOR + "), "
189                             + "COMPONENT_TYPE_THIRD_PARTY(" + COMPONENT_TYPE_THIRD_PARTY + ")");
190         }
191 
192         this.mSafeToKillPackages = safeToKillPackages;
193         AnnotationValidations.validate(
194                 NonNull.class, null, mSafeToKillPackages);
195         this.mVendorPackagePrefixes = vendorPackagePrefixes;
196         AnnotationValidations.validate(
197                 NonNull.class, null, mVendorPackagePrefixes);
198         this.mPackagesToAppCategoryTypes = packagesToAppCategoryTypes;
199         AnnotationValidations.validate(
200                 NonNull.class, null, mPackagesToAppCategoryTypes);
201         this.mIoOveruseConfiguration = ioOveruseConfiguration;
202 
203         // onConstructed(); // You can define this method to get a callback
204     }
205 
206     /**
207      * Component type of the I/O overuse configuration.
208      */
209     @DataClass.Generated.Member
getComponentType()210     public @ComponentType int getComponentType() {
211         return mComponentType;
212     }
213 
214     /**
215      * List of system or vendor packages that are safe to be killed on resource overuse.
216      *
217      * <p>When specifying shared package names, the package names should contain the prefix
218      * 'shared:'.
219      * <p>System components must provide only safe-to-kill system packages in this list.
220      * <p>Vendor components must provide only safe-to-kill vendor packages in this list.
221      */
222     @DataClass.Generated.Member
getSafeToKillPackages()223     public @NonNull List<String> getSafeToKillPackages() {
224         return mSafeToKillPackages;
225     }
226 
227     /**
228      * List of vendor package prefixes.
229      *
230      * <p>Any pre-installed package name starting with one of the prefixes or any package from the
231      * vendor partition is identified as a vendor package and vendor provided thresholds are applied
232      * to these packages. This list must be provided only by the vendor component.
233      *
234      * <p>When specifying shared package name prefixes, the prefix should contain 'shared:' at
235      * the beginning.
236      */
237     @DataClass.Generated.Member
getVendorPackagePrefixes()238     public @NonNull List<String> getVendorPackagePrefixes() {
239         return mVendorPackagePrefixes;
240     }
241 
242     /**
243      * Mappings from package name to application category types.
244      *
245      * <p>This mapping must contain only packages that can be mapped to one of the
246      * {@link ApplicationCategoryType} types. This mapping must be defined only by the system and
247      * vendor components.
248      *
249      * <p>For packages under a shared UID, the application category type must be specified
250      * for the shared package name and not for individual packages under the shared UID. When
251      * specifying shared package names, the package names should contain the prefix 'shared:'.
252      */
253     @DataClass.Generated.Member
getPackagesToAppCategoryTypes()254     public @NonNull Map<String,String> getPackagesToAppCategoryTypes() {
255         return mPackagesToAppCategoryTypes;
256     }
257 
258     /**
259      * I/O overuse configuration for the component specified by
260      * {@link ResourceOveruseConfiguration#getComponentType}.
261      */
262     @DataClass.Generated.Member
getIoOveruseConfiguration()263     public @Nullable IoOveruseConfiguration getIoOveruseConfiguration() {
264         return mIoOveruseConfiguration;
265     }
266 
267     @Override
268     @DataClass.Generated.Member
toString()269     public String toString() {
270         // You can override field toString logic by defining methods like:
271         // String fieldNameToString() { ... }
272 
273         return "ResourceOveruseConfiguration { " +
274                 "componentType = " + componentTypeToString(mComponentType) + ", " +
275                 "safeToKillPackages = " + mSafeToKillPackages + ", " +
276                 "vendorPackagePrefixes = " + mVendorPackagePrefixes + ", " +
277                 "packagesToAppCategoryTypes = " + mPackagesToAppCategoryTypes + ", " +
278                 "ioOveruseConfiguration = " + mIoOveruseConfiguration +
279         " }";
280     }
281 
282     @Override
283     @DataClass.Generated.Member
writeToParcel(@onNull android.os.Parcel dest, int flags)284     public void writeToParcel(@NonNull android.os.Parcel dest, int flags) {
285         // You can override field parcelling by defining methods like:
286         // void parcelFieldName(Parcel dest, int flags) { ... }
287 
288         byte flg = 0;
289         if (mIoOveruseConfiguration != null) flg |= 0x10;
290         dest.writeByte(flg);
291         dest.writeInt(mComponentType);
292         dest.writeStringList(mSafeToKillPackages);
293         dest.writeStringList(mVendorPackagePrefixes);
294         dest.writeMap(mPackagesToAppCategoryTypes);
295         if (mIoOveruseConfiguration != null) dest.writeTypedObject(mIoOveruseConfiguration, flags);
296     }
297 
298     @Override
299     @DataClass.Generated.Member
300     @ExcludeFromCodeCoverageGeneratedReport(reason = BOILERPLATE_CODE)
describeContents()301     public int describeContents() { return 0; }
302 
303     /** @hide */
304     @SuppressWarnings({"unchecked", "RedundantCast"})
305     @DataClass.Generated.Member
ResourceOveruseConfiguration(@onNull android.os.Parcel in)306     /* package-private */ ResourceOveruseConfiguration(@NonNull android.os.Parcel in) {
307         // You can override field unparcelling by defining methods like:
308         // static FieldType unparcelFieldName(Parcel in) { ... }
309 
310         byte flg = in.readByte();
311         int componentType = in.readInt();
312         List<String> safeToKillPackages = new java.util.ArrayList<>();
313         in.readStringList(safeToKillPackages);
314         List<String> vendorPackagePrefixes = new java.util.ArrayList<>();
315         in.readStringList(vendorPackagePrefixes);
316         Map<String,String> packagesToAppCategoryTypes = new java.util.LinkedHashMap<>();
317         in.readMap(packagesToAppCategoryTypes, String.class.getClassLoader());
318         IoOveruseConfiguration ioOveruseConfiguration = (flg & 0x10) == 0 ? null : (IoOveruseConfiguration) in.readTypedObject(IoOveruseConfiguration.CREATOR);
319 
320         this.mComponentType = componentType;
321 
322         if (!(mComponentType == COMPONENT_TYPE_SYSTEM)
323                 && !(mComponentType == COMPONENT_TYPE_VENDOR)
324                 && !(mComponentType == COMPONENT_TYPE_THIRD_PARTY)) {
325             throw new java.lang.IllegalArgumentException(
326                     "componentType was " + mComponentType + " but must be one of: "
327                             + "COMPONENT_TYPE_SYSTEM(" + COMPONENT_TYPE_SYSTEM + "), "
328                             + "COMPONENT_TYPE_VENDOR(" + COMPONENT_TYPE_VENDOR + "), "
329                             + "COMPONENT_TYPE_THIRD_PARTY(" + COMPONENT_TYPE_THIRD_PARTY + ")");
330         }
331 
332         this.mSafeToKillPackages = safeToKillPackages;
333         AnnotationValidations.validate(
334                 NonNull.class, null, mSafeToKillPackages);
335         this.mVendorPackagePrefixes = vendorPackagePrefixes;
336         AnnotationValidations.validate(
337                 NonNull.class, null, mVendorPackagePrefixes);
338         this.mPackagesToAppCategoryTypes = packagesToAppCategoryTypes;
339         AnnotationValidations.validate(
340                 NonNull.class, null, mPackagesToAppCategoryTypes);
341         this.mIoOveruseConfiguration = ioOveruseConfiguration;
342 
343         // onConstructed(); // You can define this method to get a callback
344     }
345 
346     @DataClass.Generated.Member
347     public static final @NonNull Parcelable.Creator<ResourceOveruseConfiguration> CREATOR
348             = new Parcelable.Creator<ResourceOveruseConfiguration>() {
349         @Override
350         public ResourceOveruseConfiguration[] newArray(int size) {
351             return new ResourceOveruseConfiguration[size];
352         }
353 
354         @Override
355         public ResourceOveruseConfiguration createFromParcel(@NonNull android.os.Parcel in) {
356             return new ResourceOveruseConfiguration(in);
357         }
358     };
359 
360     /**
361      * A builder for {@link ResourceOveruseConfiguration}
362      */
363     @SuppressWarnings("WeakerAccess")
364     @DataClass.Generated.Member
365     public static final class Builder {
366 
367         private @ComponentType int mComponentType;
368         private @NonNull List<String> mSafeToKillPackages;
369         private @NonNull List<String> mVendorPackagePrefixes;
370         private @NonNull Map<String,String> mPackagesToAppCategoryTypes;
371         private @Nullable IoOveruseConfiguration mIoOveruseConfiguration;
372 
373         private long mBuilderFieldsSet = 0L;
374 
375         /**
376          * Creates a new Builder.
377          *
378          * @param componentType
379          *   Component type of the I/O overuse configuration.
380          * @param safeToKillPackages
381          *   List of system or vendor packages that are safe to be killed on resource overuse.
382          *
383          *   <p>When specifying shared package names, the package names should contain the prefix
384          *   'shared:'.
385          *   <p>System components must provide only safe-to-kill system packages in this list.
386          *   <p>Vendor components must provide only safe-to-kill vendor packages in this list.
387          * @param vendorPackagePrefixes
388          *   List of vendor package prefixes.
389          *
390          *   <p>Any pre-installed package name starting with one of the prefixes or any package from the
391          *   vendor partition is identified as a vendor package and vendor provided thresholds are applied
392          *   to these packages. This list must be provided only by the vendor component.
393          *
394          *   <p>When specifying shared package name prefixes, the prefix should contain 'shared:' at
395          *   the beginning.
396          * @param packagesToAppCategoryTypes
397          *   Mappings from package name to application category types.
398          *
399          *   <p>This mapping must contain only packages that can be mapped to one of the
400          *   {@link ApplicationCategoryType} types. This mapping must be defined only by the system and
401          *   vendor components.
402          *
403          *   <p>For packages under a shared UID, the application category type must be specified
404          *   for the shared package name and not for individual packages under the shared UID. When
405          *   specifying shared package names, the package names should contain the prefix 'shared:'.
406          */
Builder( @omponentType int componentType, @NonNull List<String> safeToKillPackages, @NonNull List<String> vendorPackagePrefixes, @NonNull Map<String,String> packagesToAppCategoryTypes)407         public Builder(
408                 @ComponentType int componentType,
409                 @NonNull List<String> safeToKillPackages,
410                 @NonNull List<String> vendorPackagePrefixes,
411                 @NonNull Map<String,String> packagesToAppCategoryTypes) {
412             mComponentType = componentType;
413 
414             if (!(mComponentType == COMPONENT_TYPE_SYSTEM)
415                     && !(mComponentType == COMPONENT_TYPE_VENDOR)
416                     && !(mComponentType == COMPONENT_TYPE_THIRD_PARTY)) {
417                 throw new java.lang.IllegalArgumentException(
418                         "componentType was " + mComponentType + " but must be one of: "
419                                 + "COMPONENT_TYPE_SYSTEM(" + COMPONENT_TYPE_SYSTEM + "), "
420                                 + "COMPONENT_TYPE_VENDOR(" + COMPONENT_TYPE_VENDOR + "), "
421                                 + "COMPONENT_TYPE_THIRD_PARTY(" + COMPONENT_TYPE_THIRD_PARTY + ")");
422             }
423 
424             mSafeToKillPackages = safeToKillPackages;
425             AnnotationValidations.validate(
426                     NonNull.class, null, mSafeToKillPackages);
427             mVendorPackagePrefixes = vendorPackagePrefixes;
428             AnnotationValidations.validate(
429                     NonNull.class, null, mVendorPackagePrefixes);
430             mPackagesToAppCategoryTypes = packagesToAppCategoryTypes;
431             AnnotationValidations.validate(
432                     NonNull.class, null, mPackagesToAppCategoryTypes);
433         }
434 
435         /**
436          * Component type of the I/O overuse configuration.
437          */
438         @DataClass.Generated.Member
setComponentType(@omponentType int value)439         public @NonNull Builder setComponentType(@ComponentType int value) {
440             checkNotUsed();
441             mBuilderFieldsSet |= 0x1;
442             mComponentType = value;
443             return this;
444         }
445 
446         /**
447          * List of system or vendor packages that are safe to be killed on resource overuse.
448          *
449          * <p>When specifying shared package names, the package names should contain the prefix
450          * 'shared:'.
451          * <p>System components must provide only safe-to-kill system packages in this list.
452          * <p>Vendor components must provide only safe-to-kill vendor packages in this list.
453          */
454         @DataClass.Generated.Member
setSafeToKillPackages(@onNull List<String> value)455         public @NonNull Builder setSafeToKillPackages(@NonNull List<String> value) {
456             checkNotUsed();
457             mBuilderFieldsSet |= 0x2;
458             mSafeToKillPackages = value;
459             return this;
460         }
461 
462         /** @see #setSafeToKillPackages */
463         @DataClass.Generated.Member
addSafeToKillPackages(@onNull String value)464         public @NonNull Builder addSafeToKillPackages(@NonNull String value) {
465             // You can refine this method's name by providing item's singular name, e.g.:
466             // @DataClass.PluralOf("item")) mItems = ...
467 
468             if (mSafeToKillPackages == null) setSafeToKillPackages(new java.util.ArrayList<>());
469             mSafeToKillPackages.add(value);
470             return this;
471         }
472 
473         /**
474          * List of vendor package prefixes.
475          *
476          * <p>Any pre-installed package name starting with one of the prefixes or any package from the
477          * vendor partition is identified as a vendor package and vendor provided thresholds are applied
478          * to these packages. This list must be provided only by the vendor component.
479          *
480          * <p>When specifying shared package name prefixes, the prefix should contain 'shared:' at
481          * the beginning.
482          */
483         @DataClass.Generated.Member
setVendorPackagePrefixes(@onNull List<String> value)484         public @NonNull Builder setVendorPackagePrefixes(@NonNull List<String> value) {
485             checkNotUsed();
486             mBuilderFieldsSet |= 0x4;
487             mVendorPackagePrefixes = value;
488             return this;
489         }
490 
491         /** @see #setVendorPackagePrefixes */
492         @DataClass.Generated.Member
addVendorPackagePrefixes(@onNull String value)493         public @NonNull Builder addVendorPackagePrefixes(@NonNull String value) {
494             // You can refine this method's name by providing item's singular name, e.g.:
495             // @DataClass.PluralOf("item")) mItems = ...
496 
497             if (mVendorPackagePrefixes == null) setVendorPackagePrefixes(new java.util.ArrayList<>());
498             mVendorPackagePrefixes.add(value);
499             return this;
500         }
501 
502         /**
503          * Mappings from package name to application category types.
504          *
505          * <p>This mapping must contain only packages that can be mapped to one of the
506          * {@link ApplicationCategoryType} types. This mapping must be defined only by the system and
507          * vendor components.
508          *
509          * <p>For packages under a shared UID, the application category type must be specified
510          * for the shared package name and not for individual packages under the shared UID. When
511          * specifying shared package names, the package names should contain the prefix 'shared:'.
512          */
513         @DataClass.Generated.Member
setPackagesToAppCategoryTypes(@onNull Map<String,String> value)514         public @NonNull Builder setPackagesToAppCategoryTypes(@NonNull Map<String,String> value) {
515             checkNotUsed();
516             mBuilderFieldsSet |= 0x8;
517             mPackagesToAppCategoryTypes = value;
518             return this;
519         }
520 
521         /** @see #setPackagesToAppCategoryTypes */
522         @DataClass.Generated.Member
addPackagesToAppCategoryTypes(@onNull String key, @NonNull String value)523         public @NonNull Builder addPackagesToAppCategoryTypes(@NonNull String key, @NonNull String value) {
524             // You can refine this method's name by providing item's singular name, e.g.:
525             // @DataClass.PluralOf("item")) mItems = ...
526 
527             if (mPackagesToAppCategoryTypes == null) setPackagesToAppCategoryTypes(new java.util.LinkedHashMap());
528             mPackagesToAppCategoryTypes.put(key, value);
529             return this;
530         }
531 
532         /**
533          * I/O overuse configuration for the component specified by
534          * {@link ResourceOveruseConfiguration#getComponentType}.
535          */
536         @DataClass.Generated.Member
setIoOveruseConfiguration(@onNull IoOveruseConfiguration value)537         public @NonNull Builder setIoOveruseConfiguration(@NonNull IoOveruseConfiguration value) {
538             checkNotUsed();
539             mBuilderFieldsSet |= 0x10;
540             mIoOveruseConfiguration = value;
541             return this;
542         }
543 
544         /** Builds the instance. This builder should not be touched after calling this! */
build()545         public @NonNull ResourceOveruseConfiguration build() {
546             checkNotUsed();
547             mBuilderFieldsSet |= 0x20; // Mark builder used
548 
549             if ((mBuilderFieldsSet & 0x10) == 0) {
550                 mIoOveruseConfiguration = null;
551             }
552             ResourceOveruseConfiguration o = new ResourceOveruseConfiguration(
553                     mComponentType,
554                     mSafeToKillPackages,
555                     mVendorPackagePrefixes,
556                     mPackagesToAppCategoryTypes,
557                     mIoOveruseConfiguration);
558             return o;
559         }
560 
checkNotUsed()561         private void checkNotUsed() {
562             if ((mBuilderFieldsSet & 0x20) != 0) {
563                 throw new IllegalStateException(
564                         "This Builder should not be reused. Use a new Builder instance instead");
565             }
566         }
567     }
568 
569     @DataClass.Generated(
570             time = 1673057073656L,
571             codegenVersion = "1.0.23",
572             sourceFile = "packages/services/Car/car-lib/src/android/car/watchdog/ResourceOveruseConfiguration.java",
573             inputSignatures = "public static final @android.car.watchdog.ResourceOveruseConfiguration.ComponentType @android.car.annotation.AddedInOrBefore int COMPONENT_TYPE_SYSTEM\npublic static final @android.car.watchdog.ResourceOveruseConfiguration.ComponentType @android.car.annotation.AddedInOrBefore int COMPONENT_TYPE_VENDOR\npublic static final @android.car.watchdog.ResourceOveruseConfiguration.ComponentType @android.car.annotation.AddedInOrBefore int COMPONENT_TYPE_THIRD_PARTY\npublic static final @android.car.watchdog.ResourceOveruseConfiguration.ApplicationCategoryType @android.car.annotation.AddedInOrBefore java.lang.String APPLICATION_CATEGORY_TYPE_MAPS\npublic static final @android.car.watchdog.ResourceOveruseConfiguration.ApplicationCategoryType @android.car.annotation.AddedInOrBefore java.lang.String APPLICATION_CATEGORY_TYPE_MEDIA\nprivate @android.car.watchdog.ResourceOveruseConfiguration.ComponentType int mComponentType\nprivate @android.annotation.NonNull java.util.List<java.lang.String> mSafeToKillPackages\nprivate @android.annotation.NonNull java.util.List<java.lang.String> mVendorPackagePrefixes\nprivate @android.annotation.NonNull java.util.Map<java.lang.String,java.lang.String> mPackagesToAppCategoryTypes\nprivate @android.annotation.Nullable android.car.watchdog.IoOveruseConfiguration mIoOveruseConfiguration\nclass ResourceOveruseConfiguration extends java.lang.Object implements [android.os.Parcelable]\n@com.android.car.internal.util.DataClass(genToString=true, genBuilder=true, genHiddenConstDefs=true)")
574     @Deprecated
575     @ExcludeFromCodeCoverageGeneratedReport(reason = BOILERPLATE_CODE)
__metadata()576     private void __metadata() {}
577 
578 
579     //@formatter:on
580     // End of generated code
581 
582 }
583