Merge "add a new telephony protection level"
am: cd953e939f
Change-Id: Ie275baf92a865fe1dc5855b00e49944d2598e4b4
This commit is contained in:
@@ -1746,6 +1746,7 @@ package android.content.pm {
|
||||
field public static final int PROTECTION_FLAG_INCIDENT_REPORT_APPROVER = 1048576; // 0x100000
|
||||
field public static final int PROTECTION_FLAG_OEM = 16384; // 0x4000
|
||||
field public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 65536; // 0x10000
|
||||
field public static final int PROTECTION_FLAG_TELEPHONY = 4194304; // 0x400000
|
||||
field public static final int PROTECTION_FLAG_WELLBEING = 131072; // 0x20000
|
||||
field @Nullable public final String backgroundPermission;
|
||||
field @StringRes public int requestRes;
|
||||
|
||||
@@ -707,6 +707,7 @@ package android.content.pm {
|
||||
method @RequiresPermission(anyOf={"android.permission.GRANT_RUNTIME_PERMISSIONS", "android.permission.REVOKE_RUNTIME_PERMISSIONS", "android.permission.GET_RUNTIME_PERMISSIONS"}) public abstract int getPermissionFlags(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
|
||||
method @NonNull public abstract String getServicesSystemSharedLibraryPackageName();
|
||||
method @NonNull public abstract String getSharedSystemSharedLibraryPackageName();
|
||||
method @Nullable public String[] getTelephonyPackageNames();
|
||||
method @Nullable public String getWellbeingPackageName();
|
||||
method @RequiresPermission("android.permission.GRANT_RUNTIME_PERMISSIONS") public abstract void grantRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
|
||||
method @RequiresPermission("android.permission.REVOKE_RUNTIME_PERMISSIONS") public abstract void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
|
||||
@@ -739,6 +740,7 @@ package android.content.pm {
|
||||
field public static final int PROTECTION_FLAG_INCIDENT_REPORT_APPROVER = 1048576; // 0x100000
|
||||
field public static final int PROTECTION_FLAG_OEM = 16384; // 0x4000
|
||||
field public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 65536; // 0x10000
|
||||
field public static final int PROTECTION_FLAG_TELEPHONY = 4194304; // 0x400000
|
||||
field public static final int PROTECTION_FLAG_VENDOR_PRIVILEGED = 32768; // 0x8000
|
||||
field public static final int PROTECTION_FLAG_WELLBEING = 131072; // 0x20000
|
||||
field @Nullable public final String backgroundPermission;
|
||||
|
||||
@@ -3120,6 +3120,15 @@ public class ApplicationPackageManager extends PackageManager {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getTelephonyPackageNames() {
|
||||
try {
|
||||
return mPM.getTelephonyPackageNames();
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSystemCaptionsServicePackageName() {
|
||||
try {
|
||||
|
||||
@@ -754,6 +754,8 @@ interface IPackageManager {
|
||||
|
||||
String getWellbeingPackageName();
|
||||
|
||||
String[] getTelephonyPackageNames();
|
||||
|
||||
String getAppPredictionServicePackageName();
|
||||
|
||||
String getSystemCaptionsServicePackageName();
|
||||
|
||||
@@ -7367,6 +7367,18 @@ public abstract class PackageManager {
|
||||
"getAppPredictionServicePackageName not implemented in subclass");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the system defined telephony package names, or null if there's none.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@Nullable
|
||||
@TestApi
|
||||
public String[] getTelephonyPackageNames() {
|
||||
throw new UnsupportedOperationException(
|
||||
"getTelephonyPackageNames not implemented in subclass");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the system defined content capture service package name, or null if there's none.
|
||||
*
|
||||
|
||||
@@ -59,6 +59,7 @@ public abstract class PackageManagerInternal {
|
||||
public static final int PACKAGE_CONFIGURATOR = 9;
|
||||
public static final int PACKAGE_INCIDENT_REPORT_APPROVER = 10;
|
||||
public static final int PACKAGE_APP_PREDICTOR = 11;
|
||||
public static final int PACKAGE_TELEPHONY = 12;
|
||||
@IntDef(value = {
|
||||
PACKAGE_SYSTEM,
|
||||
PACKAGE_SETUP_WIZARD,
|
||||
@@ -72,6 +73,7 @@ public abstract class PackageManagerInternal {
|
||||
PACKAGE_CONFIGURATOR,
|
||||
PACKAGE_INCIDENT_REPORT_APPROVER,
|
||||
PACKAGE_APP_PREDICTOR,
|
||||
PACKAGE_TELEPHONY,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface KnownPackage {}
|
||||
@@ -715,10 +717,11 @@ public abstract class PackageManagerInternal {
|
||||
*/
|
||||
public abstract boolean isResolveActivityComponent(@NonNull ComponentInfo component);
|
||||
|
||||
|
||||
/**
|
||||
* Returns the package name for a known package.
|
||||
* Returns a list of package names for a known package
|
||||
*/
|
||||
public abstract @Nullable String getKnownPackageName(
|
||||
public abstract @NonNull String[] getKnownPackageNames(
|
||||
@KnownPackage int knownPackage, int userId);
|
||||
|
||||
/**
|
||||
|
||||
@@ -237,6 +237,17 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
@TestApi
|
||||
public static final int PROTECTION_FLAG_APP_PREDICTOR = 0x200000;
|
||||
|
||||
/**
|
||||
* Additional flag for {@link #protectionLevel}, corresponding
|
||||
* to the <code>telephony</code> value of
|
||||
* {@link android.R.attr#protectionLevel}.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public static final int PROTECTION_FLAG_TELEPHONY = 0x400000;
|
||||
|
||||
/** @hide */
|
||||
@IntDef(flag = true, prefix = { "PROTECTION_FLAG_" }, value = {
|
||||
PROTECTION_FLAG_PRIVILEGED,
|
||||
@@ -258,6 +269,7 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
PROTECTION_FLAG_CONFIGURATOR,
|
||||
PROTECTION_FLAG_INCIDENT_REPORT_APPROVER,
|
||||
PROTECTION_FLAG_APP_PREDICTOR,
|
||||
PROTECTION_FLAG_TELEPHONY,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ProtectionFlags {}
|
||||
@@ -501,6 +513,9 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
if ((level & PermissionInfo.PROTECTION_FLAG_APP_PREDICTOR) != 0) {
|
||||
protLevel += "|appPredictor";
|
||||
}
|
||||
if ((level & PermissionInfo.PROTECTION_FLAG_TELEPHONY) != 0) {
|
||||
protLevel += "|telephony";
|
||||
}
|
||||
return protLevel;
|
||||
}
|
||||
|
||||
|
||||
@@ -1626,7 +1626,7 @@
|
||||
@hide This should only be used by Settings and SystemUI.
|
||||
-->
|
||||
<permission android:name="android.permission.NETWORK_SETTINGS"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- Allows SetupWizard to call methods in Networking services
|
||||
<p>Not for use by any other third-party or privileged applications.
|
||||
@@ -2146,12 +2146,12 @@
|
||||
|
||||
<!-- Must be required by a telephony data service to ensure that only the
|
||||
system can bind to it.
|
||||
<p>Protection level: signature
|
||||
<p>Protection level: signature|telephony
|
||||
@SystemApi
|
||||
@hide
|
||||
-->
|
||||
<permission android:name="android.permission.BIND_TELEPHONY_DATA_SERVICE"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- Must be required by a NetworkService to ensure that only the
|
||||
system can bind to it.
|
||||
@@ -2172,11 +2172,11 @@
|
||||
|
||||
<!-- @SystemApi Must be required by an EuiccService to ensure that only the system can bind to
|
||||
it.
|
||||
<p>Protection level: signature
|
||||
<p>Protection level: signature|telephony
|
||||
@hide
|
||||
-->
|
||||
<permission android:name="android.permission.BIND_EUICC_SERVICE"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- ================================== -->
|
||||
<!-- Permissions for sdcard interaction -->
|
||||
@@ -2956,7 +2956,7 @@
|
||||
@hide
|
||||
-->
|
||||
<permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- @SystemApi Allows an application to use
|
||||
{@link android.view.WindowManager.LayoutsParams#SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS}
|
||||
@@ -3736,7 +3736,7 @@
|
||||
@hide
|
||||
-->
|
||||
<permission android:name="android.permission.DEVICE_POWER"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- Allows toggling battery saver on the system.
|
||||
Superseded by DEVICE_POWER permission. @hide @SystemApi
|
||||
@@ -3771,13 +3771,13 @@
|
||||
<p>Not for use by third-party applications.
|
||||
-->
|
||||
<permission android:name="android.permission.BROADCAST_SMS"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- Allows an application to broadcast a WAP PUSH receipt notification.
|
||||
<p>Not for use by third-party applications.
|
||||
-->
|
||||
<permission android:name="android.permission.BROADCAST_WAP_PUSH"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- @SystemApi Allows an application to broadcast privileged networking requests.
|
||||
<p>Not for use by third-party applications.
|
||||
@@ -4392,13 +4392,13 @@
|
||||
{@link android.provider.BlockedNumberContract}.
|
||||
@hide -->
|
||||
<permission android:name="android.permission.READ_BLOCKED_NUMBERS"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- Allows the holder to write blocked numbers. See
|
||||
{@link android.provider.BlockedNumberContract}.
|
||||
@hide -->
|
||||
<permission android:name="android.permission.WRITE_BLOCKED_NUMBERS"
|
||||
android:protectionLevel="signature" />
|
||||
android:protectionLevel="signature|telephony" />
|
||||
|
||||
<!-- Must be required by an {@link android.service.vr.VrListenerService}, to ensure that only
|
||||
the system can bind to it.
|
||||
|
||||
@@ -295,6 +295,9 @@
|
||||
<!-- Additional flag from base permission type: this permission can be automatically
|
||||
granted to the system app predictor -->
|
||||
<flag name="appPredictor" value="0x200000" />
|
||||
<!-- Additional flag from base permission type: this permission can be automatically
|
||||
granted to the system telephony apps -->
|
||||
<flag name="telephony" value="0x400000" />
|
||||
</attr>
|
||||
|
||||
<!-- Flags indicating more context for a permission group. -->
|
||||
|
||||
@@ -3677,6 +3677,15 @@
|
||||
-->
|
||||
<string name="config_defaultWellbeingPackage" translatable="false"></string>
|
||||
|
||||
|
||||
<!-- The package name for the system telephony apps.
|
||||
This package must be trusted, as it will be granted with permissions with special telephony
|
||||
protection level. Note, framework by default support multiple telephony apps, each package
|
||||
name is separated by comma.
|
||||
Example: "com.android.phone,com.android.stk,com.android.providers.telephony"
|
||||
-->
|
||||
<string name="config_telephonyPackages" translatable="false">"com.android.phone,com.android.stk,com.android.providers.telephony,com.android.ons"</string>
|
||||
|
||||
<!-- The component name for the default system attention service.
|
||||
This service must be trusted, as it can be activated without explicit consent of the user.
|
||||
See android.attention.AttentionManagerService.
|
||||
|
||||
@@ -3464,6 +3464,7 @@
|
||||
<java-symbol type="string" name="config_defaultAutofillService" />
|
||||
<java-symbol type="string" name="config_defaultTextClassifierPackage" />
|
||||
<java-symbol type="string" name="config_defaultWellbeingPackage" />
|
||||
<java-symbol type="string" name="config_telephonyPackages" />
|
||||
<java-symbol type="string" name="config_defaultContentCaptureService" />
|
||||
<java-symbol type="string" name="config_defaultAugmentedAutofillService" />
|
||||
<java-symbol type="string" name="config_defaultAppPredictionService" />
|
||||
|
||||
@@ -49,6 +49,7 @@ import android.util.Pair;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
import com.android.server.IntentResolver;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
@@ -375,8 +376,11 @@ public class ComponentResolver {
|
||||
addProvidersLocked(pkg, chatty);
|
||||
addServicesLocked(pkg, chatty);
|
||||
}
|
||||
final String setupWizardPackage = sPackageManagerInternal.getKnownPackageName(
|
||||
PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM);
|
||||
// expect single setupwizard package
|
||||
final String setupWizardPackage = ArrayUtils.firstOrNull(
|
||||
sPackageManagerInternal.getKnownPackageNames(
|
||||
PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM));
|
||||
|
||||
for (int i = newIntents.size() - 1; i >= 0; --i) {
|
||||
final PackageParser.ActivityIntentInfo intentInfo = newIntents.get(i);
|
||||
final PackageParser.Package disabledPkg = sPackageManagerInternal
|
||||
@@ -410,8 +414,11 @@ public class ComponentResolver {
|
||||
final List<ActivityIntentInfo> protectedFilters = mProtectedFilters;
|
||||
mProtectedFilters = null;
|
||||
|
||||
final String setupWizardPackage = sPackageManagerInternal.getKnownPackageName(
|
||||
PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM);
|
||||
// expect single setupwizard package
|
||||
final String setupWizardPackage = ArrayUtils.firstOrNull(
|
||||
sPackageManagerInternal.getKnownPackageNames(
|
||||
PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM));
|
||||
|
||||
if (DEBUG_FILTERS && setupWizardPackage == null) {
|
||||
Slog.i(TAG, "No setup wizard;"
|
||||
+ " All protected intents capped to priority 0");
|
||||
|
||||
@@ -1408,6 +1408,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final @Nullable String mConfiguratorPackage;
|
||||
final @Nullable String mAppPredictionServicePackage;
|
||||
final @Nullable String mIncidentReportApproverPackage;
|
||||
final @Nullable String[] mTelephonyPackages;
|
||||
final @NonNull String mServicesSystemSharedLibraryPackageName;
|
||||
final @NonNull String mSharedSystemSharedLibraryPackageName;
|
||||
|
||||
@@ -3132,6 +3133,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mContext.getString(R.string.config_deviceConfiguratorPackageName);
|
||||
mAppPredictionServicePackage = getAppPredictionServicePackageName();
|
||||
mIncidentReportApproverPackage = getIncidentReportApproverPackageName();
|
||||
mTelephonyPackages = getTelephonyPackageNames();
|
||||
|
||||
// Now that we know all of the shared libraries, update all clients to have
|
||||
// the correct library paths.
|
||||
@@ -21202,6 +21204,16 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
return mContext.getString(R.string.config_incidentReportApproverPackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getTelephonyPackageNames() {
|
||||
String names = mContext.getString(R.string.config_telephonyPackages);
|
||||
String[] telephonyPackageNames = null;
|
||||
if (!TextUtils.isEmpty(names)) {
|
||||
telephonyPackageNames = names.trim().split(",");
|
||||
}
|
||||
return telephonyPackageNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationEnabledSetting(String appPackageName,
|
||||
int newState, int flags, int userId, String callingPackage) {
|
||||
@@ -24351,34 +24363,36 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKnownPackageName(int knownPackage, int userId) {
|
||||
public @NonNull String[] getKnownPackageNames(int knownPackage, int userId) {
|
||||
switch(knownPackage) {
|
||||
case PackageManagerInternal.PACKAGE_BROWSER:
|
||||
return getDefaultBrowserPackageName(userId);
|
||||
return new String[]{getDefaultBrowserPackageName(userId)};
|
||||
case PackageManagerInternal.PACKAGE_INSTALLER:
|
||||
return mRequiredInstallerPackage;
|
||||
return new String[]{mRequiredInstallerPackage};
|
||||
case PackageManagerInternal.PACKAGE_SETUP_WIZARD:
|
||||
return mSetupWizardPackage;
|
||||
return new String[]{mSetupWizardPackage};
|
||||
case PackageManagerInternal.PACKAGE_SYSTEM:
|
||||
return "android";
|
||||
return new String[]{"android"};
|
||||
case PackageManagerInternal.PACKAGE_VERIFIER:
|
||||
return mRequiredVerifierPackage;
|
||||
return new String[]{mRequiredVerifierPackage};
|
||||
case PackageManagerInternal.PACKAGE_SYSTEM_TEXT_CLASSIFIER:
|
||||
return mSystemTextClassifierPackage;
|
||||
return new String[]{mSystemTextClassifierPackage};
|
||||
case PackageManagerInternal.PACKAGE_PERMISSION_CONTROLLER:
|
||||
return mRequiredPermissionControllerPackage;
|
||||
return new String[]{mRequiredPermissionControllerPackage};
|
||||
case PackageManagerInternal.PACKAGE_WELLBEING:
|
||||
return mWellbeingPackage;
|
||||
return new String[]{mWellbeingPackage};
|
||||
case PackageManagerInternal.PACKAGE_DOCUMENTER:
|
||||
return mDocumenterPackage;
|
||||
return new String[]{mDocumenterPackage};
|
||||
case PackageManagerInternal.PACKAGE_CONFIGURATOR:
|
||||
return mConfiguratorPackage;
|
||||
return new String[]{mConfiguratorPackage};
|
||||
case PackageManagerInternal.PACKAGE_INCIDENT_REPORT_APPROVER:
|
||||
return mIncidentReportApproverPackage;
|
||||
return new String[]{mIncidentReportApproverPackage};
|
||||
case PackageManagerInternal.PACKAGE_APP_PREDICTOR:
|
||||
return mAppPredictionServicePackage;
|
||||
return new String[]{mAppPredictionServicePackage};
|
||||
case PackageManagerInternal.PACKAGE_TELEPHONY:
|
||||
return mTelephonyPackages;
|
||||
}
|
||||
return null;
|
||||
return ArrayUtils.emptyArray(String.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -276,6 +276,9 @@ public final class BasePermission {
|
||||
public boolean isAppPredictor() {
|
||||
return (protectionLevel & PermissionInfo.PROTECTION_FLAG_APP_PREDICTOR) != 0;
|
||||
}
|
||||
public boolean isTelephony() {
|
||||
return (protectionLevel & PermissionInfo.PROTECTION_FLAG_TELEPHONY) != 0;
|
||||
}
|
||||
|
||||
public void transfer(@NonNull String origPackageName, @NonNull String newPackageName) {
|
||||
if (!origPackageName.equals(sourcePackageName)) {
|
||||
|
||||
@@ -437,17 +437,20 @@ public final class DefaultPermissionGrantPolicy {
|
||||
|
||||
// Installer
|
||||
grantSystemFixedPermissionsToSystemPackage(
|
||||
getKnownPackage(PackageManagerInternal.PACKAGE_INSTALLER, userId),
|
||||
ArrayUtils.firstOrNull(getKnownPackages(
|
||||
PackageManagerInternal.PACKAGE_INSTALLER, userId)),
|
||||
userId, STORAGE_PERMISSIONS);
|
||||
|
||||
// Verifier
|
||||
final String verifier = getKnownPackage(PackageManagerInternal.PACKAGE_VERIFIER, userId);
|
||||
final String verifier = ArrayUtils.firstOrNull(getKnownPackages(
|
||||
PackageManagerInternal.PACKAGE_VERIFIER, userId));
|
||||
grantSystemFixedPermissionsToSystemPackage(verifier, userId, STORAGE_PERMISSIONS);
|
||||
grantPermissionsToSystemPackage(verifier, userId, PHONE_PERMISSIONS, SMS_PERMISSIONS);
|
||||
|
||||
// SetupWizard
|
||||
grantPermissionsToSystemPackage(
|
||||
getKnownPackage(PackageManagerInternal.PACKAGE_SETUP_WIZARD, userId), userId,
|
||||
ArrayUtils.firstOrNull(getKnownPackages(
|
||||
PackageManagerInternal.PACKAGE_SETUP_WIZARD, userId)), userId,
|
||||
PHONE_PERMISSIONS, CONTACTS_PERMISSIONS, ALWAYS_LOCATION_PERMISSIONS,
|
||||
CAMERA_PERMISSIONS);
|
||||
|
||||
@@ -596,7 +599,8 @@ public final class DefaultPermissionGrantPolicy {
|
||||
userId, CONTACTS_PERMISSIONS, CALENDAR_PERMISSIONS);
|
||||
|
||||
// Browser
|
||||
String browserPackage = getKnownPackage(PackageManagerInternal.PACKAGE_BROWSER, userId);
|
||||
String browserPackage = ArrayUtils.firstOrNull(getKnownPackages(
|
||||
PackageManagerInternal.PACKAGE_BROWSER, userId));
|
||||
if (browserPackage == null) {
|
||||
browserPackage = getDefaultSystemHandlerActivityPackageForCategory(
|
||||
Intent.CATEGORY_APP_BROWSER, userId);
|
||||
@@ -761,8 +765,8 @@ public final class DefaultPermissionGrantPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
private String getKnownPackage(int knownPkgId, int userId) {
|
||||
return mServiceInternal.getKnownPackageName(knownPkgId, userId);
|
||||
private @NonNull String[] getKnownPackages(int knownPkgId, int userId) {
|
||||
return mServiceInternal.getKnownPackageNames(knownPkgId, userId);
|
||||
}
|
||||
|
||||
private void grantDefaultPermissionsToDefaultSystemDialerApp(
|
||||
|
||||
@@ -1710,8 +1710,9 @@ public class PermissionManagerService {
|
||||
}
|
||||
}
|
||||
}
|
||||
final String systemPackageName = mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_SYSTEM, UserHandle.USER_SYSTEM);
|
||||
// expect single system package
|
||||
String systemPackageName = ArrayUtils.firstOrNull(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_SYSTEM, UserHandle.USER_SYSTEM));
|
||||
final PackageParser.Package systemPackage =
|
||||
mPackageManagerInt.getPackage(systemPackageName);
|
||||
|
||||
@@ -1827,18 +1828,19 @@ public class PermissionManagerService {
|
||||
// need a separate flag anymore. Hence we need to check which
|
||||
// permissions are needed by the permission controller
|
||||
if (!allowed && bp.isInstaller()
|
||||
&& (pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_INSTALLER, UserHandle.USER_SYSTEM))
|
||||
|| pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_INSTALLER, UserHandle.USER_SYSTEM),
|
||||
pkg.packageName) || ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_PERMISSION_CONTROLLER,
|
||||
UserHandle.USER_SYSTEM)))) {
|
||||
UserHandle.USER_SYSTEM), pkg.packageName)) {
|
||||
// If this permission is to be granted to the system installer and
|
||||
// this app is an installer, then it gets the permission.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isVerifier()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_VERIFIER, UserHandle.USER_SYSTEM))) {
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_VERIFIER, UserHandle.USER_SYSTEM),
|
||||
pkg.packageName)) {
|
||||
// If this permission is to be granted to the system verifier and
|
||||
// this app is a verifier, then it gets the permission.
|
||||
allowed = true;
|
||||
@@ -1854,53 +1856,64 @@ public class PermissionManagerService {
|
||||
allowed = origPermissions.hasInstallPermission(perm);
|
||||
}
|
||||
if (!allowed && bp.isSetup()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM))) {
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_SETUP_WIZARD, UserHandle.USER_SYSTEM),
|
||||
pkg.packageName)) {
|
||||
// If this permission is to be granted to the system setup wizard and
|
||||
// this app is a setup wizard, then it gets the permission.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isSystemTextClassifier()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_SYSTEM_TEXT_CLASSIFIER,
|
||||
UserHandle.USER_SYSTEM))) {
|
||||
UserHandle.USER_SYSTEM), pkg.packageName)) {
|
||||
// Special permissions for the system default text classifier.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isConfigurator()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_CONFIGURATOR,
|
||||
UserHandle.USER_SYSTEM))) {
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_CONFIGURATOR,
|
||||
UserHandle.USER_SYSTEM), pkg.packageName)) {
|
||||
// Special permissions for the device configurator.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isWellbeing()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_WELLBEING, UserHandle.USER_SYSTEM))) {
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_WELLBEING, UserHandle.USER_SYSTEM),
|
||||
pkg.packageName)) {
|
||||
// Special permission granted only to the OEM specified wellbeing app
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isDocumenter()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_DOCUMENTER, UserHandle.USER_SYSTEM))) {
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_DOCUMENTER, UserHandle.USER_SYSTEM),
|
||||
pkg.packageName)) {
|
||||
// If this permission is to be granted to the documenter and
|
||||
// this app is the documenter, then it gets the permission.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isIncidentReportApprover()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_INCIDENT_REPORT_APPROVER,
|
||||
UserHandle.USER_SYSTEM))) {
|
||||
UserHandle.USER_SYSTEM), pkg.packageName)) {
|
||||
// If this permission is to be granted to the incident report approver and
|
||||
// this app is the incident report approver, then it gets the permission.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isAppPredictor()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_APP_PREDICTOR, UserHandle.USER_SYSTEM))) {
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_APP_PREDICTOR, UserHandle.USER_SYSTEM),
|
||||
pkg.packageName)) {
|
||||
// Special permissions for the system app predictor.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isTelephony()
|
||||
&& ArrayUtils.contains(mPackageManagerInt.getKnownPackageNames(
|
||||
PackageManagerInternal.PACKAGE_TELEPHONY, UserHandle.USER_SYSTEM),
|
||||
pkg.packageName)) {
|
||||
// Special permissions for the system telephony apps.
|
||||
allowed = true;
|
||||
}
|
||||
}
|
||||
return allowed;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user