diff --git a/core/api/current.txt b/core/api/current.txt index 5f6848c116518..604e030c88fa5 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -7418,12 +7418,6 @@ package android.app.admin { method @NonNull public java.util.List getDelegatedScopes(@Nullable android.content.ComponentName, @NonNull String); method public CharSequence getDeviceOwnerLockScreenInfo(); method @Nullable public String getDevicePolicyManagementRoleHolderPackage(); - method @Nullable public android.graphics.drawable.Drawable getDrawable(@NonNull String, @NonNull String, @NonNull java.util.function.Supplier); - method @Nullable public android.graphics.drawable.Drawable getDrawable(@NonNull String, @NonNull String, @NonNull String, @NonNull java.util.function.Supplier); - method @Nullable public android.graphics.drawable.Icon getDrawableAsIcon(@NonNull String, @NonNull String, @NonNull String, @Nullable android.graphics.drawable.Icon); - method @Nullable public android.graphics.drawable.Icon getDrawableAsIcon(@NonNull String, @NonNull String, @Nullable android.graphics.drawable.Icon); - method @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@NonNull String, @NonNull String, int, @NonNull java.util.function.Supplier); - method @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@NonNull String, @NonNull String, @NonNull String, int, @NonNull java.util.function.Supplier); method public CharSequence getEndUserSessionMessage(@NonNull android.content.ComponentName); method @NonNull public String getEnrollmentSpecificId(); method @Nullable public android.app.admin.FactoryResetProtectionPolicy getFactoryResetProtectionPolicy(@Nullable android.content.ComponentName); @@ -7470,14 +7464,13 @@ package android.app.admin { method @NonNull public java.util.List getPreferentialNetworkServiceConfigs(); method public int getRequiredPasswordComplexity(); method public long getRequiredStrongAuthTimeout(@Nullable android.content.ComponentName); + method @NonNull public android.app.admin.DevicePolicyResourcesManager getResources(); method public boolean getScreenCaptureDisabled(@Nullable android.content.ComponentName); method public java.util.List getSecondaryUsers(@NonNull android.content.ComponentName); method public CharSequence getShortSupportMessage(@NonNull android.content.ComponentName); method public CharSequence getStartUserSessionMessage(@NonNull android.content.ComponentName); method @Deprecated public boolean getStorageEncryption(@Nullable android.content.ComponentName); method public int getStorageEncryptionStatus(); - method @Nullable public String getString(@NonNull String, @NonNull java.util.function.Supplier); - method @Nullable public String getString(@NonNull String, @NonNull java.util.function.Supplier, @NonNull java.lang.Object...); method @Nullable public android.app.admin.SystemUpdatePolicy getSystemUpdatePolicy(); method @Nullable public android.os.PersistableBundle getTransferOwnershipBundle(); method @Nullable public java.util.List getTrustAgentConfiguration(@Nullable android.content.ComponentName, @NonNull android.content.ComponentName); @@ -7842,6 +7835,17 @@ package android.app.admin { field public static final String UNDEFINED = "UNDEFINED"; } + public class DevicePolicyResourcesManager { + method @Nullable public android.graphics.drawable.Drawable getDrawable(@NonNull String, @NonNull String, @NonNull java.util.function.Supplier); + method @Nullable public android.graphics.drawable.Drawable getDrawable(@NonNull String, @NonNull String, @NonNull String, @NonNull java.util.function.Supplier); + method @Nullable public android.graphics.drawable.Icon getDrawableAsIcon(@NonNull String, @NonNull String, @NonNull String, @Nullable android.graphics.drawable.Icon); + method @Nullable public android.graphics.drawable.Icon getDrawableAsIcon(@NonNull String, @NonNull String, @Nullable android.graphics.drawable.Icon); + method @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@NonNull String, @NonNull String, int, @NonNull java.util.function.Supplier); + method @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@NonNull String, @NonNull String, @NonNull String, int, @NonNull java.util.function.Supplier); + method @Nullable public String getString(@NonNull String, @NonNull java.util.function.Supplier); + method @Nullable public String getString(@NonNull String, @NonNull java.util.function.Supplier, @NonNull java.lang.Object...); + } + public final class DnsEvent extends android.app.admin.NetworkEvent implements android.os.Parcelable { method public String getHostname(); method public java.util.List getInetAddresses(); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index b9e9fbb3e8ead..18bff6349b947 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1109,16 +1109,12 @@ package android.app.admin { method @RequiresPermission("android.permission.NOTIFY_PENDING_SYSTEM_UPDATE") public void notifyPendingSystemUpdate(long, boolean); method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public boolean packageHasActiveAdmins(String); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS, android.Manifest.permission.PROVISION_DEMO_DEVICE}) public void provisionFullyManagedDevice(@NonNull android.app.admin.FullyManagedDeviceProvisioningParams) throws android.app.admin.ProvisioningException; - method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetDrawables(@NonNull java.util.Set); - method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetStrings(@NonNull java.util.Set); method @RequiresPermission(android.Manifest.permission.TRIGGER_LOST_MODE) public void sendLostModeLocationUpdate(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer); method @Deprecated @RequiresPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS) public boolean setActiveProfileOwner(@NonNull android.content.ComponentName, String) throws java.lang.IllegalArgumentException; method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setDeviceProvisioningConfigApplied(); method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void setDpcDownloaded(boolean); - method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void setDrawables(@NonNull java.util.Set); method @Deprecated @RequiresPermission(value=android.Manifest.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS, conditional=true) public void setProfileOwnerCanAccessDeviceIds(@NonNull android.content.ComponentName); method public void setSecondaryLockscreenEnabled(@NonNull android.content.ComponentName, boolean); - method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void setStrings(@NonNull java.util.Set); method @RequiresPermission(android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS) public void setUserProvisioningState(int, @NonNull android.os.UserHandle); method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public boolean shouldAllowBypassingDevicePolicyManagementRoleQualification(); field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED"; @@ -1209,6 +1205,13 @@ package android.app.admin { field public static final String WORK_PROFILE_DEFAULT_APPS_TITLE = "PermissionController.WORK_PROFILE_DEFAULT_APPS_TITLE"; } + public class DevicePolicyResourcesManager { + method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetDrawables(@NonNull java.util.Set); + method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetStrings(@NonNull java.util.Set); + method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void setDrawables(@NonNull java.util.Set); + method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void setStrings(@NonNull java.util.Set); + } + public final class DevicePolicyStringResource implements android.os.Parcelable { ctor public DevicePolicyStringResource(@NonNull android.content.Context, @NonNull String, @StringRes int); method public int describeContents(); diff --git a/core/java/android/app/admin/DevicePolicyDrawableResource.java b/core/java/android/app/admin/DevicePolicyDrawableResource.java index 1d7aab9ef7d1e..dab98884ff823 100644 --- a/core/java/android/app/admin/DevicePolicyDrawableResource.java +++ b/core/java/android/app/admin/DevicePolicyDrawableResource.java @@ -28,7 +28,7 @@ import java.util.Objects; /** * Used to pass in the required information for updating an enterprise drawable resource using - * {@link DevicePolicyManager#setDrawables}. + * {@link DevicePolicyResourcesManager#setDrawables}. * * @hide */ @@ -42,7 +42,7 @@ public final class DevicePolicyDrawableResource implements Parcelable { /** * Creates an object containing the required information for updating an enterprise drawable - * resource using {@link DevicePolicyManager#setDrawables}. + * resource using {@link DevicePolicyResourcesManager#setDrawables}. * *

