Merge "Added a new "wellbeing" protection flag."
This commit is contained in:
@@ -7,6 +7,7 @@ package android {
|
||||
field public static final java.lang.String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
|
||||
field public static final java.lang.String ACCESS_DRM_CERTIFICATES = "android.permission.ACCESS_DRM_CERTIFICATES";
|
||||
field public static final deprecated java.lang.String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO";
|
||||
field public static final java.lang.String ACCESS_INSTANT_APPS = "android.permission.ACCESS_INSTANT_APPS";
|
||||
field public static final java.lang.String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION";
|
||||
field public static final java.lang.String ACCESS_MTP = "android.permission.ACCESS_MTP";
|
||||
field public static final java.lang.String ACCESS_NETWORK_CONDITIONS = "android.permission.ACCESS_NETWORK_CONDITIONS";
|
||||
@@ -1252,6 +1253,7 @@ package android.content.pm {
|
||||
method public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(java.lang.String);
|
||||
method public abstract int getIntentVerificationStatusAsUser(java.lang.String, int);
|
||||
method public abstract int getPermissionFlags(java.lang.String, java.lang.String, android.os.UserHandle);
|
||||
method public java.lang.String getWellbeingPackageName();
|
||||
method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
|
||||
method public abstract int installExistingPackage(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException;
|
||||
method public abstract int installExistingPackage(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
|
||||
@@ -1354,6 +1356,7 @@ package android.content.pm {
|
||||
field public static final int FLAG_REMOVED = 2; // 0x2
|
||||
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_WELLBEING = 131072; // 0x20000
|
||||
field public java.lang.String backgroundPermission;
|
||||
field public int requestRes;
|
||||
}
|
||||
|
||||
@@ -374,6 +374,7 @@ package android.content.pm {
|
||||
public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
|
||||
field public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 65536; // 0x10000
|
||||
field public static final int PROTECTION_FLAG_VENDOR_PRIVILEGED = 32768; // 0x8000
|
||||
field public static final int PROTECTION_FLAG_WELLBEING = 131072; // 0x20000
|
||||
field public java.lang.String backgroundPermission;
|
||||
}
|
||||
|
||||
|
||||
@@ -2973,6 +2973,15 @@ public class ApplicationPackageManager extends PackageManager {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWellbeingPackageName() {
|
||||
try {
|
||||
return mPM.getWellbeingPackageName();
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowAsRuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPackageStateProtected(String packageName, int userId) {
|
||||
try {
|
||||
|
||||
@@ -675,6 +675,8 @@ interface IPackageManager {
|
||||
|
||||
String getSystemTextClassifierPackageName();
|
||||
|
||||
String getWellbeingPackageName();
|
||||
|
||||
boolean isPackageStateProtected(String packageName, int userId);
|
||||
|
||||
void sendDeviceCustomizationReadyBroadcast();
|
||||
|
||||
@@ -6433,6 +6433,17 @@ public abstract class PackageManager {
|
||||
"getSystemTextClassifierPackageName not implemented in subclass");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the wellbeing app package name, or null if it's not defined by the OEM.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public String getWellbeingPackageName() {
|
||||
throw new UnsupportedOperationException(
|
||||
"getWellbeingPackageName not implemented in subclass");
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether a given package's state is protected, e.g. package cannot be disabled,
|
||||
* suspended, hidden or force stopped.
|
||||
|
||||
@@ -53,6 +53,7 @@ public abstract class PackageManagerInternal {
|
||||
public static final int PACKAGE_BROWSER = 4;
|
||||
public static final int PACKAGE_SYSTEM_TEXT_CLASSIFIER = 5;
|
||||
public static final int PACKAGE_PERMISSION_CONTROLLER = 6;
|
||||
public static final int PACKAGE_WELLBEING = 7;
|
||||
@IntDef(value = {
|
||||
PACKAGE_SYSTEM,
|
||||
PACKAGE_SETUP_WIZARD,
|
||||
@@ -61,6 +62,7 @@ public abstract class PackageManagerInternal {
|
||||
PACKAGE_BROWSER,
|
||||
PACKAGE_SYSTEM_TEXT_CLASSIFIER,
|
||||
PACKAGE_PERMISSION_CONTROLLER,
|
||||
PACKAGE_WELLBEING,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface KnownPackage {}
|
||||
|
||||
@@ -181,6 +181,17 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
@TestApi
|
||||
public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 0x10000;
|
||||
|
||||
/**
|
||||
* Additional flag for {${link #protectionLevel}, corresponding
|
||||
* to the <code>wellbeing</code> value of
|
||||
* {@link android.R.attr#protectionLevel}.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@TestApi
|
||||
public static final int PROTECTION_FLAG_WELLBEING = 0x20000;
|
||||
|
||||
/** @hide */
|
||||
@IntDef(flag = true, prefix = { "PROTECTION_FLAG_" }, value = {
|
||||
PROTECTION_FLAG_PRIVILEGED,
|
||||
@@ -197,6 +208,7 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
PROTECTION_FLAG_OEM,
|
||||
PROTECTION_FLAG_VENDOR_PRIVILEGED,
|
||||
PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER,
|
||||
PROTECTION_FLAG_WELLBEING,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ProtectionFlags {}
|
||||
@@ -386,6 +398,9 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable {
|
||||
if ((level & PermissionInfo.PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER) != 0) {
|
||||
protLevel += "|textClassifier";
|
||||
}
|
||||
if ((level & PermissionInfo.PROTECTION_FLAG_WELLBEING) != 0) {
|
||||
protLevel += "|wellbeing";
|
||||
}
|
||||
return protLevel;
|
||||
}
|
||||
|
||||
|
||||
@@ -1648,7 +1648,7 @@
|
||||
@hide
|
||||
-->
|
||||
<permission android:name="android.permission.SUSPEND_APPS"
|
||||
android:protectionLevel="signature|privileged" />
|
||||
android:protectionLevel="signature|wellbeing" />
|
||||
|
||||
<!-- Allows applications to discover and pair bluetooth devices.
|
||||
<p>Protection level: normal
|
||||
@@ -4086,10 +4086,10 @@
|
||||
confirmation UI for full backup/restore -->
|
||||
<uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP"/>
|
||||
|
||||
<!-- Allows the holder to access and manage instant applications on the device.
|
||||
@hide -->
|
||||
<!-- @SystemApi Allows the holder to access and manage instant applications on the device.
|
||||
@hide -->
|
||||
<permission android:name="android.permission.ACCESS_INSTANT_APPS"
|
||||
android:protectionLevel="signature|installer|verifier" />
|
||||
android:protectionLevel="signature|installer|verifier|wellbeing" />
|
||||
<uses-permission android:name="android.permission.ACCESS_INSTANT_APPS"/>
|
||||
|
||||
<!-- Allows the holder to view the instant applications on the device.
|
||||
|
||||
@@ -268,6 +268,9 @@
|
||||
<!-- Additional flag from base permission type: this permission can be automatically
|
||||
granted to the system default text classifier -->
|
||||
<flag name="textClassifier" value="0x10000" />
|
||||
<!-- Additional flag from base permission type: this permission will be granted to the
|
||||
wellbeing app, as defined by the OEM. -->
|
||||
<flag name="wellbeing" value="0x20000" />
|
||||
</attr>
|
||||
|
||||
<!-- Flags indicating more context for a permission group. -->
|
||||
|
||||
@@ -3349,6 +3349,13 @@
|
||||
See android.view.textclassifier.TextClassificationManager.
|
||||
-->
|
||||
<string name="config_defaultTextClassifierPackage" translatable="false"></string>
|
||||
|
||||
<!-- The package name for the default wellbeing app.
|
||||
This package must be trusted, as it has the permissions to control other applications
|
||||
on the device.
|
||||
Example: "com.android.wellbeing"
|
||||
-->
|
||||
<string name="config_defaultWellbeingPackage" translatable="false"></string>
|
||||
|
||||
<!-- The package name for the system's content capture service.
|
||||
This service must be trusted, as it can be activated without explicit consent of the user.
|
||||
|
||||
@@ -3265,6 +3265,7 @@
|
||||
<java-symbol type="string" name="notification_channel_do_not_disturb" />
|
||||
<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_defaultContentCaptureService" />
|
||||
<java-symbol type="string" name="config_defaultAugmentedAutofillService" />
|
||||
|
||||
|
||||
@@ -1301,6 +1301,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
final @Nullable String mSetupWizardPackage;
|
||||
final @Nullable String mStorageManagerPackage;
|
||||
final @Nullable String mSystemTextClassifierPackage;
|
||||
final @Nullable String mWellbeingPackage;
|
||||
final @NonNull String mServicesSystemSharedLibraryPackageName;
|
||||
final @NonNull String mSharedSystemSharedLibraryPackageName;
|
||||
|
||||
@@ -2790,6 +2791,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
|
||||
mSystemTextClassifierPackage = getSystemTextClassifierPackageName();
|
||||
|
||||
mWellbeingPackage = getWellbeingPackageName();
|
||||
|
||||
// Now that we know all of the shared libraries, update all clients to have
|
||||
// the correct library paths.
|
||||
updateAllSharedLibrariesLPw(null);
|
||||
@@ -19563,6 +19566,11 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
return mContext.getString(R.string.config_defaultTextClassifierPackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWellbeingPackageName() {
|
||||
return mContext.getString(R.string.config_defaultWellbeingPackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationEnabledSetting(String appPackageName,
|
||||
int newState, int flags, int userId, String callingPackage) {
|
||||
@@ -22719,6 +22727,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
return mSystemTextClassifierPackage;
|
||||
case PackageManagerInternal.PACKAGE_PERMISSION_CONTROLLER:
|
||||
return mRequiredPermissionControllerPackage;
|
||||
case PackageManagerInternal.PACKAGE_WELLBEING:
|
||||
return mWellbeingPackage;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -235,6 +235,9 @@ public final class BasePermission {
|
||||
return (protectionLevel & PermissionInfo.PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER)
|
||||
!= 0;
|
||||
}
|
||||
public boolean isWellbeing() {
|
||||
return (protectionLevel & PermissionInfo.PROTECTION_FLAG_WELLBEING) != 0;
|
||||
}
|
||||
|
||||
public void transfer(@NonNull String origPackageName, @NonNull String newPackageName) {
|
||||
if (!origPackageName.equals(sourcePackageName)) {
|
||||
|
||||
@@ -1637,6 +1637,12 @@ public class PermissionManagerService {
|
||||
// Special permissions for the system default text classifier.
|
||||
allowed = true;
|
||||
}
|
||||
if (!allowed && bp.isWellbeing()
|
||||
&& pkg.packageName.equals(mPackageManagerInt.getKnownPackageName(
|
||||
PackageManagerInternal.PACKAGE_WELLBEING, UserHandle.USER_SYSTEM))) {
|
||||
// Special permission granted only to the OEM specified wellbeing app
|
||||
allowed = true;
|
||||
}
|
||||
}
|
||||
return allowed;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user