diff options
9 files changed, 56 insertions, 42 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 34b4acc361e1..b92a9d4fc358 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -7466,6 +7466,8 @@ package android.app.admin { 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<java.lang.String>); + method @Nullable public String getString(@NonNull String, @NonNull java.util.function.Supplier<java.lang.String>, @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<android.os.PersistableBundle> getTrustAgentConfiguration(@Nullable android.content.ComponentName, @NonNull android.content.ComponentName); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index c7e820d00847..c723fb757aee 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1090,8 +1090,6 @@ package android.app.admin { method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.QUERY_ADMIN_POLICY}) public java.util.List<java.lang.String> getPermittedInputMethodsForCurrentUser(); method @Nullable public android.content.ComponentName getProfileOwner() throws java.lang.IllegalArgumentException; method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS}) public String getProfileOwnerNameAsUser(int) throws java.lang.IllegalArgumentException; - method @Nullable public String getString(@NonNull String, @NonNull java.util.function.Supplier<java.lang.String>); - method @Nullable public String getString(@NonNull String, @NonNull java.util.function.Supplier<java.lang.String>, @NonNull java.lang.Object...); method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS}) public int getUserProvisioningState(); method public boolean isDeviceManaged(); method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isDeviceProvisioned(); @@ -1104,8 +1102,8 @@ 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 String[]); - method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetStrings(@NonNull String[]); + method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetDrawables(@NonNull java.util.Set<java.lang.String>); + method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) public void resetStrings(@NonNull java.util.Set<java.lang.String>); method @RequiresPermission(android.Manifest.permission.SEND_LOST_MODE_LOCATION_UPDATES) public void sendLostModeLocationUpdate(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>); 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(); diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 47d29d91f155..0f9b4e381145 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -15350,16 +15350,16 @@ public class DevicePolicyManager { * <p>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. + * @param drawableIds The list of IDs to remove. * * @hide */ @SystemApi @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) - public void resetDrawables(@NonNull String[] drawableIds) { + public void resetDrawables(@NonNull Set<String> drawableIds) { if (mService != null) { try { - mService.resetDrawables(drawableIds); + mService.resetDrawables(new ArrayList<>(drawableIds)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -15659,10 +15659,10 @@ public class DevicePolicyManager { */ @SystemApi @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES) - public void resetStrings(@NonNull String[] stringIds) { + public void resetStrings(@NonNull Set<String> stringIds) { if (mService != null) { try { - mService.resetStrings(stringIds); + mService.resetStrings(new ArrayList<>(stringIds)); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -15672,7 +15672,7 @@ public class DevicePolicyManager { /** * Returns the appropriate updated string for the {@code stringId} (see * {@link DevicePolicyResources.Strings}) if one was set using - * {@link #setStrings}, otherwise returns the string from {@code defaultStringLoader}. + * {@code setStrings}, otherwise returns the string from {@code defaultStringLoader}. * * <p>Also returns the string from {@code defaultStringLoader} if * {@link DevicePolicyResources.Strings#UNDEFINED} was passed. @@ -15684,15 +15684,12 @@ public class DevicePolicyManager { * notified when a resource has been updated. * * <p>Note that each call to this API loads the resource from the package that called - * {@link #setStrings} to set the updated resource. + * {@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}. - * - * @hide */ - @SystemApi @Nullable public String getString( @NonNull @DevicePolicyResources.UpdatableStringId String stringId, @@ -15735,10 +15732,7 @@ public class DevicePolicyManager { * @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. - * - * @hide */ - @SystemApi @Nullable @SuppressLint("SamShouldBeLast") public String getString( diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 19bbdb1ec4c3..471c2a8630c1 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -552,14 +552,14 @@ interface IDevicePolicyManager { List<UserHandle> listForegroundAffiliatedUsers(); void setDrawables(in List<DevicePolicyDrawableResource> drawables); - void resetDrawables(in String[] drawableIds); + void resetDrawables(in List<String> drawableIds); ParcelableResource getDrawable(String drawableId, String drawableStyle, String drawableSource); boolean isDpcDownloaded(); void setDpcDownloaded(boolean downloaded); void setStrings(in List<DevicePolicyStringResource> strings); - void resetStrings(in String[] stringIds); + void resetStrings(in List<String> stringIds); ParcelableResource getString(String stringId); boolean shouldAllowBypassingDevicePolicyManagementRoleQualification(); diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java index e4efae2f1a36..7e8ce2b5b29d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java +++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedPreferenceHelper.java @@ -23,12 +23,15 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.res.TypedArray; +import android.os.Build; import android.os.UserHandle; import android.text.TextUtils; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.TextView; +import androidx.annotation.RequiresApi; +import androidx.core.os.BuildCompat; import androidx.preference.Preference; import androidx.preference.PreferenceViewHolder; @@ -102,11 +105,9 @@ public class RestrictedPreferenceHelper { if (mDisabledSummary) { final TextView summaryView = (TextView) holder.findViewById(android.R.id.summary); if (summaryView != null) { - final CharSequence disabledText = mContext - .getSystemService(DevicePolicyManager.class) - .getString(CONTROLLED_BY_ADMIN_SUMMARY, - () -> summaryView.getContext().getString( - R.string.disabled_by_admin_summary_text)); + final CharSequence disabledText = BuildCompat.isAtLeastT() + ? getDisabledByAdminUpdatableString() + : mContext.getString(R.string.disabled_by_admin_summary_text); if (mDisabledByAdmin) { summaryView.setText(disabledText); } else if (mDisabledByAppOps) { @@ -119,6 +120,13 @@ public class RestrictedPreferenceHelper { } } + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private String getDisabledByAdminUpdatableString() { + return mContext.getSystemService(DevicePolicyManager.class).getString( + CONTROLLED_BY_ADMIN_SUMMARY, + () -> mContext.getString(R.string.disabled_by_admin_summary_text)); + } + public void useAdminDisabledSummary(boolean useSummary) { mDisabledSummary = useSummary; } diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index 19114cf147e4..38fad9d99aa4 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -30,6 +30,7 @@ import android.net.TetheringManager; import android.net.vcn.VcnTransportInfo; import android.net.wifi.WifiInfo; import android.os.BatteryManager; +import android.os.Build; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; @@ -41,8 +42,10 @@ import android.telephony.ServiceState; import android.telephony.TelephonyManager; import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; import androidx.core.graphics.drawable.RoundedBitmapDrawable; import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; +import androidx.core.os.BuildCompat; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.UserIcons; @@ -127,8 +130,9 @@ public class Utils { String name = info != null ? info.name : null; if (info.isManagedProfile()) { // We use predefined values for managed profiles - return context.getSystemService(DevicePolicyManager.class).getString( - WORK_PROFILE_USER_LABEL, () -> context.getString(R.string.managed_user_title)); + return BuildCompat.isAtLeastT() + ? getUpdatableManagedUserTitle(context) + : context.getString(R.string.managed_user_title); } else if (info.isGuest()) { name = context.getString(R.string.user_guest); } @@ -140,6 +144,13 @@ public class Utils { return context.getResources().getString(R.string.running_process_item_user_label, name); } + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + private static String getUpdatableManagedUserTitle(Context context) { + return context.getSystemService(DevicePolicyManager.class).getString( + WORK_PROFILE_USER_LABEL, + () -> context.getString(R.string.managed_user_title)); + } + /** * Returns a circular icon for a user. */ diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java index ec0ecd44cda5..edfd6ed5f63d 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java @@ -177,7 +177,7 @@ abstract class BaseIDevicePolicyManager extends IDevicePolicyManager.Stub { public void setDrawables(@NonNull List<DevicePolicyDrawableResource> drawables){} @Override - public void resetDrawables(@NonNull String[] drawableIds){} + public void resetDrawables(@NonNull List<String> drawableIds){} @Override public ParcelableResource getDrawable( @@ -189,7 +189,7 @@ abstract class BaseIDevicePolicyManager extends IDevicePolicyManager.Stub { public void setStrings(@NonNull List<DevicePolicyStringResource> strings){} @Override - public void resetStrings(String[] stringIds){} + public void resetStrings(@NonNull List<String> stringIds){} @Override public ParcelableResource getString(String stringId) { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceManagementResourcesProvider.java b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceManagementResourcesProvider.java index e70c071183ce..6f0330e97482 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceManagementResourcesProvider.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceManagementResourcesProvider.java @@ -176,11 +176,11 @@ class DeviceManagementResourcesProvider { /** * Returns {@code false} if no resources were removed. */ - boolean removeDrawables(@NonNull String[] drawableIds) { + boolean removeDrawables(@NonNull List<String> drawableIds) { synchronized (mLock) { boolean removed = false; - for (int i = 0; i < drawableIds.length; i++) { - String drawableId = drawableIds[i]; + for (int i = 0; i < drawableIds.size(); i++) { + String drawableId = drawableIds.get(i); removed |= mUpdatedDrawablesForStyle.remove(drawableId) != null || mUpdatedDrawablesForSource.remove(drawableId) != null; } @@ -265,11 +265,11 @@ class DeviceManagementResourcesProvider { /** * Returns {@code false} if no resources were removed. */ - boolean removeStrings(@NonNull String[] stringIds) { + boolean removeStrings(@NonNull List<String> stringIds) { synchronized (mLock) { boolean removed = false; - for (int i = 0; i < stringIds.length; i++) { - String stringId = stringIds[i]; + for (int i = 0; i < stringIds.size(); i++) { + String stringId = stringIds.get(i); removed |= mUpdatedStrings.remove(stringId) != null; } if (!removed) { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 1d422a802ede..3b82660b75a4 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -18713,13 +18713,14 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { mInjector.binderWithCleanCallingIdentity(() -> { if (mDeviceManagementResourcesProvider.updateDrawables(drawables)) { sendDrawableUpdatedBroadcast( - drawables.stream().map(s -> s.getDrawableId()).toArray(String[]::new)); + drawables.stream().map(s -> s.getDrawableId()).collect( + Collectors.toList())); } }); } @Override - public void resetDrawables(@NonNull String[] drawableIds) { + public void resetDrawables(@NonNull List<String> drawableIds) { Preconditions.checkCallAuthorization(hasCallingOrSelfPermission( android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES)); @@ -18740,7 +18741,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { drawableId, drawableStyle, drawableSource)); } - private void sendDrawableUpdatedBroadcast(String[] drawableIds) { + private void sendDrawableUpdatedBroadcast(List<String> drawableIds) { sendResourceUpdatedBroadcast(EXTRA_RESOURCE_TYPE_DRAWABLE, drawableIds); } @@ -18754,12 +18755,12 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { mInjector.binderWithCleanCallingIdentity(() -> { if (mDeviceManagementResourcesProvider.updateStrings(strings)) sendStringsUpdatedBroadcast( - strings.stream().map(s -> s.getStringId()).toArray(String[]::new)); + strings.stream().map(s -> s.getStringId()).collect(Collectors.toList())); }); } @Override - public void resetStrings(String[] stringIds) { + public void resetStrings(@NonNull List<String> stringIds) { Preconditions.checkCallAuthorization(hasCallingOrSelfPermission( android.Manifest.permission.UPDATE_DEVICE_MANAGEMENT_RESOURCES)); @@ -18776,13 +18777,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { mDeviceManagementResourcesProvider.getString(stringId)); } - private void sendStringsUpdatedBroadcast(String[] stringIds) { + private void sendStringsUpdatedBroadcast(List<String> stringIds) { sendResourceUpdatedBroadcast(EXTRA_RESOURCE_TYPE_STRING, stringIds); } - private void sendResourceUpdatedBroadcast(int resourceType, String[] resourceIds) { + private void sendResourceUpdatedBroadcast(int resourceType, List<String> resourceIds) { final Intent intent = new Intent(ACTION_DEVICE_POLICY_RESOURCE_UPDATED); - intent.putExtra(EXTRA_RESOURCE_IDS, resourceIds); + intent.putExtra(EXTRA_RESOURCE_IDS, resourceIds.toArray(String[]::new)); intent.putExtra(EXTRA_RESOURCE_TYPE, resourceType); intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND); intent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); |