Loading core/java/android/credentials/CredentialDescription.java +15 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ import java.util.Objects; */ public final class CredentialDescription implements Parcelable { private static final int MAX_ALLOWED_ENTRIES_PER_DESCRIPTION = 16; /** * The credential type. */ Loading Loading @@ -70,6 +72,11 @@ public final class CredentialDescription implements Parcelable { mType = Preconditions.checkStringNotEmpty(type, "type must not be empty"); mFlattenedRequestString = Preconditions.checkStringNotEmpty(flattenedRequestString); mCredentialEntries = Objects.requireNonNull(credentialEntries); Preconditions.checkArgument(credentialEntries.size() <= MAX_ALLOWED_ENTRIES_PER_DESCRIPTION, "The number of Credential Entries exceed 16."); Preconditions.checkArgument(compareEntryTypes(type, credentialEntries) == 0, "Credential Entry type(s) do not match the request type."); } private CredentialDescription(@NonNull Parcel in) { Loading @@ -88,6 +95,14 @@ public final class CredentialDescription implements Parcelable { mCredentialEntries); } private static int compareEntryTypes(@NonNull String type, @NonNull List<CredentialEntry> credentialEntries) { return credentialEntries.stream() .filter(credentialEntry -> !credentialEntry.getType().equals(type)).toList().size(); } public static final @NonNull Parcelable.Creator<CredentialDescription> CREATOR = new Parcelable.Creator<CredentialDescription>() { @Override Loading services/credentials/java/com/android/server/credentials/CredentialDescriptionRegistry.java +16 −4 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import java.util.Set; public class CredentialDescriptionRegistry { private static final int MAX_ALLOWED_CREDENTIAL_DESCRIPTIONS = 128; private static final int MAX_ALLOWED_ENTRIES_PER_PROVIDER = 16; private static SparseArray<CredentialDescriptionRegistry> sCredentialDescriptionSessionPerUser; static { Loading @@ -50,9 +51,11 @@ public class CredentialDescriptionRegistry { } private Map<String, Set<CredentialDescription>> mCredentialDescriptions; private int mTotalDescriptionCount; private CredentialDescriptionRegistry() { this.mCredentialDescriptions = new HashMap<>(); this.mTotalDescriptionCount = 0; } /** Handle the given {@link RegisterCredentialDescriptionRequest} by creating Loading @@ -60,13 +63,20 @@ public class CredentialDescriptionRegistry { public void executeRegisterRequest(RegisterCredentialDescriptionRequest request, String callingPackageName) { if (!mCredentialDescriptions.containsKey(callingPackageName) && mCredentialDescriptions.size() <= MAX_ALLOWED_CREDENTIAL_DESCRIPTIONS) { if (!mCredentialDescriptions.containsKey(callingPackageName)) { mCredentialDescriptions.put(callingPackageName, new HashSet<>()); } if (mTotalDescriptionCount <= MAX_ALLOWED_CREDENTIAL_DESCRIPTIONS && mCredentialDescriptions.get(callingPackageName).size() <= MAX_ALLOWED_ENTRIES_PER_PROVIDER) { Set<CredentialDescription> descriptions = request.getCredentialDescriptions(); int size = mCredentialDescriptions.get(callingPackageName).size(); mCredentialDescriptions.get(callingPackageName) .addAll(request.getCredentialDescriptions()); .addAll(descriptions); mTotalDescriptionCount += size - mCredentialDescriptions.get(callingPackageName).size(); } } /** Handle the given {@link UnregisterCredentialDescriptionRequest} by creating Loading @@ -76,8 +86,10 @@ public class CredentialDescriptionRegistry { String callingPackageName) { if (mCredentialDescriptions.containsKey(callingPackageName)) { int size = mCredentialDescriptions.get(callingPackageName).size(); mCredentialDescriptions.get(callingPackageName) .removeAll(request.getCredentialDescriptions()); mTotalDescriptionCount -= size - mCredentialDescriptions.get(callingPackageName).size(); } } Loading Loading
core/java/android/credentials/CredentialDescription.java +15 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ import java.util.Objects; */ public final class CredentialDescription implements Parcelable { private static final int MAX_ALLOWED_ENTRIES_PER_DESCRIPTION = 16; /** * The credential type. */ Loading Loading @@ -70,6 +72,11 @@ public final class CredentialDescription implements Parcelable { mType = Preconditions.checkStringNotEmpty(type, "type must not be empty"); mFlattenedRequestString = Preconditions.checkStringNotEmpty(flattenedRequestString); mCredentialEntries = Objects.requireNonNull(credentialEntries); Preconditions.checkArgument(credentialEntries.size() <= MAX_ALLOWED_ENTRIES_PER_DESCRIPTION, "The number of Credential Entries exceed 16."); Preconditions.checkArgument(compareEntryTypes(type, credentialEntries) == 0, "Credential Entry type(s) do not match the request type."); } private CredentialDescription(@NonNull Parcel in) { Loading @@ -88,6 +95,14 @@ public final class CredentialDescription implements Parcelable { mCredentialEntries); } private static int compareEntryTypes(@NonNull String type, @NonNull List<CredentialEntry> credentialEntries) { return credentialEntries.stream() .filter(credentialEntry -> !credentialEntry.getType().equals(type)).toList().size(); } public static final @NonNull Parcelable.Creator<CredentialDescription> CREATOR = new Parcelable.Creator<CredentialDescription>() { @Override Loading
services/credentials/java/com/android/server/credentials/CredentialDescriptionRegistry.java +16 −4 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import java.util.Set; public class CredentialDescriptionRegistry { private static final int MAX_ALLOWED_CREDENTIAL_DESCRIPTIONS = 128; private static final int MAX_ALLOWED_ENTRIES_PER_PROVIDER = 16; private static SparseArray<CredentialDescriptionRegistry> sCredentialDescriptionSessionPerUser; static { Loading @@ -50,9 +51,11 @@ public class CredentialDescriptionRegistry { } private Map<String, Set<CredentialDescription>> mCredentialDescriptions; private int mTotalDescriptionCount; private CredentialDescriptionRegistry() { this.mCredentialDescriptions = new HashMap<>(); this.mTotalDescriptionCount = 0; } /** Handle the given {@link RegisterCredentialDescriptionRequest} by creating Loading @@ -60,13 +63,20 @@ public class CredentialDescriptionRegistry { public void executeRegisterRequest(RegisterCredentialDescriptionRequest request, String callingPackageName) { if (!mCredentialDescriptions.containsKey(callingPackageName) && mCredentialDescriptions.size() <= MAX_ALLOWED_CREDENTIAL_DESCRIPTIONS) { if (!mCredentialDescriptions.containsKey(callingPackageName)) { mCredentialDescriptions.put(callingPackageName, new HashSet<>()); } if (mTotalDescriptionCount <= MAX_ALLOWED_CREDENTIAL_DESCRIPTIONS && mCredentialDescriptions.get(callingPackageName).size() <= MAX_ALLOWED_ENTRIES_PER_PROVIDER) { Set<CredentialDescription> descriptions = request.getCredentialDescriptions(); int size = mCredentialDescriptions.get(callingPackageName).size(); mCredentialDescriptions.get(callingPackageName) .addAll(request.getCredentialDescriptions()); .addAll(descriptions); mTotalDescriptionCount += size - mCredentialDescriptions.get(callingPackageName).size(); } } /** Handle the given {@link UnregisterCredentialDescriptionRequest} by creating Loading @@ -76,8 +86,10 @@ public class CredentialDescriptionRegistry { String callingPackageName) { if (mCredentialDescriptions.containsKey(callingPackageName)) { int size = mCredentialDescriptions.get(callingPackageName).size(); mCredentialDescriptions.get(callingPackageName) .removeAll(request.getCredentialDescriptions()); mTotalDescriptionCount -= size - mCredentialDescriptions.get(callingPackageName).size(); } } Loading