blob: 83831ca61aa15d3b92e7bba7ddf1c5435b702888 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.pm;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.text.TextUtils;
import com.android.internal.util.ArrayUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Helps {@link PackageManagerService} keep track of the names of special packages like SetupWizard.
*/
public final class KnownPackages {
@IntDef(prefix = "PACKAGE_", value = {
PACKAGE_SYSTEM,
PACKAGE_SETUP_WIZARD,
PACKAGE_INSTALLER,
PACKAGE_UNINSTALLER,
PACKAGE_VERIFIER,
PACKAGE_BROWSER,
PACKAGE_SYSTEM_TEXT_CLASSIFIER,
PACKAGE_PERMISSION_CONTROLLER,
PACKAGE_CONFIGURATOR,
PACKAGE_INCIDENT_REPORT_APPROVER,
PACKAGE_APP_PREDICTOR,
PACKAGE_OVERLAY_CONFIG_SIGNATURE,
PACKAGE_WIFI,
PACKAGE_COMPANION,
PACKAGE_RETAIL_DEMO,
PACKAGE_RECENTS,
PACKAGE_AMBIENT_CONTEXT_DETECTION,
PACKAGE_WEARABLE_SENSING,
})
@Retention(RetentionPolicy.SOURCE)
public @interface KnownPackage {
}
public static final int PACKAGE_SYSTEM = 0;
public static final int PACKAGE_SETUP_WIZARD = 1;
public static final int PACKAGE_INSTALLER = 2;
public static final int PACKAGE_UNINSTALLER = 3;
public static final int PACKAGE_VERIFIER = 4;
public static final int PACKAGE_BROWSER = 5;
public static final int PACKAGE_SYSTEM_TEXT_CLASSIFIER = 6;
public static final int PACKAGE_PERMISSION_CONTROLLER = 7;
public static final int PACKAGE_WELLBEING = 8;
public static final int PACKAGE_DOCUMENTER = 9;
public static final int PACKAGE_CONFIGURATOR = 10;
public static final int PACKAGE_INCIDENT_REPORT_APPROVER = 11;
public static final int PACKAGE_APP_PREDICTOR = 12;
public static final int PACKAGE_OVERLAY_CONFIG_SIGNATURE = 13;
public static final int PACKAGE_WIFI = 14;
public static final int PACKAGE_COMPANION = 15;
public static final int PACKAGE_RETAIL_DEMO = 16;
public static final int PACKAGE_RECENTS = 17;
public static final int PACKAGE_AMBIENT_CONTEXT_DETECTION = 18;
public static final int PACKAGE_WEARABLE_SENSING = 19;
// Integer value of the last known package ID. Increases as new ID is added to KnownPackage.
// Please note the numbers should be continuous.
public static final int LAST_KNOWN_PACKAGE = PACKAGE_WEARABLE_SENSING;
static final String SYSTEM_PACKAGE_NAME = "android";
private final DefaultAppProvider mDefaultAppProvider;
private final String mRequiredInstallerPackage;
private final String mRequiredUninstallerPackage;
private final String mSetupWizardPackage;
private final String[] mRequiredVerifierPackages;
private final String mDefaultTextClassifierPackage;
private final String mSystemTextClassifierPackageName;
private final String mRequiredPermissionControllerPackage;
private final String mConfiguratorPackage;
private final String mIncidentReportApproverPackage;
private final String mAmbientContextDetectionPackage;
private final String mWearableSensingPackage;
private final String mAppPredictionServicePackage;
private final String mCompanionPackage;
private final String mRetailDemoPackage;
private final String mOverlayConfigSignaturePackage;
private final String mRecentsPackage;
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) {
mDefaultAppProvider = defaultAppProvider;
mRequiredInstallerPackage = requiredInstallerPackage;
mRequiredUninstallerPackage = requiredUninstallerPackage;
mSetupWizardPackage = setupWizardPackage;
mRequiredVerifierPackages = requiredVerifierPackages;
mDefaultTextClassifierPackage = defaultTextClassifierPackage;
mSystemTextClassifierPackageName = systemTextClassifierPackageName;
mRequiredPermissionControllerPackage = requiredPermissionControllerPackage;
mConfiguratorPackage = configuratorPackage;
mIncidentReportApproverPackage = incidentReportApproverPackage;
mAmbientContextDetectionPackage = ambientContextDetectionPackage;
mWearableSensingPackage = wearableSensingPackage;
mAppPredictionServicePackage = appPredictionServicePackage;
mCompanionPackage = companionPackageName;
mRetailDemoPackage = retailDemoPackage;
mOverlayConfigSignaturePackage = overlayConfigSignaturePackage;
mRecentsPackage = recentsPackage;
}
/**
* Returns the string representation of a known package. For example,
* {@link #PACKAGE_SETUP_WIZARD} is represented by the string Setup Wizard.
*
* @param knownPackage The known package.
* @return The string representation.
*/
static @NonNull String knownPackageToString(@KnownPackage int knownPackage) {
switch (knownPackage) {
case PACKAGE_SYSTEM:
return "System";
case PACKAGE_SETUP_WIZARD:
return "Setup Wizard";
case PACKAGE_INSTALLER:
return "Installer";
case PACKAGE_UNINSTALLER:
return "Uninstaller";
case PACKAGE_VERIFIER:
return "Verifier";
case PACKAGE_BROWSER:
return "Browser";
case PACKAGE_SYSTEM_TEXT_CLASSIFIER:
return "System Text Classifier";
case PACKAGE_PERMISSION_CONTROLLER:
return "Permission Controller";
case PACKAGE_WELLBEING:
return "Wellbeing";
case PACKAGE_DOCUMENTER:
return "Documenter";
case PACKAGE_CONFIGURATOR:
return "Configurator";
case PACKAGE_INCIDENT_REPORT_APPROVER:
return "Incident Report Approver";
case PACKAGE_APP_PREDICTOR:
return "App Predictor";
case PACKAGE_WIFI:
return "Wi-Fi";
case PACKAGE_COMPANION:
return "Companion";
case PACKAGE_RETAIL_DEMO:
return "Retail Demo";
case PACKAGE_OVERLAY_CONFIG_SIGNATURE:
return "Overlay Config Signature";
case PACKAGE_RECENTS:
return "Recents";
case PACKAGE_AMBIENT_CONTEXT_DETECTION:
return "Ambient Context Detection";
case PACKAGE_WEARABLE_SENSING:
return "Wearable sensing";
}
return "Unknown";
}
String[] getKnownPackageNames(@NonNull Computer snapshot, int knownPackage, int userId) {
switch (knownPackage) {
case PACKAGE_BROWSER:
return new String[]{mDefaultAppProvider.getDefaultBrowser(userId)};
case PACKAGE_INSTALLER:
return snapshot.filterOnlySystemPackages(mRequiredInstallerPackage);
case PACKAGE_UNINSTALLER:
return snapshot.filterOnlySystemPackages(mRequiredUninstallerPackage);
case PACKAGE_SETUP_WIZARD:
return snapshot.filterOnlySystemPackages(mSetupWizardPackage);
case PACKAGE_SYSTEM:
return new String[]{SYSTEM_PACKAGE_NAME};
case PACKAGE_VERIFIER:
return snapshot.filterOnlySystemPackages(mRequiredVerifierPackages);
case PACKAGE_SYSTEM_TEXT_CLASSIFIER:
return snapshot.filterOnlySystemPackages(
mDefaultTextClassifierPackage, mSystemTextClassifierPackageName);
case PACKAGE_PERMISSION_CONTROLLER:
return snapshot.filterOnlySystemPackages(mRequiredPermissionControllerPackage);
case PACKAGE_CONFIGURATOR:
return snapshot.filterOnlySystemPackages(mConfiguratorPackage);
case PACKAGE_INCIDENT_REPORT_APPROVER:
return snapshot.filterOnlySystemPackages(mIncidentReportApproverPackage);
case PACKAGE_AMBIENT_CONTEXT_DETECTION:
return snapshot.filterOnlySystemPackages(mAmbientContextDetectionPackage);
case PACKAGE_WEARABLE_SENSING:
return snapshot.filterOnlySystemPackages(mWearableSensingPackage);
case PACKAGE_APP_PREDICTOR:
return snapshot.filterOnlySystemPackages(mAppPredictionServicePackage);
case PACKAGE_COMPANION:
return snapshot.filterOnlySystemPackages(mCompanionPackage);
case PACKAGE_RETAIL_DEMO:
return TextUtils.isEmpty(mRetailDemoPackage)
? ArrayUtils.emptyArray(String.class)
: new String[]{mRetailDemoPackage};
case PACKAGE_OVERLAY_CONFIG_SIGNATURE:
return snapshot.filterOnlySystemPackages(mOverlayConfigSignaturePackage);
case PACKAGE_RECENTS:
return snapshot.filterOnlySystemPackages(mRecentsPackage);
default:
return ArrayUtils.emptyArray(String.class);
}
}
}