summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/system-current.txt35
-rw-r--r--core/api/test-current.txt124
-rw-r--r--core/java/android/credentials/GetCandidateCredentialsResponse.java2
-rw-r--r--core/java/android/credentials/selection/AuthenticationEntry.java (renamed from core/java/android/credentials/ui/AuthenticationEntry.java)6
-rw-r--r--core/java/android/credentials/selection/BaseDialogResult.java (renamed from core/java/android/credentials/ui/BaseDialogResult.java)22
-rw-r--r--core/java/android/credentials/selection/CancelUiRequest.java (renamed from core/java/android/credentials/ui/CancelUiRequest.java)4
-rw-r--r--core/java/android/credentials/selection/Constants.java (renamed from core/java/android/credentials/ui/Constants.java)6
-rw-r--r--core/java/android/credentials/selection/CreateCredentialProviderData.java (renamed from core/java/android/credentials/ui/CreateCredentialProviderData.java)7
-rw-r--r--core/java/android/credentials/selection/CreateCredentialProviderInfo.java (renamed from core/java/android/credentials/ui/CreateCredentialProviderInfo.java)2
-rw-r--r--core/java/android/credentials/selection/DisabledProviderData.java (renamed from core/java/android/credentials/ui/DisabledProviderData.java)6
-rw-r--r--core/java/android/credentials/selection/DisabledProviderInfo.java (renamed from core/java/android/credentials/ui/DisabledProviderInfo.java)2
-rw-r--r--core/java/android/credentials/selection/Entry.java (renamed from core/java/android/credentials/ui/Entry.java)6
-rw-r--r--core/java/android/credentials/selection/FailureDialogResult.java (renamed from core/java/android/credentials/ui/FailureDialogResult.java)12
-rw-r--r--core/java/android/credentials/selection/FailureResult.java (renamed from core/java/android/credentials/ui/FailureResult.java)10
-rw-r--r--core/java/android/credentials/selection/GetCredentialProviderData.java (renamed from core/java/android/credentials/ui/GetCredentialProviderData.java)7
-rw-r--r--core/java/android/credentials/selection/GetCredentialProviderInfo.java (renamed from core/java/android/credentials/ui/GetCredentialProviderInfo.java)2
-rw-r--r--core/java/android/credentials/selection/IntentFactory.java (renamed from core/java/android/credentials/ui/IntentFactory.java)6
-rw-r--r--core/java/android/credentials/selection/IntentHelper.java (renamed from core/java/android/credentials/ui/IntentHelper.java)2
-rw-r--r--core/java/android/credentials/selection/ProviderData.java (renamed from core/java/android/credentials/ui/ProviderData.java)13
-rw-r--r--core/java/android/credentials/selection/ProviderPendingIntentResponse.java (renamed from core/java/android/credentials/ui/ProviderPendingIntentResponse.java)47
-rw-r--r--core/java/android/credentials/selection/RequestInfo.java (renamed from core/java/android/credentials/ui/RequestInfo.java)70
-rw-r--r--core/java/android/credentials/selection/ResultHelper.java (renamed from core/java/android/credentials/ui/ResultHelper.java)18
-rw-r--r--core/java/android/credentials/selection/UserSelectionDialogResult.java (renamed from core/java/android/credentials/ui/UserSelectionDialogResult.java)48
-rw-r--r--core/java/android/credentials/selection/UserSelectionResult.java (renamed from core/java/android/credentials/ui/UserSelectionResult.java)37
-rw-r--r--core/java/android/credentials/ui/UiResult.java24
-rw-r--r--packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt2
-rw-r--r--packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt4
-rw-r--r--packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt4
-rw-r--r--packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/CredentialKtx.kt6
-rw-r--r--packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt12
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt20
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt6
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt10
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt3
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/common/DialogType.kt2
-rw-r--r--packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/password/SinglePasswordScreenViewModel.kt4
-rw-r--r--services/credentials/java/com/android/server/credentials/ClearRequestSession.java4
-rw-r--r--services/credentials/java/com/android/server/credentials/CreateRequestSession.java4
-rw-r--r--services/credentials/java/com/android/server/credentials/CredentialManagerUi.java10
-rw-r--r--services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java6
-rw-r--r--services/credentials/java/com/android/server/credentials/GetRequestSession.java4
-rw-r--r--services/credentials/java/com/android/server/credentials/PendingIntentResultHandler.java2
-rw-r--r--services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java6
-rw-r--r--services/credentials/java/com/android/server/credentials/ProviderClearSession.java4
-rw-r--r--services/credentials/java/com/android/server/credentials/ProviderCreateSession.java6
-rw-r--r--services/credentials/java/com/android/server/credentials/ProviderGetSession.java8
-rw-r--r--services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java8
-rw-r--r--services/credentials/java/com/android/server/credentials/ProviderSession.java4
-rw-r--r--services/credentials/java/com/android/server/credentials/RequestSession.java4
-rw-r--r--services/credentials/java/com/android/server/credentials/metrics/ApiName.java10
-rw-r--r--services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java4
52 files changed, 438 insertions, 239 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 5f79792d3ff6..30913a0db9b1 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -4381,6 +4381,41 @@ package android.content.rollback {
}
+package android.credentials.selection {
+
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class FailureResult {
+ ctor public FailureResult(int, @Nullable String);
+ method public int getErrorCode();
+ method @Nullable public String getErrorMessage();
+ field public static final int ERROR_CODE_CANCELED_AND_LAUNCHED_SETTINGS = 2; // 0x2
+ field public static final int ERROR_CODE_DIALOG_CANCELED_BY_USER = 1; // 0x1
+ field public static final int ERROR_CODE_UI_FAILURE = 0; // 0x0
+ }
+
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class ProviderPendingIntentResponse implements android.os.Parcelable {
+ ctor public ProviderPendingIntentResponse(int, @Nullable android.content.Intent);
+ method public int describeContents();
+ method public int getResultCode();
+ method @Nullable public android.content.Intent getResultData();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.ProviderPendingIntentResponse> CREATOR;
+ }
+
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class ResultHelper {
+ method public static void sendFailureResult(@NonNull android.os.ResultReceiver, @NonNull android.credentials.selection.FailureResult);
+ method public static void sendUserSelectionResult(@NonNull android.os.ResultReceiver, @NonNull android.credentials.selection.UserSelectionResult);
+ }
+
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class UserSelectionResult {
+ ctor public UserSelectionResult(@NonNull String, @NonNull String, @NonNull String, @Nullable android.credentials.selection.ProviderPendingIntentResponse);
+ method @NonNull public String getEntryKey();
+ method @NonNull public String getEntrySubkey();
+ method @Nullable public android.credentials.selection.ProviderPendingIntentResponse getPendingIntentProviderResponse();
+ method @NonNull public String getProviderId();
+ }
+
+}
+
package android.database {
public abstract class ContentObserver {
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 7a3d320dddab..42cf08ff9a66 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -1262,9 +1262,9 @@ package android.credentials {
}
-package android.credentials.ui {
+package android.credentials.selection {
- public final class AuthenticationEntry implements android.os.Parcelable {
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class AuthenticationEntry implements android.os.Parcelable {
ctor public AuthenticationEntry(@NonNull String, @NonNull String, @NonNull android.app.slice.Slice, int);
ctor public AuthenticationEntry(@NonNull String, @NonNull String, @NonNull android.app.slice.Slice, int, @NonNull android.content.Intent);
method public int describeContents();
@@ -1274,32 +1274,47 @@ package android.credentials.ui {
method @NonNull public int getStatus();
method @NonNull public String getSubkey();
method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.credentials.ui.AuthenticationEntry> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.AuthenticationEntry> CREATOR;
field public static final int STATUS_LOCKED = 0; // 0x0
field public static final int STATUS_UNLOCKED_BUT_EMPTY_LESS_RECENT = 1; // 0x1
field public static final int STATUS_UNLOCKED_BUT_EMPTY_MOST_RECENT = 2; // 0x2
}
- public final class CreateCredentialProviderData extends android.credentials.ui.ProviderData implements android.os.Parcelable {
- ctor public CreateCredentialProviderData(@NonNull String, @NonNull java.util.List<android.credentials.ui.Entry>, @Nullable android.credentials.ui.Entry);
- method @Nullable public android.credentials.ui.Entry getRemoteEntry();
- method @NonNull public java.util.List<android.credentials.ui.Entry> getSaveEntries();
- field @NonNull public static final android.os.Parcelable.Creator<android.credentials.ui.CreateCredentialProviderData> CREATOR;
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public class BaseDialogResult implements android.os.Parcelable {
+ ctor public BaseDialogResult(@Nullable android.os.IBinder);
+ ctor protected BaseDialogResult(@NonNull android.os.Parcel);
+ method public static void addToBundle(@NonNull android.credentials.selection.BaseDialogResult, @NonNull android.os.Bundle);
+ method public int describeContents();
+ method @Nullable public static android.credentials.selection.BaseDialogResult fromResultData(@NonNull android.os.Bundle);
+ method @Deprecated @Nullable public android.os.IBinder getRequestToken();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.BaseDialogResult> CREATOR;
+ field public static final int RESULT_CODE_CANCELED_AND_LAUNCHED_SETTINGS = 1; // 0x1
+ field public static final int RESULT_CODE_DATA_PARSING_FAILURE = 3; // 0x3
+ field public static final int RESULT_CODE_DIALOG_COMPLETE_WITH_SELECTION = 2; // 0x2
+ field public static final int RESULT_CODE_DIALOG_USER_CANCELED = 0; // 0x0
+ }
+
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class CreateCredentialProviderData extends android.credentials.selection.ProviderData implements android.os.Parcelable {
+ ctor public CreateCredentialProviderData(@NonNull String, @NonNull java.util.List<android.credentials.selection.Entry>, @Nullable android.credentials.selection.Entry);
+ method @Nullable public android.credentials.selection.Entry getRemoteEntry();
+ method @NonNull public java.util.List<android.credentials.selection.Entry> getSaveEntries();
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.CreateCredentialProviderData> CREATOR;
}
- public static final class CreateCredentialProviderData.Builder {
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public static final class CreateCredentialProviderData.Builder {
ctor public CreateCredentialProviderData.Builder(@NonNull String);
- method @NonNull public android.credentials.ui.CreateCredentialProviderData build();
- method @NonNull public android.credentials.ui.CreateCredentialProviderData.Builder setRemoteEntry(@Nullable android.credentials.ui.Entry);
- method @NonNull public android.credentials.ui.CreateCredentialProviderData.Builder setSaveEntries(@NonNull java.util.List<android.credentials.ui.Entry>);
+ method @NonNull public android.credentials.selection.CreateCredentialProviderData build();
+ method @NonNull public android.credentials.selection.CreateCredentialProviderData.Builder setRemoteEntry(@Nullable android.credentials.selection.Entry);
+ method @NonNull public android.credentials.selection.CreateCredentialProviderData.Builder setSaveEntries(@NonNull java.util.List<android.credentials.selection.Entry>);
}
- public final class DisabledProviderData extends android.credentials.ui.ProviderData implements android.os.Parcelable {
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class DisabledProviderData extends android.credentials.selection.ProviderData implements android.os.Parcelable {
ctor public DisabledProviderData(@NonNull String);
- field @NonNull public static final android.os.Parcelable.Creator<android.credentials.ui.DisabledProviderData> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.DisabledProviderData> CREATOR;
}
- public final class Entry implements android.os.Parcelable {
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class Entry implements android.os.Parcelable {
ctor public Entry(@NonNull String, @NonNull String, @NonNull android.app.slice.Slice);
ctor public Entry(@NonNull String, @NonNull String, @NonNull android.app.slice.Slice, @NonNull android.content.Intent);
method public int describeContents();
@@ -1309,56 +1324,81 @@ package android.credentials.ui {
method @NonNull public android.app.slice.Slice getSlice();
method @NonNull public String getSubkey();
method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.credentials.ui.Entry> CREATOR;
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.Entry> CREATOR;
+ }
+
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class FailureDialogResult extends android.credentials.selection.BaseDialogResult implements android.os.Parcelable {
+ ctor public FailureDialogResult(@Nullable android.os.IBinder, @Nullable String);
+ method public static void addToBundle(@NonNull android.credentials.selection.FailureDialogResult, @NonNull android.os.Bundle);
+ method @Nullable public static android.credentials.selection.FailureDialogResult fromResultData(@NonNull android.os.Bundle);
+ method @Nullable public String getErrorMessage();
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.FailureDialogResult> CREATOR;
}
- public final class GetCredentialProviderData extends android.credentials.ui.ProviderData implements android.os.Parcelable {
- ctor public GetCredentialProviderData(@NonNull String, @NonNull java.util.List<android.credentials.ui.Entry>, @NonNull java.util.List<android.credentials.ui.Entry>, @NonNull java.util.List<android.credentials.ui.AuthenticationEntry>, @Nullable android.credentials.ui.Entry);
- method @NonNull public java.util.List<android.credentials.ui.Entry> getActionChips();
- method @NonNull public java.util.List<android.credentials.ui.AuthenticationEntry> getAuthenticationEntries();
- method @NonNull public java.util.List<android.credentials.ui.Entry> getCredentialEntries();
- method @Nullable public android.credentials.ui.Entry getRemoteEntry();
- field @NonNull public static final android.os.Parcelable.Creator<android.credentials.ui.GetCredentialProviderData> CREATOR;
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class GetCredentialProviderData extends android.credentials.selection.ProviderData implements android.os.Parcelable {
+ ctor public GetCredentialProviderData(@NonNull String, @NonNull java.util.List<android.credentials.selection.Entry>, @NonNull java.util.List<android.credentials.selection.Entry>, @NonNull java.util.List<android.credentials.selection.AuthenticationEntry>, @Nullable android.credentials.selection.Entry);
+ method @NonNull public java.util.List<android.credentials.selection.Entry> getActionChips();
+ method @NonNull public java.util.List<android.credentials.selection.AuthenticationEntry> getAuthenticationEntries();
+ method @NonNull public java.util.List<android.credentials.selection.Entry> getCredentialEntries();
+ method @Nullable public android.credentials.selection.Entry getRemoteEntry();
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.GetCredentialProviderData> CREATOR;
}
- public static final class GetCredentialProviderData.Builder {
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public static final class GetCredentialProviderData.Builder {
ctor public GetCredentialProviderData.Builder(@NonNull String);
- method @NonNull public android.credentials.ui.GetCredentialProviderData build();
- method @NonNull public android.credentials.ui.GetCredentialProviderData.Builder setActionChips(@NonNull java.util.List<android.credentials.ui.Entry>);
- method @NonNull public android.credentials.ui.GetCredentialProviderData.Builder setAuthenticationEntries(@NonNull java.util.List<android.credentials.ui.AuthenticationEntry>);
- method @NonNull public android.credentials.ui.GetCredentialProviderData.Builder setCredentialEntries(@NonNull java.util.List<android.credentials.ui.Entry>);
- method @NonNull public android.credentials.ui.GetCredentialProviderData.Builder setRemoteEntry(@Nullable android.credentials.ui.Entry);
+ method @NonNull public android.credentials.selection.GetCredentialProviderData build();
+ method @NonNull public android.credentials.selection.GetCredentialProviderData.Builder setActionChips(@NonNull java.util.List<android.credentials.selection.Entry>);
+ method @NonNull public android.credentials.selection.GetCredentialProviderData.Builder setAuthenticationEntries(@NonNull java.util.List<android.credentials.selection.AuthenticationEntry>);
+ method @NonNull public android.credentials.selection.GetCredentialProviderData.Builder setCredentialEntries(@NonNull java.util.List<android.credentials.selection.Entry>);
+ method @NonNull public android.credentials.selection.GetCredentialProviderData.Builder setRemoteEntry(@Nullable android.credentials.selection.Entry);
}
- public class IntentFactory {
- method @NonNull public static android.content.Intent createCredentialSelectorIntent(@NonNull android.credentials.ui.RequestInfo, @NonNull java.util.ArrayList<android.credentials.ui.ProviderData>, @NonNull java.util.ArrayList<android.credentials.ui.DisabledProviderData>, @NonNull android.os.ResultReceiver);
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public class IntentFactory {
+ method @NonNull public static android.content.Intent createCredentialSelectorIntent(@NonNull android.credentials.selection.RequestInfo, @NonNull java.util.ArrayList<android.credentials.selection.ProviderData>, @NonNull java.util.ArrayList<android.credentials.selection.DisabledProviderData>, @NonNull android.os.ResultReceiver);
}
- public abstract class ProviderData implements android.os.Parcelable {
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public abstract class ProviderData implements android.os.Parcelable {
ctor public ProviderData(@NonNull String);
ctor protected ProviderData(@NonNull android.os.Parcel);
method public int describeContents();
method @NonNull public String getProviderFlattenedComponentName();
method public void writeToParcel(@NonNull android.os.Parcel, int);
- field public static final String EXTRA_DISABLED_PROVIDER_DATA_LIST = "android.credentials.ui.extra.DISABLED_PROVIDER_DATA_LIST";
- field public static final String EXTRA_ENABLED_PROVIDER_DATA_LIST = "android.credentials.ui.extra.ENABLED_PROVIDER_DATA_LIST";
+ field public static final String EXTRA_DISABLED_PROVIDER_DATA_LIST = "android.credentials.selection.extra.DISABLED_PROVIDER_DATA_LIST";
+ field public static final String EXTRA_ENABLED_PROVIDER_DATA_LIST = "android.credentials.selection.extra.ENABLED_PROVIDER_DATA_LIST";
}
- public final class RequestInfo implements android.os.Parcelable {
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class RequestInfo implements android.os.Parcelable {
method public int describeContents();
method @NonNull public String getAppPackageName();
method @Nullable public android.credentials.CreateCredentialRequest getCreateCredentialRequest();
+ method @NonNull public java.util.List<java.lang.String> getDefaultProviderIds();
method @Nullable public android.credentials.GetCredentialRequest getGetCredentialRequest();
+ method @NonNull public java.util.List<java.lang.String> getRegistryProviderIds();
method @NonNull public android.os.IBinder getToken();
method @NonNull public String getType();
- method @NonNull public static android.credentials.ui.RequestInfo newCreateRequestInfo(@NonNull android.os.IBinder, @NonNull android.credentials.CreateCredentialRequest, @NonNull String);
- method @NonNull public static android.credentials.ui.RequestInfo newGetRequestInfo(@NonNull android.os.IBinder, @NonNull android.credentials.GetCredentialRequest, @NonNull String);
+ method public boolean hasPermissionToOverrideDefault();
+ method @NonNull public static android.credentials.selection.RequestInfo newCreateRequestInfo(@NonNull android.os.IBinder, @NonNull android.credentials.CreateCredentialRequest, @NonNull String);
+ method @NonNull public static android.credentials.selection.RequestInfo newCreateRequestInfo(@NonNull android.os.IBinder, @NonNull android.credentials.CreateCredentialRequest, @NonNull String, boolean, @NonNull java.util.List<java.lang.String>);
+ method @NonNull public static android.credentials.selection.RequestInfo newGetRequestInfo(@NonNull android.os.IBinder, @NonNull android.credentials.GetCredentialRequest, @NonNull String, boolean);
+ method @NonNull public static android.credentials.selection.RequestInfo newGetRequestInfo(@NonNull android.os.IBinder, @NonNull android.credentials.GetCredentialRequest, @NonNull String);
method public void writeToParcel(@NonNull android.os.Parcel, int);
- field @NonNull public static final android.os.Parcelable.Creator<android.credentials.ui.RequestInfo> CREATOR;
- field @NonNull public static final String EXTRA_REQUEST_INFO = "android.credentials.ui.extra.REQUEST_INFO";
- field @NonNull public static final String TYPE_CREATE = "android.credentials.ui.TYPE_CREATE";
- field @NonNull public static final String TYPE_GET = "android.credentials.ui.TYPE_GET";
- field @NonNull public static final String TYPE_UNDEFINED = "android.credentials.ui.TYPE_UNDEFINED";
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.RequestInfo> CREATOR;
+ field @NonNull public static final String EXTRA_REQUEST_INFO = "android.credentials.selection.extra.REQUEST_INFO";
+ field @NonNull public static final String TYPE_CREATE = "android.credentials.selection.TYPE_CREATE";
+ field @NonNull public static final String TYPE_GET = "android.credentials.selection.TYPE_GET";
+ field @NonNull public static final String TYPE_UNDEFINED = "android.credentials.selection.TYPE_UNDEFINED";
+ }
+
+ @FlaggedApi("android.credentials.flags.configurable_selector_ui_enabled") public final class UserSelectionDialogResult extends android.credentials.selection.BaseDialogResult implements android.os.Parcelable {
+ ctor public UserSelectionDialogResult(@Nullable android.os.IBinder, @NonNull String, @NonNull String, @NonNull String);
+ ctor public UserSelectionDialogResult(@Nullable android.os.IBinder, @NonNull String, @NonNull String, @NonNull String, @Nullable android.credentials.selection.ProviderPendingIntentResponse);
+ method public static void addToBundle(@NonNull android.credentials.selection.UserSelectionDialogResult, @NonNull android.os.Bundle);
+ method @Nullable public static android.credentials.selection.UserSelectionDialogResult fromResultData(@NonNull android.os.Bundle);
+ method @NonNull public String getEntryKey();
+ method @NonNull public String getEntrySubkey();
+ method @Nullable public android.credentials.selection.ProviderPendingIntentResponse getPendingIntentProviderResponse();
+ method @NonNull public String getProviderId();
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.selection.UserSelectionDialogResult> CREATOR;
}
}
diff --git a/core/java/android/credentials/GetCandidateCredentialsResponse.java b/core/java/android/credentials/GetCandidateCredentialsResponse.java
index 530feadae836..73361ad25964 100644
--- a/core/java/android/credentials/GetCandidateCredentialsResponse.java
+++ b/core/java/android/credentials/GetCandidateCredentialsResponse.java
@@ -19,7 +19,7 @@ package android.credentials;
import android.annotation.Hide;
import android.annotation.NonNull;
import android.app.PendingIntent;
-import android.credentials.ui.GetCredentialProviderData;
+import android.credentials.selection.GetCredentialProviderData;
import android.os.Parcel;
import android.os.Parcelable;
diff --git a/core/java/android/credentials/ui/AuthenticationEntry.java b/core/java/android/credentials/selection/AuthenticationEntry.java
index 9bd0871b3d3b..54589e1aed8b 100644
--- a/core/java/android/credentials/ui/AuthenticationEntry.java
+++ b/core/java/android/credentials/selection/AuthenticationEntry.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -41,6 +44,7 @@ import java.lang.annotation.RetentionPolicy;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class AuthenticationEntry implements Parcelable {
@NonNull
private final String mKey;
diff --git a/core/java/android/credentials/ui/BaseDialogResult.java b/core/java/android/credentials/selection/BaseDialogResult.java
index e985a4666d31..d4a73c3c1175 100644
--- a/core/java/android/credentials/ui/BaseDialogResult.java
+++ b/core/java/android/credentials/selection/BaseDialogResult.java
@@ -14,11 +14,16 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SuppressLint;
+import android.annotation.TestApi;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
@@ -35,6 +40,10 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
+@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
+@SuppressLint("ParcelNotFinal") // Test API only. This is never intended to be officially exposed.
+// Instead proper final wrapper classes are defined (e.g. {@code FailureDialogResult}).
public class BaseDialogResult implements Parcelable {
/** Parses and returns a BaseDialogResult from the given resultData. */
@Nullable
@@ -54,7 +63,8 @@ public class BaseDialogResult implements Parcelable {
* The intent extra key for the {@code BaseDialogResult} object when the credential
* selector activity finishes.
*/
- private static final String EXTRA_BASE_RESULT = "android.credentials.ui.extra.BASE_RESULT";
+ private static final String EXTRA_BASE_RESULT =
+ "android.credentials.selection.extra.BASE_RESULT";
/** @hide **/
@IntDef(prefix = {"RESULT_CODE_"}, value = {
@@ -92,13 +102,19 @@ public class BaseDialogResult implements Parcelable {
mRequestToken = requestToken;
}
- /** Returns the unique identifier for the request that launched the operation. */
+ /**
+ * Returns the unique identifier for the request that launched the operation.
+ *
+ * @deprecated do not use
+ */
@Nullable
@Deprecated
public IBinder getRequestToken() {
return mRequestToken;
}
+ @SuppressLint("ParcelConstructor") // Test API only. This is never intended to be officially
+ // exposed. Instead proper final wrapper classes are defined (e.g. {@code FailureDialogResult}).
protected BaseDialogResult(@NonNull Parcel in) {
IBinder requestToken = in.readStrongBinder();
mRequestToken = requestToken;
diff --git a/core/java/android/credentials/ui/CancelUiRequest.java b/core/java/android/credentials/selection/CancelUiRequest.java
index 712424ced41b..fca0e2ad184e 100644
--- a/core/java/android/credentials/ui/CancelUiRequest.java
+++ b/core/java/android/credentials/selection/CancelUiRequest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
import android.annotation.NonNull;
import android.os.IBinder;
@@ -38,7 +38,7 @@ public final class CancelUiRequest implements Parcelable {
*/
@NonNull
public static final String EXTRA_CANCEL_UI_REQUEST =
- "android.credentials.ui.extra.CANCEL_UI_REQUEST";
+ "android.credentials.selection.extra.CANCEL_UI_REQUEST";
@NonNull
private final IBinder mToken;
diff --git a/core/java/android/credentials/ui/Constants.java b/core/java/android/credentials/selection/Constants.java
index 68f28e74dad0..7e6c7810f1ab 100644
--- a/core/java/android/credentials/ui/Constants.java
+++ b/core/java/android/credentials/selection/Constants.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
/**
* Constants for the ui protocol that doesn't fit into other individual data structures.
@@ -27,14 +27,14 @@ public class Constants {
* The intent extra key for the {@code ResultReceiver} object when launching the UX activities.
*/
public static final String EXTRA_RESULT_RECEIVER =
- "android.credentials.ui.extra.RESULT_RECEIVER";
+ "android.credentials.selection.extra.RESULT_RECEIVER";
/**
* The intent extra key for indicating whether the bottom sheet should be started directly
* on the 'All Options' screen.
*/
public static final String EXTRA_REQ_FOR_ALL_OPTIONS =
- "android.credentials.ui.extra.REQ_FOR_ALL_OPTIONS";
+ "android.credentials.selection.extra.REQ_FOR_ALL_OPTIONS";
private Constants() {}
}
diff --git a/core/java/android/credentials/ui/CreateCredentialProviderData.java b/core/java/android/credentials/selection/CreateCredentialProviderData.java
index d7a4f5bdbfca..fc80ea8cec8a 100644
--- a/core/java/android/credentials/ui/CreateCredentialProviderData.java
+++ b/core/java/android/credentials/selection/CreateCredentialProviderData.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
@@ -33,6 +36,7 @@ import java.util.List;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class CreateCredentialProviderData extends ProviderData implements Parcelable {
@NonNull
private final List<Entry> mSaveEntries;
@@ -112,6 +116,7 @@ public final class CreateCredentialProviderData extends ProviderData implements
* @hide
*/
@TestApi
+ @FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public static final class Builder {
@NonNull private String mProviderFlattenedComponentName;
@NonNull private List<Entry> mSaveEntries = new ArrayList<>();
diff --git a/core/java/android/credentials/ui/CreateCredentialProviderInfo.java b/core/java/android/credentials/selection/CreateCredentialProviderInfo.java
index 41ca852c2351..78b9fd445f49 100644
--- a/core/java/android/credentials/ui/CreateCredentialProviderInfo.java
+++ b/core/java/android/credentials/selection/CreateCredentialProviderInfo.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
import android.annotation.NonNull;
import android.annotation.Nullable;
diff --git a/core/java/android/credentials/ui/DisabledProviderData.java b/core/java/android/credentials/selection/DisabledProviderData.java
index 8bccdc9a199f..b6f6ad4d60d7 100644
--- a/core/java/android/credentials/ui/DisabledProviderData.java
+++ b/core/java/android/credentials/selection/DisabledProviderData.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.TestApi;
import android.os.Parcel;
@@ -27,6 +30,7 @@ import android.os.Parcelable;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class DisabledProviderData extends ProviderData implements Parcelable {
public DisabledProviderData(
diff --git a/core/java/android/credentials/ui/DisabledProviderInfo.java b/core/java/android/credentials/selection/DisabledProviderInfo.java
index 7ce63681cf1c..7d7dbc2dd689 100644
--- a/core/java/android/credentials/ui/DisabledProviderInfo.java
+++ b/core/java/android/credentials/selection/DisabledProviderInfo.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
import android.annotation.NonNull;
diff --git a/core/java/android/credentials/ui/Entry.java b/core/java/android/credentials/selection/Entry.java
index 84694471ce70..bcf4ee3fb819 100644
--- a/core/java/android/credentials/ui/Entry.java
+++ b/core/java/android/credentials/selection/Entry.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
@@ -34,6 +37,7 @@ import com.android.internal.util.AnnotationValidations;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class Entry implements Parcelable {
@NonNull
private final String mKey;
diff --git a/core/java/android/credentials/ui/FailureDialogResult.java b/core/java/android/credentials/selection/FailureDialogResult.java
index abd5a92415d8..218aa469887e 100644
--- a/core/java/android/credentials/ui/FailureDialogResult.java
+++ b/core/java/android/credentials/selection/FailureDialogResult.java
@@ -14,10 +14,14 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TestApi;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
@@ -28,6 +32,8 @@ import android.os.Parcelable;
*
* @hide
*/
+@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class FailureDialogResult extends BaseDialogResult implements Parcelable {
/** Parses and returns a UserSelectionDialogResult from the given resultData. */
@Nullable
@@ -50,7 +56,7 @@ public final class FailureDialogResult extends BaseDialogResult implements Parce
* selector activity finishes.
*/
private static final String EXTRA_FAILURE_RESULT =
- "android.credentials.ui.extra.FAILURE_RESULT";
+ "android.credentials.selection.extra.FAILURE_RESULT";
@Nullable
private final String mErrorMessage;
@@ -66,7 +72,7 @@ public final class FailureDialogResult extends BaseDialogResult implements Parce
return mErrorMessage;
}
- protected FailureDialogResult(@NonNull Parcel in) {
+ private FailureDialogResult(@NonNull Parcel in) {
super(in);
mErrorMessage = in.readString8();
}
diff --git a/core/java/android/credentials/ui/FailureResult.java b/core/java/android/credentials/selection/FailureResult.java
index ec584170fba2..93ba671fa14f 100644
--- a/core/java/android/credentials/ui/FailureResult.java
+++ b/core/java/android/credentials/selection/FailureResult.java
@@ -14,11 +14,15 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SystemApi;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -28,7 +32,9 @@ import java.lang.annotation.RetentionPolicy;
*
* @hide
*/
-public final class FailureResult implements UiResult {
+@SystemApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
+public final class FailureResult {
@Nullable
private final String mErrorMessage;
@NonNull
diff --git a/core/java/android/credentials/ui/GetCredentialProviderData.java b/core/java/android/credentials/selection/GetCredentialProviderData.java
index 481419b4f732..2d09f6052db8 100644
--- a/core/java/android/credentials/ui/GetCredentialProviderData.java
+++ b/core/java/android/credentials/selection/GetCredentialProviderData.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
@@ -33,6 +36,7 @@ import java.util.List;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class GetCredentialProviderData extends ProviderData implements Parcelable {
@NonNull
private final List<Entry> mCredentialEntries;
@@ -141,6 +145,7 @@ public final class GetCredentialProviderData extends ProviderData implements Par
* @hide
*/
@TestApi
+ @FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public static final class Builder {
@NonNull
private String mProviderFlattenedComponentName;
diff --git a/core/java/android/credentials/ui/GetCredentialProviderInfo.java b/core/java/android/credentials/selection/GetCredentialProviderInfo.java
index bac71472acd1..db0fb84fa76c 100644
--- a/core/java/android/credentials/ui/GetCredentialProviderInfo.java
+++ b/core/java/android/credentials/selection/GetCredentialProviderInfo.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
import android.annotation.NonNull;
import android.annotation.Nullable;
diff --git a/core/java/android/credentials/ui/IntentFactory.java b/core/java/android/credentials/selection/IntentFactory.java
index 5e1e0efe39c4..c3a09ae61754 100644
--- a/core/java/android/credentials/ui/IntentFactory.java
+++ b/core/java/android/credentials/selection/IntentFactory.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.TestApi;
@@ -34,6 +37,7 @@ import java.util.ArrayList;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public class IntentFactory {
/**
diff --git a/core/java/android/credentials/ui/IntentHelper.java b/core/java/android/credentials/selection/IntentHelper.java
index c5f34c1440a7..6bcd05afc00f 100644
--- a/core/java/android/credentials/ui/IntentHelper.java
+++ b/core/java/android/credentials/selection/IntentHelper.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
import android.annotation.NonNull;
import android.annotation.Nullable;
diff --git a/core/java/android/credentials/ui/ProviderData.java b/core/java/android/credentials/selection/ProviderData.java
index 1e5aa24d462d..e7a7d7744585 100644
--- a/core/java/android/credentials/ui/ProviderData.java
+++ b/core/java/android/credentials/selection/ProviderData.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.SuppressLint;
import android.annotation.TestApi;
@@ -30,6 +33,7 @@ import com.android.internal.util.AnnotationValidations;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
@SuppressLint({"ParcelCreator", "ParcelNotFinal"})
public abstract class ProviderData implements Parcelable {
@@ -38,13 +42,13 @@ public abstract class ProviderData implements Parcelable {
* launching the UX activities.
*/
public static final String EXTRA_ENABLED_PROVIDER_DATA_LIST =
- "android.credentials.ui.extra.ENABLED_PROVIDER_DATA_LIST";
+ "android.credentials.selection.extra.ENABLED_PROVIDER_DATA_LIST";
/**
* The intent extra key for the list of {@code ProviderData} from disabled providers when
* launching the UX activities.
*/
public static final String EXTRA_DISABLED_PROVIDER_DATA_LIST =
- "android.credentials.ui.extra.DISABLED_PROVIDER_DATA_LIST";
+ "android.credentials.selection.extra.DISABLED_PROVIDER_DATA_LIST";
@NonNull
private final String mProviderFlattenedComponentName;
@@ -63,6 +67,9 @@ public abstract class ProviderData implements Parcelable {
return mProviderFlattenedComponentName;
}
+ @SuppressLint("ParcelConstructor") // Test API only. This is never intended to be officially
+ // exposed. Instead proper final wrapper classes are defined (e.g.
+ // {@code GetCredentialProviderInfo}).
protected ProviderData(@NonNull Parcel in) {
String providerFlattenedComponentName = in.readString8();
mProviderFlattenedComponentName = providerFlattenedComponentName;
diff --git a/core/java/android/credentials/ui/ProviderPendingIntentResponse.java b/core/java/android/credentials/selection/ProviderPendingIntentResponse.java
index 11cc21f9d2db..281f34a5d195 100644
--- a/core/java/android/credentials/ui/ProviderPendingIntentResponse.java
+++ b/core/java/android/credentials/selection/ProviderPendingIntentResponse.java
@@ -14,14 +14,19 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
+import android.annotation.SystemApi;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
+import android.os.ResultReceiver;
/**
* Result of launching a provider's PendingIntent associated with an {@link Entry} after it is
@@ -33,12 +38,29 @@ import android.os.Parcelable;
*
* @hide
*/
+@SystemApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class ProviderPendingIntentResponse implements Parcelable {
private final int mResultCode;
@Nullable
private final Intent mResultData;
- /** Constructs a {@link ProviderPendingIntentResponse}. */
+ /**
+ * Constructs a {@link ProviderPendingIntentResponse}.
+ *
+ * When a user makes a selection, you should launch the associated provider PendingIntent,
+ * and expect the provider activity to complete and set
+ * {@link android.app.Activity#setResult(int, Intent)}. You should then immediately pass back
+ * the provider activity result code and data to the system service using this data class,
+ * via the {@link ResultHelper#sendUserSelectionResult(ResultReceiver, UserSelectionResult)}
+ * API.
+ *
+ * @param resultCode the resultCode returned from the provider activity
+ * @param resultData the result data returned from the provider activity; only set to null if
+ * the provider result (a provider would set it via
+ * {@link android.app.Activity#setResult(int, Intent)}) your UI received
+ * was actually null
+ */
public ProviderPendingIntentResponse(int resultCode, @Nullable Intent resultData) {
mResultCode = resultCode;
mResultData = resultData;
@@ -73,14 +95,29 @@ public final class ProviderPendingIntentResponse implements Parcelable {
dest.writeTypedObject(mResultData, flags);
}
- /** Returns the result code associated with this provider PendingIntent activity result. */
+ /**
+ * Returns the result code associated with this provider PendingIntent activity result, i.e.
+ * the {@code resultCode} that the provider activity has set using the
+ * {@link android.app.Activity#setResult(int, Intent)} API.
+ */
public int getResultCode() {
return mResultCode;
}
- /** Returns the result data associated with this provider PendingIntent activity result. */
+ /**
+ * Returns the result data associated with this provider PendingIntent activity result, i.e.
+ * the {@code data} that the provider activity has set using the
+ * {@link android.app.Activity#setResult(int, Intent)} API.
+ *
+ * Notice that this value can be null if the provider UI result (a provider would set it via
+ * {@link android.app.Activity#setResult(int, Intent)}) that your UI received was actually null,
+ * which indicates an implementation error on the provider side. The system service will
+ * gracefully handle this by passing back an API exception (
+ * {@link android.credentials.GetCredentialException} or
+ * {@link android.credentials.CreateCredentialException}).
+ */
@SuppressLint("IntentBuilderName") // Not building a new intent.
- @NonNull
+ @Nullable
public Intent getResultData() {
return mResultData;
}
diff --git a/core/java/android/credentials/ui/RequestInfo.java b/core/java/android/credentials/selection/RequestInfo.java
index f65158444e48..7d6ea7ee6b8c 100644
--- a/core/java/android/credentials/ui/RequestInfo.java
+++ b/core/java/android/credentials/selection/RequestInfo.java
@@ -14,8 +14,11 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.StringDef;
@@ -39,39 +42,46 @@ import java.util.List;
* @hide
*/
@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class RequestInfo implements Parcelable {
/**
* The intent extra key for the {@code RequestInfo} object when launching the UX
* activities.
*/
- @NonNull public static final String EXTRA_REQUEST_INFO =
- "android.credentials.ui.extra.REQUEST_INFO";
+ @NonNull
+ public static final String EXTRA_REQUEST_INFO =
+ "android.credentials.selection.extra.REQUEST_INFO";
/**
* Type value for any request that does not require UI.
*/
- @NonNull public static final String TYPE_UNDEFINED = "android.credentials.ui.TYPE_UNDEFINED";
+ @NonNull
+ public static final String TYPE_UNDEFINED = "android.credentials.selection.TYPE_UNDEFINED";
/**
* Type value for a getCredential request.
*/
- @NonNull public static final String TYPE_GET = "android.credentials.ui.TYPE_GET";
+ @NonNull
+ public static final String TYPE_GET = "android.credentials.selection.TYPE_GET";
/**
* Type value for a getCredential request that utilizes the credential registry.
*
* @hide
*/
- @NonNull public static final String TYPE_GET_VIA_REGISTRY =
- "android.credentials.ui.TYPE_GET_VIA_REGISTRY";
+ @NonNull
+ public static final String TYPE_GET_VIA_REGISTRY =
+ "android.credentials.selection.TYPE_GET_VIA_REGISTRY";
/**
* Type value for a createCredential request.
*/
- @NonNull public static final String TYPE_CREATE = "android.credentials.ui.TYPE_CREATE";
+ @NonNull
+ public static final String TYPE_CREATE = "android.credentials.selection.TYPE_CREATE";
/** @hide */
@Retention(RetentionPolicy.SOURCE)
- @StringDef(value = { TYPE_GET, TYPE_CREATE })
- public @interface RequestType {}
+ @StringDef(value = {TYPE_GET, TYPE_CREATE})
+ public @interface RequestType {
+ }
@NonNull
private final IBinder mToken;
@@ -82,6 +92,9 @@ public final class RequestInfo implements Parcelable {
@NonNull
private final List<String> mDefaultProviderIds;
+ @NonNull
+ private final List<String> mRegistryProviderIds;
+
@Nullable
private final GetCredentialRequest mGetCredentialRequest;
@@ -105,11 +118,7 @@ public final class RequestInfo implements Parcelable {
/*defaultProviderIds=*/ new ArrayList<>());
}
- /**
- * Creates new {@code RequestInfo} for a create-credential flow.
- *
- * @hide
- */
+ /** Creates new {@code RequestInfo} for a create-credential flow. */
@NonNull
public static RequestInfo newCreateRequestInfo(
@NonNull IBinder token, @NonNull CreateCredentialRequest createCredentialRequest,
@@ -120,11 +129,7 @@ public final class RequestInfo implements Parcelable {
hasPermissionToOverrideDefault, defaultProviderIds);
}
- /**
- * Creates new {@code RequestInfo} for a get-credential flow.
- *
- * @hide
- */
+ /** Creates new {@code RequestInfo} for a get-credential flow. */
@NonNull
public static RequestInfo newGetRequestInfo(
@NonNull IBinder token, @NonNull GetCredentialRequest getCredentialRequest,
@@ -147,11 +152,7 @@ public final class RequestInfo implements Parcelable {
}
- /**
- * Returns whether the calling package has the permission
- *
- * @hide
- */
+ /** Returns whether the calling package has the permission. */
public boolean hasPermissionToOverrideDefault() {
return mHasPermissionToOverrideDefault;
}
@@ -185,13 +186,11 @@ public final class RequestInfo implements Parcelable {
}
/**
- * Returns default provider identifier (flattened component name) configured from the user
+ * Returns default provider identifiers (component or package name) configured from the user
* settings.
*
* Will only be possibly non-empty for the create use case. Not meaningful for the sign-in use
* case.
- *
- * @hide
*/
@NonNull
public List<String> getDefaultProviderIds() {
@@ -199,6 +198,15 @@ public final class RequestInfo implements Parcelable {
}
/**
+ * Returns provider identifiers (component or package name) that have been validated to provide
+ * registry entries.
+ */
+ @NonNull
+ public List<String> getRegistryProviderIds() {
+ return mRegistryProviderIds;
+ }
+
+ /**
* Returns the non-null GetCredentialRequest when the type of the request is {@link
* #TYPE_GET}, or null otherwise.
*/
@@ -220,6 +228,7 @@ public final class RequestInfo implements Parcelable {
mGetCredentialRequest = getCredentialRequest;
mHasPermissionToOverrideDefault = hasPermissionToOverrideDefault;
mDefaultProviderIds = defaultProviderIds == null ? new ArrayList<>() : defaultProviderIds;
+ mRegistryProviderIds = new ArrayList<>();
}
private RequestInfo(@NonNull Parcel in) {
@@ -241,6 +250,7 @@ public final class RequestInfo implements Parcelable {
mGetCredentialRequest = getCredentialRequest;
mHasPermissionToOverrideDefault = in.readBoolean();
mDefaultProviderIds = in.createStringArrayList();
+ mRegistryProviderIds = in.createStringArrayList();
}
@Override
@@ -252,6 +262,7 @@ public final class RequestInfo implements Parcelable {
dest.writeTypedObject(mGetCredentialRequest, flags);
dest.writeBoolean(mHasPermissionToOverrideDefault);
dest.writeStringList(mDefaultProviderIds);
+ dest.writeStringList(mRegistryProviderIds);
}
@Override
@@ -259,7 +270,8 @@ public final class RequestInfo implements Parcelable {
return 0;
}
- @NonNull public static final Creator<RequestInfo> CREATOR = new Creator<>() {
+ @NonNull
+ public static final Creator<RequestInfo> CREATOR = new Creator<>() {
@Override
public RequestInfo createFromParcel(@NonNull Parcel in) {
return new RequestInfo(in);
diff --git a/core/java/android/credentials/ui/ResultHelper.java b/core/java/android/credentials/selection/ResultHelper.java
index 7b9d5e87d666..d6347b0086ff 100644
--- a/core/java/android/credentials/ui/ResultHelper.java
+++ b/core/java/android/credentials/selection/ResultHelper.java
@@ -14,9 +14,13 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
+import android.annotation.SystemApi;
import android.content.Intent;
import android.os.Bundle;
import android.os.ResultReceiver;
@@ -26,13 +30,16 @@ import android.os.ResultReceiver;
*
* @hide
*/
+@SystemApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class ResultHelper {
/**
* Sends the {@code failureResult} that caused the UI to stop back to the CredentialManager
* service.
*
- * The {code resultReceiver} for a UI flow can be extracted from the UI launch intent via
- * {@link IntentHelper#extractResultReceiver(Intent)}.
+ * @param resultReceiver the ResultReceiver sent from the system service, that can be extracted
+ * from the launch intent via
+ * {@link IntentHelper#extractResultReceiver(Intent)}
*/
public static void sendFailureResult(@NonNull ResultReceiver resultReceiver,
@NonNull FailureResult failureResult) {
@@ -46,8 +53,9 @@ public final class ResultHelper {
/**
* Sends the completed {@code userSelectionResult} back to the CredentialManager service.
*
- * The {code resultReceiver} for a UI flow can be extracted from the UI launch intent via
- * {@link IntentHelper#extractResultReceiver(Intent)}.
+ * @param resultReceiver the ResultReceiver sent from the system service, that can be extracted
+ * from the launch intent via
+ * {@link IntentHelper#extractResultReceiver(Intent)}
*/
public static void sendUserSelectionResult(@NonNull ResultReceiver resultReceiver,
@NonNull UserSelectionResult userSelectionResult) {
diff --git a/core/java/android/credentials/ui/UserSelectionDialogResult.java b/core/java/android/credentials/selection/UserSelectionDialogResult.java
index 3089bf674b95..50d5aa3c51bd 100644
--- a/core/java/android/credentials/ui/UserSelectionDialogResult.java
+++ b/core/java/android/credentials/selection/UserSelectionDialogResult.java
@@ -14,10 +14,14 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.TestApi;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Parcel;
@@ -30,17 +34,19 @@ import com.android.internal.util.AnnotationValidations;
*
* @hide
*/
+@TestApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
public final class UserSelectionDialogResult extends BaseDialogResult implements Parcelable {
/** Parses and returns a UserSelectionDialogResult from the given resultData. */
@Nullable
public static UserSelectionDialogResult fromResultData(@NonNull Bundle resultData) {
return resultData.getParcelable(
- EXTRA_USER_SELECTION_RESULT, UserSelectionDialogResult.class);
+ EXTRA_USER_SELECTION_RESULT, UserSelectionDialogResult.class);
}
/**
* Used for the UX to construct the {@code resultData Bundle} to send via the {@code
- * ResultReceiver}.
+ * ResultReceiver}.
*/
public static void addToBundle(
@NonNull UserSelectionDialogResult result, @NonNull Bundle bundle) {
@@ -52,12 +58,16 @@ public final class UserSelectionDialogResult extends BaseDialogResult implements
* selector activity finishes.
*/
private static final String EXTRA_USER_SELECTION_RESULT =
- "android.credentials.ui.extra.USER_SELECTION_RESULT";
+ "android.credentials.selection.extra.USER_SELECTION_RESULT";
- @NonNull private final String mProviderId;
- @NonNull private final String mEntryKey;
- @NonNull private final String mEntrySubkey;
- @Nullable private ProviderPendingIntentResponse mProviderPendingIntentResponse;
+ @NonNull
+ private final String mProviderId;
+ @NonNull
+ private final String mEntryKey;
+ @NonNull
+ private final String mEntrySubkey;
+ @Nullable
+ private ProviderPendingIntentResponse mProviderPendingIntentResponse;
public UserSelectionDialogResult(
@Nullable IBinder requestToken, @NonNull String providerId,
@@ -103,7 +113,7 @@ public final class UserSelectionDialogResult extends BaseDialogResult implements
return mProviderPendingIntentResponse;
}
- protected UserSelectionDialogResult(@NonNull Parcel in) {
+ private UserSelectionDialogResult(@NonNull Parcel in) {
super(in);
String providerId = in.readString8();
String entryKey = in.readString8();
@@ -134,14 +144,14 @@ public final class UserSelectionDialogResult extends BaseDialogResult implements
public static final @NonNull Creator<UserSelectionDialogResult> CREATOR =
new Creator<UserSelectionDialogResult>() {
- @Override
- public UserSelectionDialogResult createFromParcel(@NonNull Parcel in) {
- return new UserSelectionDialogResult(in);
- }
-
- @Override
- public UserSelectionDialogResult[] newArray(int size) {
- return new UserSelectionDialogResult[size];
- }
- };
+ @Override
+ public UserSelectionDialogResult createFromParcel(@NonNull Parcel in) {
+ return new UserSelectionDialogResult(in);
+ }
+
+ @Override
+ public UserSelectionDialogResult[] newArray(int size) {
+ return new UserSelectionDialogResult[size];
+ }
+ };
}
diff --git a/core/java/android/credentials/ui/UserSelectionResult.java b/core/java/android/credentials/selection/UserSelectionResult.java
index 431dc631f3f6..235a5d5723ea 100644
--- a/core/java/android/credentials/ui/UserSelectionResult.java
+++ b/core/java/android/credentials/selection/UserSelectionResult.java
@@ -14,10 +14,14 @@
* limitations under the License.
*/
-package android.credentials.ui;
+package android.credentials.selection;
+import static android.credentials.flags.Flags.FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED;
+
+import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SystemApi;
import com.android.internal.util.Preconditions;
@@ -27,7 +31,9 @@ import com.android.internal.util.Preconditions;
*
* @hide
*/
-public final class UserSelectionResult implements UiResult {
+@SystemApi
+@FlaggedApi(FLAG_CONFIGURABLE_SELECTOR_UI_ENABLED)
+public final class UserSelectionResult {
@NonNull
private final String mProviderId;
@NonNull
@@ -40,31 +46,46 @@ public final class UserSelectionResult implements UiResult {
/**
* Constructs a {@link UserSelectionResult}.
*
- * @throws IllegalArgumentException if {@code providerId} is empty
+ * @param providerId the provider identifier (component name or package name) whose entry was
+ * selected by the user; the value should map to the
+ * {@link GetCredentialProviderInfo#getProviderName()} that provided this entry
+ * @param entryKey the identifier of this selected entry, i.e. the selected entry's
+ * {@link Entry#getKey()}
+ * @param entrySubkey the sub-identifier of this selected entry, i.e. the selected entry's
+ * {@link Entry#getSubkey()}
+ * @param providerPendingIntentResponse the provider activity result of launching the provider
+ * PendingIntent associated with this selection; or null
+ * if the associated selection didn't have an associated
+ * provider PendingIntent
+ * @throws IllegalArgumentException if {@code providerId}, {@code entryKey}, or
+ * {@code entrySubkey} is empty
*/
public UserSelectionResult(@NonNull String providerId,
@NonNull String entryKey, @NonNull String entrySubkey,
@Nullable ProviderPendingIntentResponse providerPendingIntentResponse) {
mProviderId = Preconditions.checkStringNotEmpty(providerId);
- mEntryKey = Preconditions.checkNotNull(entryKey);
- mEntrySubkey = Preconditions.checkNotNull(entrySubkey);
+ mEntryKey = Preconditions.checkStringNotEmpty(entryKey);
+ mEntrySubkey = Preconditions.checkStringNotEmpty(entrySubkey);
mProviderPendingIntentResponse = providerPendingIntentResponse;
}
- /** Returns provider package name whose entry was selected by the user. */
+ /**
+ * Returns the provider identifier (component name or package name) whose entry was selected by
+ * the user.
+ */
@NonNull
public String getProviderId() {
return mProviderId;
}
- /** Returns the key of the visual entry that the user selected. */
+ /** Returns the identifier of the visual entry that the user selected. */
@NonNull
public String getEntryKey() {
return mEntryKey;
}
- /** Returns the subkey of the visual entry that the user selected. */
+ /** Returns the sub-identifier of the visual entry that the user selected. */
@NonNull
public String getEntrySubkey() {
return mEntrySubkey;
diff --git a/core/java/android/credentials/ui/UiResult.java b/core/java/android/credentials/ui/UiResult.java
deleted file mode 100644
index 692584d1a561..000000000000
--- a/core/java/android/credentials/ui/UiResult.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2024 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.credentials.ui;
-
-/**
- * Base class for different types of ui results.
- *
- * @hide
- */
-public interface UiResult {}
diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt
index 325d3f819f14..0fa248de4465 100644
--- a/packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt
+++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/IntentParser.kt
@@ -19,7 +19,7 @@ package com.android.credentialmanager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
-import android.credentials.ui.RequestInfo
+import android.credentials.selection.RequestInfo
import android.util.Log
import com.android.credentialmanager.ktx.appLabel
import com.android.credentialmanager.ktx.cancelUiRequest
diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt
index 49387cf410ac..3fbff37e0416 100644
--- a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt
+++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/CredentialManagerClient.kt
@@ -17,8 +17,8 @@
package com.android.credentialmanager.client
import android.content.Intent
-import android.credentials.ui.BaseDialogResult
-import android.credentials.ui.UserSelectionDialogResult
+import android.credentials.selection.BaseDialogResult
+import android.credentials.selection.UserSelectionDialogResult
import com.android.credentialmanager.model.Request
import kotlinx.coroutines.flow.StateFlow
diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt
index 3ef65b052560..ec1f052839e4 100644
--- a/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt
+++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/client/impl/CredentialManagerClientImpl.kt
@@ -18,8 +18,8 @@ package com.android.credentialmanager.client.impl
import android.content.Context
import android.content.Intent
-import android.credentials.ui.BaseDialogResult
-import android.credentials.ui.UserSelectionDialogResult
+import android.credentials.selection.BaseDialogResult
+import android.credentials.selection.UserSelectionDialogResult
import android.os.Bundle
import android.util.Log
import com.android.credentialmanager.TAG
diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/CredentialKtx.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/CredentialKtx.kt
index f063074b39b4..a5f227a3adc9 100644
--- a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/CredentialKtx.kt
+++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/CredentialKtx.kt
@@ -23,9 +23,9 @@ import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.credentials.Credential
import android.credentials.flags.Flags
-import android.credentials.ui.AuthenticationEntry
-import android.credentials.ui.Entry
-import android.credentials.ui.GetCredentialProviderData
+import android.credentials.selection.AuthenticationEntry
+import android.credentials.selection.Entry
+import android.credentials.selection.GetCredentialProviderData
import android.graphics.drawable.Drawable
import android.text.TextUtils
import android.util.Log
diff --git a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt
index 3abdb6f9c9f2..4155b0398ce0 100644
--- a/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt
+++ b/packages/CredentialManager/shared/src/com/android/credentialmanager/ktx/IntentKtx.kt
@@ -17,12 +17,12 @@
package com.android.credentialmanager.ktx
import android.content.Intent
-import android.credentials.ui.CancelUiRequest
-import android.credentials.ui.Constants
-import android.credentials.ui.CreateCredentialProviderData
-import android.credentials.ui.GetCredentialProviderData
-import android.credentials.ui.ProviderData
-import android.credentials.ui.RequestInfo
+import android.credentials.selection.CancelUiRequest
+import android.credentials.selection.Constants
+import android.credentials.selection.CreateCredentialProviderData
+import android.credentials.selection.GetCredentialProviderData
+import android.credentials.selection.ProviderData
+import android.credentials.selection.RequestInfo
import android.os.ResultReceiver
val Intent.cancelUiRequest: CancelUiRequest?
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
index c0d71494e020..6cafcf7cd976 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
@@ -18,16 +18,16 @@ package com.android.credentialmanager
import android.content.Context
import android.content.Intent
-import android.credentials.ui.CancelUiRequest
-import android.credentials.ui.Constants
-import android.credentials.ui.CreateCredentialProviderData
-import android.credentials.ui.GetCredentialProviderData
-import android.credentials.ui.DisabledProviderData
-import android.credentials.ui.ProviderData
-import android.credentials.ui.RequestInfo
-import android.credentials.ui.BaseDialogResult
-import android.credentials.ui.ProviderPendingIntentResponse
-import android.credentials.ui.UserSelectionDialogResult
+import android.credentials.selection.CancelUiRequest
+import android.credentials.selection.Constants
+import android.credentials.selection.CreateCredentialProviderData
+import android.credentials.selection.GetCredentialProviderData
+import android.credentials.selection.DisabledProviderData
+import android.credentials.selection.ProviderData
+import android.credentials.selection.RequestInfo
+import android.credentials.selection.BaseDialogResult
+import android.credentials.selection.ProviderPendingIntentResponse
+import android.credentials.selection.UserSelectionDialogResult
import android.os.IBinder
import android.os.Bundle
import android.os.ResultReceiver
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
index f8ffc9e26799..fa975aabc867 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt
@@ -18,8 +18,8 @@ package com.android.credentialmanager
import android.app.Activity
import android.content.Intent
-import android.credentials.ui.BaseDialogResult
-import android.credentials.ui.RequestInfo
+import android.credentials.selection.BaseDialogResult
+import android.credentials.selection.RequestInfo
import android.net.Uri
import android.os.Bundle
import android.os.ResultReceiver
@@ -213,7 +213,7 @@ class CredentialSelectorActivity : ComponentActivity() {
private fun onInitializationError(e: Exception, intent: Intent) {
Log.e(Constants.LOG_TAG, "Failed to show the credential selector; closing the activity", e)
val resultReceiver = intent.getParcelableExtra(
- android.credentials.ui.Constants.EXTRA_RESULT_RECEIVER,
+ android.credentials.selection.Constants.EXTRA_RESULT_RECEIVER,
ResultReceiver::class.java
)
val requestInfo = intent.extras?.getParcelable(
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
index fc3970de2cee..64595e2642f5 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
@@ -20,11 +20,11 @@ import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
-import android.credentials.ui.CreateCredentialProviderData
-import android.credentials.ui.DisabledProviderData
-import android.credentials.ui.Entry
-import android.credentials.ui.GetCredentialProviderData
-import android.credentials.ui.RequestInfo
+import android.credentials.selection.CreateCredentialProviderData
+import android.credentials.selection.DisabledProviderData
+import android.credentials.selection.Entry
+import android.credentials.selection.GetCredentialProviderData
+import android.credentials.selection.RequestInfo
import android.graphics.drawable.Drawable
import android.text.TextUtils
import android.util.Log
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt
index 985f3228f402..1f1d236f2108 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/autofill/CredentialAutofillService.kt
@@ -25,8 +25,8 @@ import android.credentials.GetCredentialRequest
import android.credentials.GetCandidateCredentialsResponse
import android.credentials.GetCandidateCredentialsException
import android.credentials.CredentialOption
+import android.credentials.selection.GetCredentialProviderData
import android.graphics.drawable.Icon
-import android.credentials.ui.GetCredentialProviderData
import android.os.Bundle
import android.os.CancellationSignal
import android.os.OutcomeReceiver
@@ -51,7 +51,6 @@ import android.widget.inline.InlinePresentationSpec
import android.credentials.CredentialManager
import android.widget.RemoteViews
import androidx.autofill.inline.v1.InlineSuggestionUi
-import androidx.core.content.ContextCompat
import androidx.credentials.provider.CustomCredentialEntry
import androidx.credentials.provider.PasswordCredentialEntry
import androidx.credentials.provider.PublicKeyCredentialEntry
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/DialogType.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/DialogType.kt
index f40dc7e54870..22a5ec17867a 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/common/DialogType.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/common/DialogType.kt
@@ -16,7 +16,7 @@
package com.android.credentialmanager.common
-import android.credentials.ui.RequestInfo
+import android.credentials.selection.RequestInfo
enum class DialogType {
CREATE_CREDENTIAL,
diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/password/SinglePasswordScreenViewModel.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/password/SinglePasswordScreenViewModel.kt
index 4f9fc46e0fce..c9c66b4a7271 100644
--- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/password/SinglePasswordScreenViewModel.kt
+++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/password/SinglePasswordScreenViewModel.kt
@@ -17,8 +17,8 @@
package com.android.credentialmanager.ui.screens.single.password
import android.content.Intent
-import android.credentials.ui.ProviderPendingIntentResponse
-import android.credentials.ui.UserSelectionDialogResult
+import android.credentials.selection.ProviderPendingIntentResponse
+import android.credentials.selection.UserSelectionDialogResult
import androidx.activity.result.IntentSenderRequest
import androidx.annotation.MainThread
import androidx.lifecycle.ViewModel
diff --git a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java
index db985fd16749..b1349ea92a4f 100644
--- a/services/credentials/java/com/android/server/credentials/ClearRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/ClearRequestSession.java
@@ -23,8 +23,8 @@ import android.credentials.ClearCredentialStateException;
import android.credentials.ClearCredentialStateRequest;
import android.credentials.CredentialProviderInfo;
import android.credentials.IClearCredentialStateCallback;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.RequestInfo;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.RequestInfo;
import android.os.CancellationSignal;
import android.os.RemoteException;
import android.service.credentials.CallingAppInfo;
diff --git a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
index b24accbe3231..3dcf42d80d60 100644
--- a/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/CreateRequestSession.java
@@ -27,8 +27,8 @@ import android.credentials.CreateCredentialResponse;
import android.credentials.CredentialManager;
import android.credentials.CredentialProviderInfo;
import android.credentials.ICreateCredentialCallback;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.RequestInfo;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.RequestInfo;
import android.os.CancellationSignal;
import android.os.RemoteException;
import android.service.credentials.CallingAppInfo;
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
index f092dccbcfd1..4203576ac521 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerUi.java
@@ -22,11 +22,11 @@ import android.content.Context;
import android.content.Intent;
import android.credentials.CredentialManager;
import android.credentials.CredentialProviderInfo;
-import android.credentials.ui.DisabledProviderData;
-import android.credentials.ui.IntentFactory;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.RequestInfo;
-import android.credentials.ui.UserSelectionDialogResult;
+import android.credentials.selection.DisabledProviderData;
+import android.credentials.selection.IntentFactory;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.RequestInfo;
+import android.credentials.selection.UserSelectionDialogResult;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
diff --git a/services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java b/services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java
index 25281ba89960..7e709fec128b 100644
--- a/services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/GetCandidateRequestSession.java
@@ -26,9 +26,9 @@ import android.credentials.GetCandidateCredentialsResponse;
import android.credentials.GetCredentialRequest;
import android.credentials.GetCredentialResponse;
import android.credentials.IGetCandidateCredentialsCallback;
-import android.credentials.ui.GetCredentialProviderData;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.RequestInfo;
+import android.credentials.selection.GetCredentialProviderData;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.RequestInfo;
import android.os.CancellationSignal;
import android.os.IBinder;
import android.os.RemoteException;
diff --git a/services/credentials/java/com/android/server/credentials/GetRequestSession.java b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
index 49ea19a6f098..b33f531afdac 100644
--- a/services/credentials/java/com/android/server/credentials/GetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/GetRequestSession.java
@@ -26,8 +26,8 @@ import android.credentials.GetCredentialException;
import android.credentials.GetCredentialRequest;
import android.credentials.GetCredentialResponse;
import android.credentials.IGetCredentialCallback;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.RequestInfo;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.RequestInfo;
import android.os.Binder;
import android.os.CancellationSignal;
import android.os.RemoteException;
diff --git a/services/credentials/java/com/android/server/credentials/PendingIntentResultHandler.java b/services/credentials/java/com/android/server/credentials/PendingIntentResultHandler.java
index efb394d29826..21ac9e44de65 100644
--- a/services/credentials/java/com/android/server/credentials/PendingIntentResultHandler.java
+++ b/services/credentials/java/com/android/server/credentials/PendingIntentResultHandler.java
@@ -22,7 +22,7 @@ import android.credentials.CreateCredentialException;
import android.credentials.CreateCredentialResponse;
import android.credentials.GetCredentialException;
import android.credentials.GetCredentialResponse;
-import android.credentials.ui.ProviderPendingIntentResponse;
+import android.credentials.selection.ProviderPendingIntentResponse;
import android.service.credentials.BeginGetCredentialResponse;
import android.service.credentials.CredentialProviderService;
diff --git a/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java b/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
index fbfc9caf0205..30af56749e05 100644
--- a/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/PrepareGetRequestSession.java
@@ -26,9 +26,9 @@ import android.credentials.GetCredentialRequest;
import android.credentials.IGetCredentialCallback;
import android.credentials.IPrepareGetCredentialCallback;
import android.credentials.PrepareGetCredentialResponseInternal;
-import android.credentials.ui.GetCredentialProviderData;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.RequestInfo;
+import android.credentials.selection.GetCredentialProviderData;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.RequestInfo;
import android.os.CancellationSignal;
import android.os.RemoteException;
import android.service.credentials.CallingAppInfo;
diff --git a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
index d4b88001111e..6a1b1db756b5 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderClearSession.java
@@ -21,8 +21,8 @@ import android.annotation.UserIdInt;
import android.content.Context;
import android.credentials.ClearCredentialStateException;
import android.credentials.CredentialProviderInfo;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.ProviderPendingIntentResponse;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.ProviderPendingIntentResponse;
import android.os.ICancellationSignal;
import android.service.credentials.CallingAppInfo;
import android.service.credentials.ClearCredentialStateRequest;
diff --git a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
index 6f79852df02f..6361aeb4f0d7 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderCreateSession.java
@@ -25,9 +25,9 @@ import android.content.Intent;
import android.credentials.CreateCredentialException;
import android.credentials.CreateCredentialResponse;
import android.credentials.CredentialProviderInfo;
-import android.credentials.ui.CreateCredentialProviderData;
-import android.credentials.ui.Entry;
-import android.credentials.ui.ProviderPendingIntentResponse;
+import android.credentials.selection.CreateCredentialProviderData;
+import android.credentials.selection.Entry;
+import android.credentials.selection.ProviderPendingIntentResponse;
import android.os.Bundle;
import android.os.ICancellationSignal;
import android.service.credentials.BeginCreateCredentialRequest;
diff --git a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
index 7bd1cc4ca6c8..fcaef9ffb11b 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderGetSession.java
@@ -26,10 +26,10 @@ import android.credentials.CredentialOption;
import android.credentials.CredentialProviderInfo;
import android.credentials.GetCredentialException;
import android.credentials.GetCredentialResponse;
-import android.credentials.ui.AuthenticationEntry;
-import android.credentials.ui.Entry;
-import android.credentials.ui.GetCredentialProviderData;
-import android.credentials.ui.ProviderPendingIntentResponse;
+import android.credentials.selection.AuthenticationEntry;
+import android.credentials.selection.Entry;
+import android.credentials.selection.GetCredentialProviderData;
+import android.credentials.selection.ProviderPendingIntentResponse;
import android.os.ICancellationSignal;
import android.service.autofill.Flags;
import android.service.credentials.Action;
diff --git a/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java b/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java
index bafa4a56b28a..f162916690fd 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderRegistryGetSession.java
@@ -25,10 +25,10 @@ import android.content.Intent;
import android.credentials.CredentialOption;
import android.credentials.GetCredentialException;
import android.credentials.GetCredentialResponse;
-import android.credentials.ui.Entry;
-import android.credentials.ui.GetCredentialProviderData;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.ProviderPendingIntentResponse;
+import android.credentials.selection.Entry;
+import android.credentials.selection.GetCredentialProviderData;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.ProviderPendingIntentResponse;
import android.os.ICancellationSignal;
import android.service.credentials.CallingAppInfo;
import android.service.credentials.CredentialEntry;
diff --git a/services/credentials/java/com/android/server/credentials/ProviderSession.java b/services/credentials/java/com/android/server/credentials/ProviderSession.java
index f2055d0595be..c16e2327abfb 100644
--- a/services/credentials/java/com/android/server/credentials/ProviderSession.java
+++ b/services/credentials/java/com/android/server/credentials/ProviderSession.java
@@ -25,8 +25,8 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.credentials.Credential;
import android.credentials.CredentialProviderInfo;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.ProviderPendingIntentResponse;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.ProviderPendingIntentResponse;
import android.os.ICancellationSignal;
import android.os.RemoteException;
import android.util.Slog;
diff --git a/services/credentials/java/com/android/server/credentials/RequestSession.java b/services/credentials/java/com/android/server/credentials/RequestSession.java
index 67c52e6e4719..bf7df86890de 100644
--- a/services/credentials/java/com/android/server/credentials/RequestSession.java
+++ b/services/credentials/java/com/android/server/credentials/RequestSession.java
@@ -24,8 +24,8 @@ import android.content.Context;
import android.content.Intent;
import android.credentials.CredentialProviderInfo;
import android.credentials.flags.Flags;
-import android.credentials.ui.ProviderData;
-import android.credentials.ui.UserSelectionDialogResult;
+import android.credentials.selection.ProviderData;
+import android.credentials.selection.UserSelectionDialogResult;
import android.os.Binder;
import android.os.CancellationSignal;
import android.os.Handler;
diff --git a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
index d82834928999..23db11f3c9d1 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/ApiName.java
@@ -16,10 +16,10 @@
package com.android.server.credentials.metrics;
-import static android.credentials.ui.RequestInfo.TYPE_CREATE;
-import static android.credentials.ui.RequestInfo.TYPE_GET;
-import static android.credentials.ui.RequestInfo.TYPE_GET_VIA_REGISTRY;
-import static android.credentials.ui.RequestInfo.TYPE_UNDEFINED;
+import static android.credentials.selection.RequestInfo.TYPE_CREATE;
+import static android.credentials.selection.RequestInfo.TYPE_GET;
+import static android.credentials.selection.RequestInfo.TYPE_GET_VIA_REGISTRY;
+import static android.credentials.selection.RequestInfo.TYPE_UNDEFINED;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CLEAR_CREDENTIAL;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_CREATE_CREDENTIAL;
@@ -32,7 +32,7 @@ import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INI
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_UNKNOWN;
import static com.android.internal.util.FrameworkStatsLog.CREDENTIAL_MANAGER_INITIAL_PHASE_REPORTED__API_NAME__API_NAME_UNREGISTER_CREDENTIAL_DESCRIPTION;
-import android.credentials.ui.RequestInfo;
+import android.credentials.selection.RequestInfo;
import android.util.Slog;
import java.util.AbstractMap;
diff --git a/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java b/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
index 83b57c4f78c2..8adcfbcb974c 100644
--- a/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
+++ b/services/credentials/java/com/android/server/credentials/metrics/RequestSessionMetric.java
@@ -33,7 +33,7 @@ import android.annotation.NonNull;
import android.content.ComponentName;
import android.credentials.CreateCredentialRequest;
import android.credentials.GetCredentialRequest;
-import android.credentials.ui.UserSelectionDialogResult;
+import android.credentials.selection.UserSelectionDialogResult;
import android.util.Slog;
import com.android.server.credentials.MetricUtilities;
diff --git a/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java b/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java
index 6bc0fbf3101c..0f3f27aa2896 100644
--- a/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java
+++ b/services/tests/servicestests/src/com/android/server/credentials/ProviderRegistryGetSessionTest.java
@@ -39,8 +39,8 @@ import android.credentials.Credential;
import android.credentials.CredentialOption;
import android.credentials.GetCredentialException;
import android.credentials.GetCredentialResponse;
-import android.credentials.ui.GetCredentialProviderData;
-import android.credentials.ui.ProviderPendingIntentResponse;
+import android.credentials.selection.GetCredentialProviderData;
+import android.credentials.selection.ProviderPendingIntentResponse;
import android.net.Uri;
import android.os.Bundle;
import android.service.credentials.CallingAppInfo;