• 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;
18 
19 import android.annotation.IntDef;
20 import android.annotation.NonNull;
21 import android.text.TextUtils;
22 
23 import com.android.internal.util.ArrayUtils;
24 
25 import java.lang.annotation.Retention;
26 import java.lang.annotation.RetentionPolicy;
27 
28 /**
29  * Helps {@link PackageManagerService} keep track of the names of special packages like SetupWizard.
30  */
31 public final class KnownPackages {
32     @IntDef(prefix = "PACKAGE_", value = {
33             PACKAGE_SYSTEM,
34             PACKAGE_SETUP_WIZARD,
35             PACKAGE_INSTALLER,
36             PACKAGE_UNINSTALLER,
37             PACKAGE_VERIFIER,
38             PACKAGE_BROWSER,
39             PACKAGE_SYSTEM_TEXT_CLASSIFIER,
40             PACKAGE_PERMISSION_CONTROLLER,
41             PACKAGE_CONFIGURATOR,
42             PACKAGE_INCIDENT_REPORT_APPROVER,
43             PACKAGE_APP_PREDICTOR,
44             PACKAGE_OVERLAY_CONFIG_SIGNATURE,
45             PACKAGE_WIFI,
46             PACKAGE_COMPANION,
47             PACKAGE_RETAIL_DEMO,
48             PACKAGE_RECENTS,
49             PACKAGE_AMBIENT_CONTEXT_DETECTION,
50     })
51     @Retention(RetentionPolicy.SOURCE)
52     public @interface KnownPackage {
53     }
54 
55     public static final int PACKAGE_SYSTEM = 0;
56     public static final int PACKAGE_SETUP_WIZARD = 1;
57     public static final int PACKAGE_INSTALLER = 2;
58     public static final int PACKAGE_UNINSTALLER = 3;
59     public static final int PACKAGE_VERIFIER = 4;
60     public static final int PACKAGE_BROWSER = 5;
61     public static final int PACKAGE_SYSTEM_TEXT_CLASSIFIER = 6;
62     public static final int PACKAGE_PERMISSION_CONTROLLER = 7;
63     public static final int PACKAGE_WELLBEING = 8;
64     public static final int PACKAGE_DOCUMENTER = 9;
65     public static final int PACKAGE_CONFIGURATOR = 10;
66     public static final int PACKAGE_INCIDENT_REPORT_APPROVER = 11;
67     public static final int PACKAGE_APP_PREDICTOR = 12;
68     public static final int PACKAGE_OVERLAY_CONFIG_SIGNATURE = 13;
69     public static final int PACKAGE_WIFI = 14;
70     public static final int PACKAGE_COMPANION = 15;
71     public static final int PACKAGE_RETAIL_DEMO = 16;
72     public static final int PACKAGE_RECENTS = 17;
73     public static final int PACKAGE_AMBIENT_CONTEXT_DETECTION = 18;
74     // Integer value of the last known package ID. Increases as new ID is added to KnownPackage.
75     // Please note the numbers should be continuous.
76     public static final int LAST_KNOWN_PACKAGE = PACKAGE_AMBIENT_CONTEXT_DETECTION;
77 
78     private final DefaultAppProvider mDefaultAppProvider;
79     private final String mRequiredInstallerPackage;
80     private final String mRequiredUninstallerPackage;
81     private final String mSetupWizardPackage;
82     private final String mRequiredVerifierPackage;
83     private final String mDefaultTextClassifierPackage;
84     private final String mSystemTextClassifierPackageName;
85     private final String mRequiredPermissionControllerPackage;
86     private final String mConfiguratorPackage;
87     private final String mIncidentReportApproverPackage;
88     private final String mAmbientContextDetectionPackage;
89     private final String mAppPredictionServicePackage;
90     private final String mCompanionPackage;
91     private final String mRetailDemoPackage;
92     private final String mOverlayConfigSignaturePackage;
93     private final String mRecentsPackage;
94 
KnownPackages(DefaultAppProvider defaultAppProvider, String requiredInstallerPackage, String requiredUninstallerPackage, String setupWizardPackage, String requiredVerifierPackage, String defaultTextClassifierPackage, String systemTextClassifierPackageName, String requiredPermissionControllerPackage, String configuratorPackage, String incidentReportApproverPackage, String ambientContextDetectionPackage, String appPredictionServicePackage, String companionPackageName, String retailDemoPackage, String overlayConfigSignaturePackage, String recentsPackage)95     KnownPackages(DefaultAppProvider defaultAppProvider, String requiredInstallerPackage,
96             String requiredUninstallerPackage, String setupWizardPackage,
97             String requiredVerifierPackage, String defaultTextClassifierPackage,
98             String systemTextClassifierPackageName, String requiredPermissionControllerPackage,
99             String configuratorPackage, String incidentReportApproverPackage,
100             String ambientContextDetectionPackage, String appPredictionServicePackage,
101             String companionPackageName, String retailDemoPackage,
102             String overlayConfigSignaturePackage, String recentsPackage) {
103         mDefaultAppProvider = defaultAppProvider;
104         mRequiredInstallerPackage = requiredInstallerPackage;
105         mRequiredUninstallerPackage = requiredUninstallerPackage;
106         mSetupWizardPackage = setupWizardPackage;
107         mRequiredVerifierPackage = requiredVerifierPackage;
108         mDefaultTextClassifierPackage = defaultTextClassifierPackage;
109         mSystemTextClassifierPackageName = systemTextClassifierPackageName;
110         mRequiredPermissionControllerPackage = requiredPermissionControllerPackage;
111         mConfiguratorPackage = configuratorPackage;
112         mIncidentReportApproverPackage = incidentReportApproverPackage;
113         mAmbientContextDetectionPackage = ambientContextDetectionPackage;
114         mAppPredictionServicePackage = appPredictionServicePackage;
115         mCompanionPackage = companionPackageName;
116         mRetailDemoPackage = retailDemoPackage;
117         mOverlayConfigSignaturePackage = overlayConfigSignaturePackage;
118         mRecentsPackage = recentsPackage;
119     }
120 
121     /**
122      * Returns the string representation of a known package. For example,
123      * {@link #PACKAGE_SETUP_WIZARD} is represented by the string Setup Wizard.
124      *
125      * @param knownPackage The known package.
126      * @return The string representation.
127      */
knownPackageToString(@nownPackage int knownPackage)128     static @NonNull String knownPackageToString(@KnownPackage int knownPackage) {
129         switch (knownPackage) {
130             case PACKAGE_SYSTEM:
131                 return "System";
132             case PACKAGE_SETUP_WIZARD:
133                 return "Setup Wizard";
134             case PACKAGE_INSTALLER:
135                 return "Installer";
136             case PACKAGE_UNINSTALLER:
137                 return "Uninstaller";
138             case PACKAGE_VERIFIER:
139                 return "Verifier";
140             case PACKAGE_BROWSER:
141                 return "Browser";
142             case PACKAGE_SYSTEM_TEXT_CLASSIFIER:
143                 return "System Text Classifier";
144             case PACKAGE_PERMISSION_CONTROLLER:
145                 return "Permission Controller";
146             case PACKAGE_WELLBEING:
147                 return "Wellbeing";
148             case PACKAGE_DOCUMENTER:
149                 return "Documenter";
150             case PACKAGE_CONFIGURATOR:
151                 return "Configurator";
152             case PACKAGE_INCIDENT_REPORT_APPROVER:
153                 return "Incident Report Approver";
154             case PACKAGE_APP_PREDICTOR:
155                 return "App Predictor";
156             case PACKAGE_WIFI:
157                 return "Wi-Fi";
158             case PACKAGE_COMPANION:
159                 return "Companion";
160             case PACKAGE_RETAIL_DEMO:
161                 return "Retail Demo";
162             case PACKAGE_OVERLAY_CONFIG_SIGNATURE:
163                 return "Overlay Config Signature";
164             case PACKAGE_RECENTS:
165                 return "Recents";
166             case PACKAGE_AMBIENT_CONTEXT_DETECTION:
167                 return "Ambient Context Detection";
168         }
169         return "Unknown";
170     }
171 
getKnownPackageNames(@onNull Computer snapshot, int knownPackage, int userId)172     String[] getKnownPackageNames(@NonNull Computer snapshot, int knownPackage, int userId) {
173         switch (knownPackage) {
174             case PACKAGE_BROWSER:
175                 return new String[]{mDefaultAppProvider.getDefaultBrowser(userId)};
176             case PACKAGE_INSTALLER:
177                 return snapshot.filterOnlySystemPackages(mRequiredInstallerPackage);
178             case PACKAGE_UNINSTALLER:
179                 return snapshot.filterOnlySystemPackages(mRequiredUninstallerPackage);
180             case PACKAGE_SETUP_WIZARD:
181                 return snapshot.filterOnlySystemPackages(mSetupWizardPackage);
182             case PACKAGE_SYSTEM:
183                 return new String[]{"android"};
184             case PACKAGE_VERIFIER:
185                 return snapshot.filterOnlySystemPackages(mRequiredVerifierPackage);
186             case PACKAGE_SYSTEM_TEXT_CLASSIFIER:
187                 return snapshot.filterOnlySystemPackages(
188                         mDefaultTextClassifierPackage, mSystemTextClassifierPackageName);
189             case PACKAGE_PERMISSION_CONTROLLER:
190                 return snapshot.filterOnlySystemPackages(mRequiredPermissionControllerPackage);
191             case PACKAGE_CONFIGURATOR:
192                 return snapshot.filterOnlySystemPackages(mConfiguratorPackage);
193             case PACKAGE_INCIDENT_REPORT_APPROVER:
194                 return snapshot.filterOnlySystemPackages(mIncidentReportApproverPackage);
195             case PACKAGE_AMBIENT_CONTEXT_DETECTION:
196                 return snapshot.filterOnlySystemPackages(mAmbientContextDetectionPackage);
197             case PACKAGE_APP_PREDICTOR:
198                 return snapshot.filterOnlySystemPackages(mAppPredictionServicePackage);
199             case PACKAGE_COMPANION:
200                 return snapshot.filterOnlySystemPackages(mCompanionPackage);
201             case PACKAGE_RETAIL_DEMO:
202                 return TextUtils.isEmpty(mRetailDemoPackage)
203                         ? ArrayUtils.emptyArray(String.class)
204                         : new String[]{mRetailDemoPackage};
205             case PACKAGE_OVERLAY_CONFIG_SIGNATURE:
206                 return snapshot.filterOnlySystemPackages(mOverlayConfigSignaturePackage);
207             case PACKAGE_RECENTS:
208                 return snapshot.filterOnlySystemPackages(mRecentsPackage);
209             default:
210                 return ArrayUtils.emptyArray(String.class);
211         }
212     }
213 }
214