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