Loading core/java/android/app/admin/DevicePolicyManager.java +22 −17 Original line number Diff line number Diff line Loading @@ -11580,13 +11580,16 @@ public class DevicePolicyManager { } /** * Sets the set of package names that are allowed to request user consent for cross-profile * communication. * Sets the set of admin-whitelisted package names that are allowed to request user consent for * cross-profile communication. * * <p>Assumes that the caller is a profile owner and is the given {@code admin}. * * <p>Previous calls are overridden by each subsequent call to this method. * * <p>Note that other apps may be able to request user consent for cross-profile communication * if they have been explicitly whitelisted by the OEM. * * <p>When previously-set cross-profile packages are missing from {@code packageNames}, the * app-op for {@code INTERACT_ACROSS_PROFILES} will be reset for those packages. This will not * occur for packages that are whitelisted by the OEM. Loading @@ -11608,15 +11611,18 @@ public class DevicePolicyManager { /** * Returns the set of package names that the admin has previously set as allowed to request user * consent for cross-profile communication, via {@link * #setCrossProfilePackages(ComponentName, Set)}. * consent for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName, * Set)}. * * <p>Assumes that the caller is a profile owner and is the given {@code admin}. * * <p>Note that other apps not included in the returned set may be able to request user consent * for cross-profile communication if they have been explicitly whitelisted by the OEM. * * @param admin the {@link DeviceAdminReceiver} this request is associated with * @return the set of package names the admin has previously set as allowed to request user * consent for cross-profile communication, via {@link * #setCrossProfilePackages(ComponentName, Set)} * consent for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName, * Set)} */ public @NonNull Set<String> getCrossProfilePackages(@NonNull ComponentName admin) { throwIfParentInstance("getCrossProfilePackages"); Loading @@ -11634,18 +11640,17 @@ public class DevicePolicyManager { * Returns the combined set of the following: * <ul> * <li>The package names that the admin has previously set as allowed to request user consent * for cross-profile communication, via {@link * #setCrossProfilePackages(ComponentName, Set)}.</li> * for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName, * Set)}.</li> * <li>The default package names set by the OEM that are allowed to request user consent for * cross-profile communication without being explicitly enabled by the admin, via * {@link com.android.internal.R.array#cross_profile_apps} and * {@link com.android.internal.R.array#vendor_cross_profile_apps}.</li> * cross-profile communication without being explicitly enabled by the admin, via {@link * com.android.internal.R.array#cross_profile_apps} and {@link com.android.internal.R.array * #vendor_cross_profile_apps}.</li> * </ul> * * @return the combined set of whitelisted package names set via * {@link #setCrossProfilePackages(ComponentName, Set)}, * {@link com.android.internal.R.array#cross_profile_apps}, * and {@link com.android.internal.R.array#vendor_cross_profile_apps}. * {@link #setCrossProfilePackages(ComponentName, Set)}, {@link com.android.internal.R.array * #cross_profile_apps}, and {@link com.android.internal.R.array#vendor_cross_profile_apps}. * * @hide */ Loading @@ -11668,9 +11673,9 @@ public class DevicePolicyManager { /** * Returns the default package names set by the OEM that are allowed to request user consent for * cross-profile communication without being explicitly enabled by the admin, via * {@link com.android.internal.R.array#cross_profile_apps} and * {@link com.android.internal.R.array#vendor_cross_profile_apps}. * cross-profile communication without being explicitly enabled by the admin, via {@link * com.android.internal.R.array#cross_profile_apps} and {@link com.android.internal.R.array * #vendor_cross_profile_apps}. * * @hide */ core/java/android/content/pm/CrossProfileApps.java +34 −13 Original line number Diff line number Diff line Loading @@ -47,8 +47,15 @@ import java.util.stream.Collectors; public class CrossProfileApps { /** * Broadcast signalling that the receiving app's ability to interact across profiles has * changed, as defined by the return value of {@link #canInteractAcrossProfiles()}. * Broadcast signalling that the receiving app's permission to interact across profiles has * changed. This includes the user, admin, or OEM changing their consent such that the * permission for the app to interact across profiles has changed. * * <p>This broadcast is not sent when other circumstances result in a change to being able to * interact across profiles in practice, such as the profile being turned off or removed, apps * being uninstalled, etc. The methods {@link #canInteractAcrossProfiles()} and {@link * #canRequestInteractAcrossProfiles()} can be used by apps prior to attempting to interact * across profiles or attempting to request user consent to interact across profiles. * * <p>Apps that have set the {@code android:crossProfile} manifest attribute to {@code true} * can receive this broadcast in manifest broadcast receivers. Otherwise, it can only be Loading Loading @@ -99,8 +106,11 @@ public class CrossProfileApps { /** * Starts the specified activity of the caller package in the specified profile. * * <p>The caller must have the {@link android.Manifest.permission#INTERACT_ACROSS_PROFILES} * permission and both the caller and target user profiles must be in the same profile group. * <p>The caller must have the {@link android.Manifest.permission#INTERACT_ACROSS_PROFILES}, * {@code android.Manifest.permission#INTERACT_ACROSS_USERS}, or {@code * android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. Both the caller and * target user profiles must be in the same profile group. The target user must be a valid user * returned from {@link #getTargetUserProfiles()}. * * @param intent The intent to launch. A component in the caller package must be specified. * @param targetUser The {@link UserHandle} of the profile; must be one of the users returned by Loading Loading @@ -219,10 +229,11 @@ public class CrossProfileApps { } /** * Returns whether the calling package can request to interact across profiles. * Returns whether the calling package can request user consent to interact across profiles. * * <p>The package's current ability to interact across profiles can be checked with * {@link #canInteractAcrossProfiles()}. * <p>If {@code true}, user consent can be obtained via {@link * #createRequestInteractAcrossProfilesIntent()}. The package can then listen to {@link * #ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED} broadcasts. * * <p>Specifically, returns whether the following are all true: * <ul> Loading @@ -235,6 +246,10 @@ public class CrossProfileApps { * </li> * </ul> * * <p>Note that user consent could already be granted if given a return value of {@code true}. * The package's current ability to interact across profiles can be checked with {@link * #canInteractAcrossProfiles()}. * * @return true if the calling package can request to interact across profiles. */ public boolean canRequestInteractAcrossProfiles() { Loading @@ -247,10 +262,7 @@ public class CrossProfileApps { /** * Returns whether the calling package can interact across profiles. * * <p>The package's current ability to request to interact across profiles can be checked with * {@link #canRequestInteractAcrossProfiles()}. * * <p>Specifically, returns whether the following are all true: * <ul> * <li>{@link #getTargetUserProfiles()} returns a non-empty list for the calling user.</li> Loading @@ -262,6 +274,11 @@ public class CrossProfileApps { * </li> * </ul> * * <p>If {@code false}, the package's current ability to request user consent to interact across * profiles can be checked with {@link #canRequestInteractAcrossProfiles()}. If {@code true}, * user consent can be obtained via {@link #createRequestInteractAcrossProfilesIntent()}. The * package can then listen to {@link #ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED} broadcasts. * * @return true if the calling package can interact across profiles. * @throws SecurityException if {@code mContext.getPackageName()} does not belong to the * calling UID. Loading @@ -276,11 +293,15 @@ public class CrossProfileApps { /** * Returns an {@link Intent} to open the settings page that allows the user to decide whether * the calling app can interact across profiles. The current state is given by * {@link #canInteractAcrossProfiles()}. * the calling app can interact across profiles. * * <p>Returns {@code null} if {@link #canRequestInteractAcrossProfiles()} is {@code false}. * * <p>Note that the user may already have given consent and the app may already be able to * interact across profiles, even if {@link #canRequestInteractAcrossProfiles()} is {@code * true}. The current ability to interact across profiles is given by {@link * #canInteractAcrossProfiles()}. * * @return an {@link Intent} to open the settings page that allows the user to decide whether * the app can interact across profiles * Loading Loading
core/java/android/app/admin/DevicePolicyManager.java +22 −17 Original line number Diff line number Diff line Loading @@ -11580,13 +11580,16 @@ public class DevicePolicyManager { } /** * Sets the set of package names that are allowed to request user consent for cross-profile * communication. * Sets the set of admin-whitelisted package names that are allowed to request user consent for * cross-profile communication. * * <p>Assumes that the caller is a profile owner and is the given {@code admin}. * * <p>Previous calls are overridden by each subsequent call to this method. * * <p>Note that other apps may be able to request user consent for cross-profile communication * if they have been explicitly whitelisted by the OEM. * * <p>When previously-set cross-profile packages are missing from {@code packageNames}, the * app-op for {@code INTERACT_ACROSS_PROFILES} will be reset for those packages. This will not * occur for packages that are whitelisted by the OEM. Loading @@ -11608,15 +11611,18 @@ public class DevicePolicyManager { /** * Returns the set of package names that the admin has previously set as allowed to request user * consent for cross-profile communication, via {@link * #setCrossProfilePackages(ComponentName, Set)}. * consent for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName, * Set)}. * * <p>Assumes that the caller is a profile owner and is the given {@code admin}. * * <p>Note that other apps not included in the returned set may be able to request user consent * for cross-profile communication if they have been explicitly whitelisted by the OEM. * * @param admin the {@link DeviceAdminReceiver} this request is associated with * @return the set of package names the admin has previously set as allowed to request user * consent for cross-profile communication, via {@link * #setCrossProfilePackages(ComponentName, Set)} * consent for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName, * Set)} */ public @NonNull Set<String> getCrossProfilePackages(@NonNull ComponentName admin) { throwIfParentInstance("getCrossProfilePackages"); Loading @@ -11634,18 +11640,17 @@ public class DevicePolicyManager { * Returns the combined set of the following: * <ul> * <li>The package names that the admin has previously set as allowed to request user consent * for cross-profile communication, via {@link * #setCrossProfilePackages(ComponentName, Set)}.</li> * for cross-profile communication, via {@link #setCrossProfilePackages(ComponentName, * Set)}.</li> * <li>The default package names set by the OEM that are allowed to request user consent for * cross-profile communication without being explicitly enabled by the admin, via * {@link com.android.internal.R.array#cross_profile_apps} and * {@link com.android.internal.R.array#vendor_cross_profile_apps}.</li> * cross-profile communication without being explicitly enabled by the admin, via {@link * com.android.internal.R.array#cross_profile_apps} and {@link com.android.internal.R.array * #vendor_cross_profile_apps}.</li> * </ul> * * @return the combined set of whitelisted package names set via * {@link #setCrossProfilePackages(ComponentName, Set)}, * {@link com.android.internal.R.array#cross_profile_apps}, * and {@link com.android.internal.R.array#vendor_cross_profile_apps}. * {@link #setCrossProfilePackages(ComponentName, Set)}, {@link com.android.internal.R.array * #cross_profile_apps}, and {@link com.android.internal.R.array#vendor_cross_profile_apps}. * * @hide */ Loading @@ -11668,9 +11673,9 @@ public class DevicePolicyManager { /** * Returns the default package names set by the OEM that are allowed to request user consent for * cross-profile communication without being explicitly enabled by the admin, via * {@link com.android.internal.R.array#cross_profile_apps} and * {@link com.android.internal.R.array#vendor_cross_profile_apps}. * cross-profile communication without being explicitly enabled by the admin, via {@link * com.android.internal.R.array#cross_profile_apps} and {@link com.android.internal.R.array * #vendor_cross_profile_apps}. * * @hide */
core/java/android/content/pm/CrossProfileApps.java +34 −13 Original line number Diff line number Diff line Loading @@ -47,8 +47,15 @@ import java.util.stream.Collectors; public class CrossProfileApps { /** * Broadcast signalling that the receiving app's ability to interact across profiles has * changed, as defined by the return value of {@link #canInteractAcrossProfiles()}. * Broadcast signalling that the receiving app's permission to interact across profiles has * changed. This includes the user, admin, or OEM changing their consent such that the * permission for the app to interact across profiles has changed. * * <p>This broadcast is not sent when other circumstances result in a change to being able to * interact across profiles in practice, such as the profile being turned off or removed, apps * being uninstalled, etc. The methods {@link #canInteractAcrossProfiles()} and {@link * #canRequestInteractAcrossProfiles()} can be used by apps prior to attempting to interact * across profiles or attempting to request user consent to interact across profiles. * * <p>Apps that have set the {@code android:crossProfile} manifest attribute to {@code true} * can receive this broadcast in manifest broadcast receivers. Otherwise, it can only be Loading Loading @@ -99,8 +106,11 @@ public class CrossProfileApps { /** * Starts the specified activity of the caller package in the specified profile. * * <p>The caller must have the {@link android.Manifest.permission#INTERACT_ACROSS_PROFILES} * permission and both the caller and target user profiles must be in the same profile group. * <p>The caller must have the {@link android.Manifest.permission#INTERACT_ACROSS_PROFILES}, * {@code android.Manifest.permission#INTERACT_ACROSS_USERS}, or {@code * android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission. Both the caller and * target user profiles must be in the same profile group. The target user must be a valid user * returned from {@link #getTargetUserProfiles()}. * * @param intent The intent to launch. A component in the caller package must be specified. * @param targetUser The {@link UserHandle} of the profile; must be one of the users returned by Loading Loading @@ -219,10 +229,11 @@ public class CrossProfileApps { } /** * Returns whether the calling package can request to interact across profiles. * Returns whether the calling package can request user consent to interact across profiles. * * <p>The package's current ability to interact across profiles can be checked with * {@link #canInteractAcrossProfiles()}. * <p>If {@code true}, user consent can be obtained via {@link * #createRequestInteractAcrossProfilesIntent()}. The package can then listen to {@link * #ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED} broadcasts. * * <p>Specifically, returns whether the following are all true: * <ul> Loading @@ -235,6 +246,10 @@ public class CrossProfileApps { * </li> * </ul> * * <p>Note that user consent could already be granted if given a return value of {@code true}. * The package's current ability to interact across profiles can be checked with {@link * #canInteractAcrossProfiles()}. * * @return true if the calling package can request to interact across profiles. */ public boolean canRequestInteractAcrossProfiles() { Loading @@ -247,10 +262,7 @@ public class CrossProfileApps { /** * Returns whether the calling package can interact across profiles. * * <p>The package's current ability to request to interact across profiles can be checked with * {@link #canRequestInteractAcrossProfiles()}. * * <p>Specifically, returns whether the following are all true: * <ul> * <li>{@link #getTargetUserProfiles()} returns a non-empty list for the calling user.</li> Loading @@ -262,6 +274,11 @@ public class CrossProfileApps { * </li> * </ul> * * <p>If {@code false}, the package's current ability to request user consent to interact across * profiles can be checked with {@link #canRequestInteractAcrossProfiles()}. If {@code true}, * user consent can be obtained via {@link #createRequestInteractAcrossProfilesIntent()}. The * package can then listen to {@link #ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED} broadcasts. * * @return true if the calling package can interact across profiles. * @throws SecurityException if {@code mContext.getPackageName()} does not belong to the * calling UID. Loading @@ -276,11 +293,15 @@ public class CrossProfileApps { /** * Returns an {@link Intent} to open the settings page that allows the user to decide whether * the calling app can interact across profiles. The current state is given by * {@link #canInteractAcrossProfiles()}. * the calling app can interact across profiles. * * <p>Returns {@code null} if {@link #canRequestInteractAcrossProfiles()} is {@code false}. * * <p>Note that the user may already have given consent and the app may already be able to * interact across profiles, even if {@link #canRequestInteractAcrossProfiles()} is {@code * true}. The current ability to interact across profiles is given by {@link * #canInteractAcrossProfiles()}. * * @return an {@link Intent} to open the settings page that allows the user to decide whether * the app can interact across profiles * Loading