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