It will be used to update the drawable defined by {@code drawableId} with style * {@code drawableStyle} located in source {@code drawableSource} to the drawable with ID @@ -89,7 +89,7 @@ public final class DevicePolicyDrawableResource implements Parcelable { /** * Creates an object containing the required information for updating an enterprise drawable - * resource using {@link DevicePolicyManager#setDrawables}. + * resource using {@link DevicePolicyResourcesManager#setDrawables}. *

It will be used to update the drawable defined by {@code drawableId} with style * {@code drawableStyle} to the drawable with ID {@code resourceIdInCallingPackage} in the * calling package

diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index d8f20cf8146d6..a9790c8c1b266 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -174,6 +174,7 @@ public class DevicePolicyManager { private final Context mContext; private final IDevicePolicyManager mService; private final boolean mParentInstance; + private final DevicePolicyResourcesManager mResourcesManager; /** @hide */ public DevicePolicyManager(Context context, IDevicePolicyManager service) { @@ -187,6 +188,7 @@ public class DevicePolicyManager { mContext = context; mService = service; mParentInstance = parentInstance; + mResourcesManager = new DevicePolicyResourcesManager(context, service); } /** @hide test will override it. */ @@ -3746,7 +3748,8 @@ public class DevicePolicyManager { /** * Broadcast action: notify system apps (e.g. settings, SysUI, etc) that the device management * resources with IDs {@link #EXTRA_RESOURCE_IDS} has been updated, the updated resources can be - * retrieved using {@link #getDrawable} and {@code #getString}. + * retrieved using {@link DevicePolicyResourcesManager#getDrawable} and + * {@link DevicePolicyResourcesManager#getString}. * *

This broadcast is sent to registered receivers only. * @@ -15303,469 +15306,12 @@ public class DevicePolicyManager { } /** - * For each {@link DevicePolicyDrawableResource} item in {@code drawables}, if - * {@link DevicePolicyDrawableResource#getDrawableSource()} is not set, it updates the drawable - * resource for the combination of {@link DevicePolicyDrawableResource#getDrawableId()} and - * {@link DevicePolicyDrawableResource#getDrawableStyle()} to the drawable with resource ID - * {@link DevicePolicyDrawableResource#getResourceIdInCallingPackage()}, - * meaning any system UI surface calling {@link #getDrawable} with {@code drawableId} and - * {@code drawableStyle} will get the new resource after this API is called. - * - *

Otherwise, if {@link DevicePolicyDrawableResource#getDrawableSource()} is set, it - * overrides any drawables that was set for the same {@code drawableId} and - * {@code drawableStyle} for the provided source. - * - *

Sends a broadcast with action {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to - * registered receivers when a resource has been updated successfully. - * - *

Important notes to consider when using this API: - *

    - *
  • {@link #getDrawable} references the resource - * {@link DevicePolicyDrawableResource#getResourceIdInCallingPackage()} in the - * calling package each time it gets called. You have to ensure that the resource is always - * available in the calling package as long as it is used as an updated resource. - *
  • You still have to re-call {@code setDrawables} even if you only make changes to the - * content of the resource with ID - * {@link DevicePolicyDrawableResource#getResourceIdInCallingPackage()} as the content might be - * cached and would need updating. - *
- * - * @param drawables The list of {@link DevicePolicyDrawableResource} to update. - * - * @hide + * Returns a {@link DevicePolicyResourcesManager} containing the required APIs to set, reset, + * and get device policy related resources. */ - @SystemApi - @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) - public void setDrawables(@NonNull Set drawables) { - if (mService != null) { - try { - mService.setDrawables(new ArrayList<>(drawables)); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - } - - /** - * Removes all updated drawables for the list of {@code drawableIds} that was previously set by - * calling {@link #setDrawables}, meaning any subsequent calls to {@link #getDrawable} for the - * provided IDs with any {@code drawableStyle} and any {@code drawableSource} will return the - * default drawable from {@code defaultDrawableLoader}. - * - *

Sends a broadcast with action {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to - * registered receivers when a resource has been reset successfully. - * - * @param drawableIds The list of IDs to remove. - * - * @hide - */ - @SystemApi - @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) - public void resetDrawables(@NonNull Set drawableIds) { - if (mService != null) { - try { - mService.resetDrawables(new ArrayList<>(drawableIds)); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - } - - /** - * Returns the appropriate updated drawable for the {@code drawableId} with style - * {@code drawableStyle} if one was set using {@code setDrawables}, otherwise returns the - * drawable from {@code defaultDrawableLoader}. - * - *

Also returns the drawable from {@code defaultDrawableLoader} if {@code drawableId} - * is {@link DevicePolicyResources#UNDEFINED}. - * - *

Calls to this API will not return {@code null} unless no updated drawable was found - * and the call to {@code defaultDrawableLoader} returned {@code null}. - * - *

This API uses the screen density returned from {@link Resources#getConfiguration()}, to - * set a different value use - * {@link #getDrawableForDensity(String, String, int, Supplier)}. - * - *

Callers should register for {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get - * notified when a resource has been updated. - * - *

Note that each call to this API loads the resource from the package that called - * {@code setDrawables} to set the updated resource. - * - * @param drawableId The drawable ID to get the updated resource for. - * @param drawableStyle The drawable style to use. - * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for - * the provided params. - */ - @Nullable - public Drawable getDrawable( - @NonNull String drawableId, - @NonNull String drawableStyle, - @NonNull Supplier defaultDrawableLoader) { - return getDrawable( - drawableId, drawableStyle, DevicePolicyResources.UNDEFINED, defaultDrawableLoader); - } - - /** - * Similar to {@link #getDrawable(String, String, Supplier)}, but also accepts - * a {@code drawableSource} which could result in returning a different drawable than - * {@link #getDrawable(String, String, Supplier)} if an override was set for that specific - * source. - * - *

If {@code drawableSource} is {@link DevicePolicyResources#UNDEFINED}, it returns the - * appropriate string for {@code drawableId} and {@code drawableStyle} similar to - * {@link #getDrawable(String, String, Supplier)}. - * - *

Calls to this API will not return {@code null} unless no updated drawable was found - * and the call to {@code defaultDrawableLoader} returned {@code null}. - * - *

Callers should register for {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get - * notified when a resource has been updated. - * - * @param drawableId The drawable ID to get the updated resource for. - * @param drawableStyle The drawable style to use. - * @param drawableSource The source for the caller. - * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for - * the provided params. - */ - @Nullable - public Drawable getDrawable( - @NonNull String drawableId, - @NonNull String drawableStyle, - @NonNull String drawableSource, - @NonNull Supplier defaultDrawableLoader) { - - Objects.requireNonNull(drawableId, "drawableId can't be null"); - Objects.requireNonNull(drawableStyle, "drawableStyle can't be null"); - Objects.requireNonNull(drawableSource, "drawableSource can't be null"); - Objects.requireNonNull(defaultDrawableLoader, "defaultDrawableLoader can't be null"); - - if (drawableId.equals(DevicePolicyResources.UNDEFINED)) { - return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); - } - if (mService != null) { - try { - ParcelableResource resource = mService.getDrawable( - drawableId, drawableStyle, drawableSource); - if (resource == null) { - return ParcelableResource.loadDefaultDrawable( - defaultDrawableLoader); - } - return resource.getDrawable( - mContext, - /* density= */ 0, - defaultDrawableLoader); - - } catch (RemoteException e) { - Log.e( - TAG, - "Error getting the updated drawable from DevicePolicyManagerService.", - e); - return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); - } - } - return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); - } - - /** - * Similar to {@link #getDrawable(String, String, Supplier)}, but also accepts - * {@code density}. See {@link Resources#getDrawableForDensity(int, int, Resources.Theme)}. - * - *

Calls to this API will not return {@code null} unless no updated drawable was found - * and the call to {@code defaultDrawableLoader} returned {@code null}. - * - *

Callers should register for {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get - * notified when a resource has been updated. - * - * @param drawableId The drawable ID to get the updated resource for. - * @param drawableStyle The drawable style to use. - * @param density The desired screen density indicated by the resource as - * found in {@link DisplayMetrics}. A value of 0 means to use the - * density returned from {@link Resources#getConfiguration()}. - * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for - * the provided params. - */ - @Nullable - public Drawable getDrawableForDensity( - @NonNull String drawableId, - @NonNull String drawableStyle, - int density, - @NonNull Supplier defaultDrawableLoader) { - return getDrawableForDensity( - drawableId, - drawableStyle, - DevicePolicyResources.UNDEFINED, - density, - defaultDrawableLoader); - } - - /** - * Similar to {@link #getDrawable(String, String, String, Supplier)}, but also accepts - * {@code density}. See {@link Resources#getDrawableForDensity(int, int, Resources.Theme)}. - * - *

Calls to this API will not return {@code null} unless no updated drawable was found - * and the call to {@code defaultDrawableLoader} returned {@code null}. - * - *

Callers should register for {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get - * notified when a resource has been updated. - * - * @param drawableId The drawable ID to get the updated resource for. - * @param drawableStyle The drawable style to use. - * @param drawableSource The source for the caller. - * @param density The desired screen density indicated by the resource as - * found in {@link DisplayMetrics}. A value of 0 means to use the - * density returned from {@link Resources#getConfiguration()}. - * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for - * the provided params. - */ - @Nullable - public Drawable getDrawableForDensity( - @NonNull String drawableId, - @NonNull String drawableStyle, - @NonNull String drawableSource, - int density, - @NonNull Supplier defaultDrawableLoader) { - - Objects.requireNonNull(drawableId, "drawableId can't be null"); - Objects.requireNonNull(drawableStyle, "drawableStyle can't be null"); - Objects.requireNonNull(drawableSource, "drawableSource can't be null"); - Objects.requireNonNull(defaultDrawableLoader, "defaultDrawableLoader can't be null"); - - if (drawableId.equals(DevicePolicyResources.UNDEFINED)) { - return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); - } - if (mService != null) { - try { - ParcelableResource resource = mService.getDrawable( - drawableId, drawableStyle, drawableSource); - if (resource == null) { - return ParcelableResource.loadDefaultDrawable( - defaultDrawableLoader); - } - return resource.getDrawable(mContext, density, defaultDrawableLoader); - } catch (RemoteException e) { - Log.e( - TAG, - "Error getting the updated drawable from DevicePolicyManagerService.", - e); - return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); - } - } - return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); - } - - /** - * Similar to {@link #getDrawable(String, String, String, Supplier)} but returns an - * {@link Icon} instead of a {@link Drawable}. - * - * @param drawableId The drawable ID to get the updated resource for. - * @param drawableStyle The drawable style to use. - * @param drawableSource The source for the caller. - * @param defaultIcon Returned if no updated drawable was set for the provided params. - */ - @Nullable - public Icon getDrawableAsIcon( - @NonNull String drawableId, - @NonNull String drawableStyle, - @NonNull String drawableSource, - @Nullable Icon defaultIcon) { - Objects.requireNonNull(drawableId, "drawableId can't be null"); - Objects.requireNonNull(drawableStyle, "drawableStyle can't be null"); - Objects.requireNonNull(drawableSource, "drawableSource can't be null"); - Objects.requireNonNull(defaultIcon, "defaultIcon can't be null"); - - if (drawableId.equals(DevicePolicyResources.UNDEFINED)) { - return defaultIcon; - } - if (mService != null) { - try { - ParcelableResource resource = mService.getDrawable( - drawableId, drawableStyle, drawableSource); - if (resource == null) { - return defaultIcon; - } - return Icon.createWithResource(resource.getPackageName(), resource.getResourceId()); - } catch (RemoteException e) { - Log.e( - TAG, - "Error getting the updated drawable from DevicePolicyManagerService.", - e); - return defaultIcon; - } - } - return defaultIcon; - } - - /** - * Similar to {@link #getDrawable(String, String, Supplier)} but returns an {@link Icon} - * instead of a {@link Drawable}. - * - * @param drawableId The drawable ID to get the updated resource for. - * @param drawableStyle The drawable style to use. - * @param defaultIcon Returned if no updated drawable was set for the provided params. - */ - @Nullable - public Icon getDrawableAsIcon( - @NonNull String drawableId, - @NonNull String drawableStyle, - @Nullable Icon defaultIcon) { - return getDrawableAsIcon( - drawableId, drawableStyle, DevicePolicyResources.UNDEFINED, defaultIcon); - } - - - /** - * For each {@link DevicePolicyStringResource} item in {@code strings}, it updates the string - * resource for {@link DevicePolicyStringResource#getStringId()} to the string with ID - * {@code callingPackageResourceId}, meaning any system UI surface calling {@link #getString} - * with {@code stringId} will get the new resource after this API is called. - * - *

Sends a broadcast with action {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to - * registered receivers when a resource has been updated successfully. - * - *

Important notes to consider when using this API: - *

    - *
  • {@link #getString} references the resource {@code callingPackageResourceId} in the - * calling package each time it gets called. You have to ensure that the resource is always - * available in the calling package as long as it is used as an updated resource. - *
  • You still have to re-call {@code setStrings} even if you only make changes to the - * content of the resource with ID {@code callingPackageResourceId} as the content might be - * cached and would need updating. - *
- * - * @param strings The list of {@link DevicePolicyStringResource} to update. - * - * @hide - */ - @SystemApi - @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) - public void setStrings(@NonNull Set strings) { - if (mService != null) { - try { - mService.setStrings(new ArrayList<>(strings)); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - } - - /** - * Removes the updated strings for the list of {@code stringIds} that was previously set by - * calling {@link #setStrings}, meaning any subsequent calls to {@link #getString} for the - * provided IDs will return the default string from {@code defaultStringLoader}. - * - *

Sends a broadcast with action {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to - * registered receivers when a resource has been reset successfully. - * - * @param stringIds The list of IDs to remove the updated resources for. - * - * @hide - */ - @SystemApi - @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) - public void resetStrings(@NonNull Set stringIds) { - if (mService != null) { - try { - mService.resetStrings(new ArrayList<>(stringIds)); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - } - - /** - * Returns the appropriate updated string for the {@code stringId} (see - * {@link DevicePolicyResources.Strings}) if one was set using - * {@code setStrings}, otherwise returns the string from {@code defaultStringLoader}. - * - *

Also returns the string from {@code defaultStringLoader} if {@code stringId} is - * {@link DevicePolicyResources#UNDEFINED}. - * - *

Calls to this API will not return {@code null} unless no updated drawable was found - * and the call to {@code defaultStringLoader} returned {@code null}. - * - *

Callers should register for {@link #ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get - * notified when a resource has been updated. - * - *

Note that each call to this API loads the resource from the package that called - * {@code setStrings} to set the updated resource. - * - * @param stringId The IDs to get the updated resource for. - * @param defaultStringLoader To get the default string if no updated string was set for - * {@code stringId}. - */ - @Nullable - public String getString( - @NonNull String stringId, - @NonNull Supplier defaultStringLoader) { - - Objects.requireNonNull(stringId, "stringId can't be null"); - Objects.requireNonNull(defaultStringLoader, "defaultStringLoader can't be null"); - - if (stringId.equals(DevicePolicyResources.UNDEFINED)) { - return ParcelableResource.loadDefaultString(defaultStringLoader); - } - if (mService != null) { - try { - ParcelableResource resource = mService.getString(stringId); - if (resource == null) { - return ParcelableResource.loadDefaultString(defaultStringLoader); - } - return resource.getString(mContext, defaultStringLoader); - } catch (RemoteException e) { - Log.e( - TAG, - "Error getting the updated string from DevicePolicyManagerService.", - e); - return ParcelableResource.loadDefaultString(defaultStringLoader); - } - } - return ParcelableResource.loadDefaultString(defaultStringLoader); - } - - /** - * Similar to {@link #getString(String, Supplier)} but accepts {@code formatArgs} and returns a - * localized formatted string, substituting the format arguments as defined in - * {@link java.util.Formatter} and {@link java.lang.String#format}, (see - * {@link Resources#getString(int, Object...)}). - * - *

Calls to this API will not return {@code null} unless no updated drawable was found - * and the call to {@code defaultStringLoader} returned {@code null}. - * - * @param stringId The IDs to get the updated resource for. - * @param defaultStringLoader To get the default string if no updated string was set for - * {@code stringId}. - * @param formatArgs The format arguments that will be used for substitution. - */ - @Nullable - @SuppressLint("SamShouldBeLast") - public String getString( - @NonNull String stringId, - @NonNull Supplier defaultStringLoader, - @NonNull Object... formatArgs) { - - Objects.requireNonNull(stringId, "stringId can't be null"); - Objects.requireNonNull(defaultStringLoader, "defaultStringLoader can't be null"); - - if (stringId.equals(DevicePolicyResources.UNDEFINED)) { - return ParcelableResource.loadDefaultString(defaultStringLoader); - } - if (mService != null) { - try { - ParcelableResource resource = mService.getString(stringId); - if (resource == null) { - return ParcelableResource.loadDefaultString(defaultStringLoader); - } - return resource.getString(mContext, defaultStringLoader, formatArgs); - } catch (RemoteException e) { - Log.e( - TAG, - "Error getting the updated string from DevicePolicyManagerService.", - e); - return ParcelableResource.loadDefaultString(defaultStringLoader); - } - } - return ParcelableResource.loadDefaultString(defaultStringLoader); + @NonNull + public DevicePolicyResourcesManager getResources() { + return mResourcesManager; } /** diff --git a/core/java/android/app/admin/DevicePolicyResources.java b/core/java/android/app/admin/DevicePolicyResources.java index bed2200fe632c..2b3780e5a32b8 100644 --- a/core/java/android/app/admin/DevicePolicyResources.java +++ b/core/java/android/app/admin/DevicePolicyResources.java @@ -22,7 +22,8 @@ import android.os.UserHandle; /** * Class containing the required identifiers to update device management resources. * - *

See {@link DevicePolicyManager#getDrawable} and {@link DevicePolicyManager#getString}. + *

See {@link DevicePolicyResourcesManager#getDrawable} and + * {@link DevicePolicyResourcesManager#getString}. */ public final class DevicePolicyResources { diff --git a/core/java/android/app/admin/DevicePolicyResourcesManager.java b/core/java/android/app/admin/DevicePolicyResourcesManager.java new file mode 100644 index 0000000000000..06729222dea1c --- /dev/null +++ b/core/java/android/app/admin/DevicePolicyResourcesManager.java @@ -0,0 +1,528 @@ +/* + * 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 android.app.admin; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.RequiresPermission; +import android.annotation.SuppressLint; +import android.annotation.SystemApi; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; +import android.os.RemoteException; +import android.util.DisplayMetrics; +import android.util.Log; + +import java.util.ArrayList; +import java.util.Objects; +import java.util.Set; +import java.util.function.Supplier; + +/** + * Class containing required APIs to set, reset, and get device policy related resources. + */ +public class DevicePolicyResourcesManager { + private static String TAG = "DevicePolicyResourcesManager"; + + private final Context mContext; + private final IDevicePolicyManager mService; + + /** + * @hide + */ + protected DevicePolicyResourcesManager(Context context, IDevicePolicyManager service) { + mContext = context; + mService = service; + } + + /** + * For each {@link DevicePolicyDrawableResource} item in {@code drawables}, if + * {@link DevicePolicyDrawableResource#getDrawableSource()} is not set, it updates the drawable + * resource for the combination of {@link DevicePolicyDrawableResource#getDrawableId()} and + * {@link DevicePolicyDrawableResource#getDrawableStyle()} to the drawable with resource ID + * {@link DevicePolicyDrawableResource#getResourceIdInCallingPackage()}, + * meaning any system UI surface calling {@link #getDrawable} with {@code drawableId} and + * {@code drawableStyle} will get the new resource after this API is called. + * + *

Otherwise, if {@link DevicePolicyDrawableResource#getDrawableSource()} is set, it + * overrides any drawables that was set for the same {@code drawableId} and + * {@code drawableStyle} for the provided source. + * + *

Sends a broadcast with action + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to registered receivers + * when a resource has been updated successfully. + * + *

Important notes to consider when using this API: + *

    + *
  • {@link #getDrawable} references the resource + * {@link DevicePolicyDrawableResource#getResourceIdInCallingPackage()} in the + * calling package each time it gets called. You have to ensure that the resource is always + * available in the calling package as long as it is used as an updated resource. + *
  • You still have to re-call {@code setDrawables} even if you only make changes to the + * content of the resource with ID + * {@link DevicePolicyDrawableResource#getResourceIdInCallingPackage()} as the content might be + * cached and would need updating. + *
+ * + * @param drawables The list of {@link DevicePolicyDrawableResource} to update. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) + public void setDrawables(@NonNull Set drawables) { + if (mService != null) { + try { + mService.setDrawables(new ArrayList<>(drawables)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } + + /** + * Removes all updated drawables for the list of {@code drawableIds} that was previously set by + * calling {@link #setDrawables}, meaning any subsequent calls to {@link #getDrawable} for the + * provided IDs with any {@code drawableStyle} and any {@code drawableSource} will return the + * default drawable from {@code defaultDrawableLoader}. + * + *

Sends a broadcast with action + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to registered receivers + * when a resource has been reset successfully. + * + * @param drawableIds The list of IDs to remove. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) + public void resetDrawables(@NonNull Set drawableIds) { + if (mService != null) { + try { + mService.resetDrawables(new ArrayList<>(drawableIds)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } + + /** + * Returns the appropriate updated drawable for the {@code drawableId} with style + * {@code drawableStyle} if one was set using {@code setDrawables}, otherwise returns the + * drawable from {@code defaultDrawableLoader}. + * + *

Also returns the drawable from {@code defaultDrawableLoader} if {@code drawableId} + * is {@link DevicePolicyResources#UNDEFINED}. + * + *

Calls to this API will not return {@code null} unless no updated drawable was found + * and the call to {@code defaultDrawableLoader} returned {@code null}. + * + *

This API uses the screen density returned from {@link Resources#getConfiguration()}, to + * set a different value use + * {@link #getDrawableForDensity(String, String, int, Supplier)}. + * + *

Callers should register for + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get notified when a + * resource has been updated. + * + *

Note that each call to this API loads the resource from the package that called + * {@code setDrawables} to set the updated resource. + * + * @param drawableId The drawable ID to get the updated resource for. + * @param drawableStyle The drawable style to use. + * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for + * the provided params. + */ + @Nullable + public Drawable getDrawable( + @NonNull String drawableId, + @NonNull String drawableStyle, + @NonNull Supplier defaultDrawableLoader) { + return getDrawable( + drawableId, drawableStyle, DevicePolicyResources.UNDEFINED, defaultDrawableLoader); + } + + /** + * Similar to {@link #getDrawable(String, String, Supplier)}, but also accepts + * a {@code drawableSource} which could result in returning a different drawable than + * {@link #getDrawable(String, String, Supplier)} if an override was set for that specific + * source. + * + *

If {@code drawableSource} is {@link DevicePolicyResources#UNDEFINED}, it returns the + * appropriate string for {@code drawableId} and {@code drawableStyle} similar to + * {@link #getDrawable(String, String, Supplier)}. + * + *

Calls to this API will not return {@code null} unless no updated drawable was found + * and the call to {@code defaultDrawableLoader} returned {@code null}. + * + *

Callers should register for + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get notified when a + * resource has been updated. + * + * @param drawableId The drawable ID to get the updated resource for. + * @param drawableStyle The drawable style to use. + * @param drawableSource The source for the caller. + * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for + * the provided params. + */ + @Nullable + public Drawable getDrawable( + @NonNull String drawableId, + @NonNull String drawableStyle, + @NonNull String drawableSource, + @NonNull Supplier defaultDrawableLoader) { + + Objects.requireNonNull(drawableId, "drawableId can't be null"); + Objects.requireNonNull(drawableStyle, "drawableStyle can't be null"); + Objects.requireNonNull(drawableSource, "drawableSource can't be null"); + Objects.requireNonNull(defaultDrawableLoader, "defaultDrawableLoader can't be null"); + + if (drawableId.equals(DevicePolicyResources.UNDEFINED)) { + return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); + } + if (mService != null) { + try { + ParcelableResource resource = mService.getDrawable( + drawableId, drawableStyle, drawableSource); + if (resource == null) { + return ParcelableResource.loadDefaultDrawable( + defaultDrawableLoader); + } + return resource.getDrawable( + mContext, + /* density= */ 0, + defaultDrawableLoader); + + } catch (RemoteException e) { + Log.e( + TAG, + "Error getting the updated drawable from DevicePolicyManagerService.", + e); + return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); + } + } + return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); + } + + /** + * Similar to {@link #getDrawable(String, String, Supplier)}, but also accepts + * {@code density}. See {@link Resources#getDrawableForDensity(int, int, Resources.Theme)}. + * + *

Calls to this API will not return {@code null} unless no updated drawable was found + * and the call to {@code defaultDrawableLoader} returned {@code null}. + * + *

Callers should register for + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get notified when a + * resource has been updated. + * + * @param drawableId The drawable ID to get the updated resource for. + * @param drawableStyle The drawable style to use. + * @param density The desired screen density indicated by the resource as + * found in {@link DisplayMetrics}. A value of 0 means to use the + * density returned from {@link Resources#getConfiguration()}. + * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for + * the provided params. + */ + @Nullable + public Drawable getDrawableForDensity( + @NonNull String drawableId, + @NonNull String drawableStyle, + int density, + @NonNull Supplier defaultDrawableLoader) { + return getDrawableForDensity( + drawableId, + drawableStyle, + DevicePolicyResources.UNDEFINED, + density, + defaultDrawableLoader); + } + + /** + * Similar to {@link #getDrawable(String, String, String, Supplier)}, but also accepts + * {@code density}. See {@link Resources#getDrawableForDensity(int, int, Resources.Theme)}. + * + *

Calls to this API will not return {@code null} unless no updated drawable was found + * and the call to {@code defaultDrawableLoader} returned {@code null}. + * + *

Callers should register for + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get notified when a + * resource has been updated. + * + * @param drawableId The drawable ID to get the updated resource for. + * @param drawableStyle The drawable style to use. + * @param drawableSource The source for the caller. + * @param density The desired screen density indicated by the resource as + * found in {@link DisplayMetrics}. A value of 0 means to use the + * density returned from {@link Resources#getConfiguration()}. + * @param defaultDrawableLoader To get the default drawable if no updated drawable was set for + * the provided params. + */ + @Nullable + public Drawable getDrawableForDensity( + @NonNull String drawableId, + @NonNull String drawableStyle, + @NonNull String drawableSource, + int density, + @NonNull Supplier defaultDrawableLoader) { + + Objects.requireNonNull(drawableId, "drawableId can't be null"); + Objects.requireNonNull(drawableStyle, "drawableStyle can't be null"); + Objects.requireNonNull(drawableSource, "drawableSource can't be null"); + Objects.requireNonNull(defaultDrawableLoader, "defaultDrawableLoader can't be null"); + + if (drawableId.equals(DevicePolicyResources.UNDEFINED)) { + return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); + } + if (mService != null) { + try { + ParcelableResource resource = mService.getDrawable( + drawableId, drawableStyle, drawableSource); + if (resource == null) { + return ParcelableResource.loadDefaultDrawable( + defaultDrawableLoader); + } + return resource.getDrawable(mContext, density, defaultDrawableLoader); + } catch (RemoteException e) { + Log.e( + TAG, + "Error getting the updated drawable from DevicePolicyManagerService.", + e); + return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); + } + } + return ParcelableResource.loadDefaultDrawable(defaultDrawableLoader); + } + + /** + * Similar to {@link #getDrawable(String, String, String, Supplier)} but returns an + * {@link Icon} instead of a {@link Drawable}. + * + * @param drawableId The drawable ID to get the updated resource for. + * @param drawableStyle The drawable style to use. + * @param drawableSource The source for the caller. + * @param defaultIcon Returned if no updated drawable was set for the provided params. + */ + @Nullable + public Icon getDrawableAsIcon( + @NonNull String drawableId, + @NonNull String drawableStyle, + @NonNull String drawableSource, + @Nullable Icon defaultIcon) { + Objects.requireNonNull(drawableId, "drawableId can't be null"); + Objects.requireNonNull(drawableStyle, "drawableStyle can't be null"); + Objects.requireNonNull(drawableSource, "drawableSource can't be null"); + Objects.requireNonNull(defaultIcon, "defaultIcon can't be null"); + + if (drawableId.equals(DevicePolicyResources.UNDEFINED)) { + return defaultIcon; + } + if (mService != null) { + try { + ParcelableResource resource = mService.getDrawable( + drawableId, drawableStyle, drawableSource); + if (resource == null) { + return defaultIcon; + } + return Icon.createWithResource(resource.getPackageName(), resource.getResourceId()); + } catch (RemoteException e) { + Log.e( + TAG, + "Error getting the updated drawable from DevicePolicyManagerService.", + e); + return defaultIcon; + } + } + return defaultIcon; + } + + /** + * Similar to {@link #getDrawable(String, String, Supplier)} but returns an {@link Icon} + * instead of a {@link Drawable}. + * + * @param drawableId The drawable ID to get the updated resource for. + * @param drawableStyle The drawable style to use. + * @param defaultIcon Returned if no updated drawable was set for the provided params. + */ + @Nullable + public Icon getDrawableAsIcon( + @NonNull String drawableId, + @NonNull String drawableStyle, + @Nullable Icon defaultIcon) { + return getDrawableAsIcon( + drawableId, drawableStyle, DevicePolicyResources.UNDEFINED, defaultIcon); + } + + + /** + * For each {@link DevicePolicyStringResource} item in {@code strings}, it updates the string + * resource for {@link DevicePolicyStringResource#getStringId()} to the string with ID + * {@code callingPackageResourceId}, meaning any system UI surface calling {@link #getString} + * with {@code stringId} will get the new resource after this API is called. + * + *

Sends a broadcast with action + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to registered receivers + * when a resource has been updated successfully. + * + *

Important notes to consider when using this API: + *

    + *
  • {@link #getString} references the resource {@code callingPackageResourceId} in the + * calling package each time it gets called. You have to ensure that the resource is always + * available in the calling package as long as it is used as an updated resource. + *
  • You still have to re-call {@code setStrings} even if you only make changes to the + * content of the resource with ID {@code callingPackageResourceId} as the content might be + * cached and would need updating. + *
+ * + * @param strings The list of {@link DevicePolicyStringResource} to update. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) + public void setStrings(@NonNull Set strings) { + if (mService != null) { + try { + mService.setStrings(new ArrayList<>(strings)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } + + /** + * Removes the updated strings for the list of {@code stringIds} that was previously set by + * calling {@link #setStrings}, meaning any subsequent calls to {@link #getString} for the + * provided IDs will return the default string from {@code defaultStringLoader}. + * + *

Sends a broadcast with action + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to registered receivers + * when a resource has been reset successfully. + * + * @param stringIds The list of IDs to remove the updated resources for. + * + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) + public void resetStrings(@NonNull Set stringIds) { + if (mService != null) { + try { + mService.resetStrings(new ArrayList<>(stringIds)); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + } + + /** + * Returns the appropriate updated string for the {@code stringId} (see + * {@link DevicePolicyResources.Strings}) if one was set using + * {@code setStrings}, otherwise returns the string from {@code defaultStringLoader}. + * + *

Also returns the string from {@code defaultStringLoader} if {@code stringId} is + * {@link DevicePolicyResources#UNDEFINED}. + * + *

Calls to this API will not return {@code null} unless no updated drawable was found + * and the call to {@code defaultStringLoader} returned {@code null}. + * + *

Callers should register for + * {@link DevicePolicyManager#ACTION_DEVICE_POLICY_RESOURCE_UPDATED} to get notified when a + * resource has been updated. + * + *

Note that each call to this API loads the resource from the package that called + * {@code setStrings} to set the updated resource. + * + * @param stringId The IDs to get the updated resource for. + * @param defaultStringLoader To get the default string if no updated string was set for + * {@code stringId}. + */ + @Nullable + public String getString( + @NonNull String stringId, + @NonNull Supplier defaultStringLoader) { + + Objects.requireNonNull(stringId, "stringId can't be null"); + Objects.requireNonNull(defaultStringLoader, "defaultStringLoader can't be null"); + + if (stringId.equals(DevicePolicyResources.UNDEFINED)) { + return ParcelableResource.loadDefaultString(defaultStringLoader); + } + if (mService != null) { + try { + ParcelableResource resource = mService.getString(stringId); + if (resource == null) { + return ParcelableResource.loadDefaultString(defaultStringLoader); + } + return resource.getString(mContext, defaultStringLoader); + } catch (RemoteException e) { + Log.e( + TAG, + "Error getting the updated string from DevicePolicyManagerService.", + e); + return ParcelableResource.loadDefaultString(defaultStringLoader); + } + } + return ParcelableResource.loadDefaultString(defaultStringLoader); + } + + /** + * Similar to {@link #getString(String, Supplier)} but accepts {@code formatArgs} and returns a + * localized formatted string, substituting the format arguments as defined in + * {@link java.util.Formatter} and {@link java.lang.String#format}, (see + * {@link Resources#getString(int, Object...)}). + * + *

Calls to this API will not return {@code null} unless no updated drawable was found + * and the call to {@code defaultStringLoader} returned {@code null}. + * + * @param stringId The IDs to get the updated resource for. + * @param defaultStringLoader To get the default string if no updated string was set for + * {@code stringId}. + * @param formatArgs The format arguments that will be used for substitution. + */ + @Nullable + @SuppressLint("SamShouldBeLast") + public String getString( + @NonNull String stringId, + @NonNull Supplier defaultStringLoader, + @NonNull Object... formatArgs) { + + Objects.requireNonNull(stringId, "stringId can't be null"); + Objects.requireNonNull(defaultStringLoader, "defaultStringLoader can't be null"); + + if (stringId.equals(DevicePolicyResources.UNDEFINED)) { + return ParcelableResource.loadDefaultString(defaultStringLoader); + } + if (mService != null) { + try { + ParcelableResource resource = mService.getString(stringId); + if (resource == null) { + return ParcelableResource.loadDefaultString(defaultStringLoader); + } + return resource.getString(mContext, defaultStringLoader, formatArgs); + } catch (RemoteException e) { + Log.e( + TAG, + "Error getting the updated string from DevicePolicyManagerService.", + e); + return ParcelableResource.loadDefaultString(defaultStringLoader); + } + } + return ParcelableResource.loadDefaultString(defaultStringLoader); + } +} diff --git a/core/java/android/app/admin/DevicePolicyStringResource.java b/core/java/android/app/admin/DevicePolicyStringResource.java index 206ab7bd99140..7e593406c87c7 100644 --- a/core/java/android/app/admin/DevicePolicyStringResource.java +++ b/core/java/android/app/admin/DevicePolicyStringResource.java @@ -28,7 +28,7 @@ import java.util.Objects; /** * Used to pass in the required information for updating an enterprise string resource using - * {@link DevicePolicyManager#setStrings}. + * {@link DevicePolicyResourcesManager#setStrings}. * * @hide */ @@ -40,7 +40,7 @@ public final class DevicePolicyStringResource implements Parcelable { /** * Creates an object containing the required information for updating an enterprise string - * resource using {@link DevicePolicyManager#setStrings}. + * resource using {@link DevicePolicyResourcesManager#setStrings}. * *

It will be used to update the string defined by {@code stringId} to the string with ID * {@code resourceIdInCallingPackage} in the calling package

diff --git a/core/java/android/app/admin/ParcelableResource.java b/core/java/android/app/admin/ParcelableResource.java index bcae2846ad423..a29766546551c 100644 --- a/core/java/android/app/admin/ParcelableResource.java +++ b/core/java/android/app/admin/ParcelableResource.java @@ -43,7 +43,8 @@ import java.util.function.Supplier; /** * Used to store the required information to load a resource that was updated using - * {@link DevicePolicyManager#setDrawables} and {@link DevicePolicyManager#setStrings}. + * {@link DevicePolicyResourcesManager#setDrawables} and + * {@link DevicePolicyResourcesManager#setStrings}. * * @hide */ diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 4f6038291c913..6788f25fe8aba 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -158,6 +158,7 @@ import org.hamcrest.Description; import org.hamcrest.Matcher; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.mockito.Mockito; import org.mockito.internal.util.collections.Sets; @@ -186,6 +187,7 @@ import java.util.concurrent.TimeUnit; */ @SmallTest @Presubmit +@Ignore("b/225415867") public class DevicePolicyManagerTest extends DpmTestBase { private static final String TAG = DevicePolicyManagerTest.class.getSimpleName();