summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/current.txt9
-rw-r--r--core/java/android/credentials/ClearCredentialStateRequest.aidl19
-rw-r--r--core/java/android/credentials/ClearCredentialStateRequest.java85
-rw-r--r--core/java/android/credentials/CredentialManager.java28
-rw-r--r--core/java/android/credentials/IClearCredentialStateCallback.aidl (renamed from core/java/android/credentials/IClearCredentialSessionCallback.aidl)4
-rw-r--r--core/java/android/credentials/ICredentialManager.aidl5
-rw-r--r--services/credentials/java/com/android/server/credentials/CredentialManagerService.java7
7 files changed, 139 insertions, 18 deletions
diff --git a/core/api/current.txt b/core/api/current.txt
index fc319ce6891e..d4c461cd9384 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -12982,6 +12982,14 @@ package android.content.res.loader {
package android.credentials {
+ public final class ClearCredentialStateRequest implements android.os.Parcelable {
+ ctor public ClearCredentialStateRequest(@NonNull android.os.Bundle);
+ method public int describeContents();
+ method @NonNull public android.os.Bundle getData();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.credentials.ClearCredentialStateRequest> CREATOR;
+ }
+
public final class CreateCredentialRequest implements android.os.Parcelable {
ctor public CreateCredentialRequest(@NonNull String, @NonNull android.os.Bundle);
method public int describeContents();
@@ -13009,6 +13017,7 @@ package android.credentials {
}
public final class CredentialManager {
+ method public void clearCredentialState(@NonNull android.credentials.ClearCredentialStateRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Void,android.credentials.CredentialManagerException>);
method public void executeCreateCredential(@NonNull android.credentials.CreateCredentialRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.credentials.CreateCredentialResponse,android.credentials.CredentialManagerException>);
method public void executeGetCredential(@NonNull android.credentials.GetCredentialRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.credentials.GetCredentialResponse,android.credentials.CredentialManagerException>);
}
diff --git a/core/java/android/credentials/ClearCredentialStateRequest.aidl b/core/java/android/credentials/ClearCredentialStateRequest.aidl
new file mode 100644
index 000000000000..2679ee45c313
--- /dev/null
+++ b/core/java/android/credentials/ClearCredentialStateRequest.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.credentials;
+
+parcelable ClearCredentialStateRequest; \ No newline at end of file
diff --git a/core/java/android/credentials/ClearCredentialStateRequest.java b/core/java/android/credentials/ClearCredentialStateRequest.java
new file mode 100644
index 000000000000..33afbed73815
--- /dev/null
+++ b/core/java/android/credentials/ClearCredentialStateRequest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.credentials;
+
+import static java.util.Objects.requireNonNull;
+
+import android.annotation.NonNull;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.AnnotationValidations;
+
+/**
+ * A request class for clearing a user's credential state from the credential providers.
+ */
+public final class ClearCredentialStateRequest implements Parcelable {
+
+ /** The request data. */
+ @NonNull
+ private final Bundle mData;
+
+ /** Returns the request data. */
+ @NonNull
+ public Bundle getData() {
+ return mData;
+ }
+
+ @Override
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ dest.writeBundle(mData);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public String toString() {
+ return "ClearCredentialStateRequest {data=" + mData + "}";
+ }
+
+ /**
+ * Constructs a {@link ClearCredentialStateRequest}.
+ *
+ * @param data the request data
+ */
+ public ClearCredentialStateRequest(@NonNull Bundle data) {
+ mData = requireNonNull(data, "data must not be null");
+ }
+
+ private ClearCredentialStateRequest(@NonNull Parcel in) {
+ Bundle data = in.readBundle();
+ mData = data;
+ AnnotationValidations.validate(NonNull.class, null, mData);
+ }
+
+ public static final @NonNull Creator<ClearCredentialStateRequest> CREATOR =
+ new Creator<ClearCredentialStateRequest>() {
+ @Override
+ public ClearCredentialStateRequest[] newArray(int size) {
+ return new ClearCredentialStateRequest[size];
+ }
+
+ @Override
+ public ClearCredentialStateRequest createFromParcel(@NonNull Parcel in) {
+ return new ClearCredentialStateRequest(in);
+ }
+ };
+}
diff --git a/core/java/android/credentials/CredentialManager.java b/core/java/android/credentials/CredentialManager.java
index 04d57ad8993f..f9973a24b35f 100644
--- a/core/java/android/credentials/CredentialManager.java
+++ b/core/java/android/credentials/CredentialManager.java
@@ -142,18 +142,24 @@ public final class CredentialManager {
}
/**
- * Clears the current user credential session from all credential providers.
+ * Clears the current user credential state from all credential providers.
*
- * <p>Usually invoked after your user signs out of your app so that they will not be
- * automatically signed in the next time.
+ * You should invoked this api after your user signs out of your app to notify all credential
+ * providers that any stored credential session for the given app should be cleared.
*
+ * A credential provider may have stored an active credential session and use it to limit
+ * sign-in options for future get-credential calls. For example, it may prioritize the active
+ * credential over any other available credential. When your user explicitly signs out of your
+ * app and in order to get the holistic sign-in options the next time, you should call this API
+ * to let the provider clear any stored credential session.
+ *
+ * @param request the request data
* @param cancellationSignal an optional signal that allows for cancelling this call
* @param executor the callback will take place on this {@link Executor}
* @param callback the callback invoked when the request succeeds or fails
- *
- * @hide
*/
- public void clearCredentialSession(
+ public void clearCredentialState(
+ @NonNull ClearCredentialStateRequest request,
@Nullable CancellationSignal cancellationSignal,
@CallbackExecutor @NonNull Executor executor,
@NonNull OutcomeReceiver<Void, CredentialManagerException> callback) {
@@ -167,8 +173,8 @@ public final class CredentialManager {
ICancellationSignal cancelRemote = null;
try {
- cancelRemote = mService.clearCredentialSession(
- new ClearCredentialSessionTransport(executor, callback),
+ cancelRemote = mService.clearCredentialState(request,
+ new ClearCredentialStateTransport(executor, callback),
mContext.getOpPackageName());
} catch (RemoteException e) {
e.rethrowFromSystemServer();
@@ -255,14 +261,14 @@ public final class CredentialManager {
}
}
- private static class ClearCredentialSessionTransport
- extends IClearCredentialSessionCallback.Stub {
+ private static class ClearCredentialStateTransport
+ extends IClearCredentialStateCallback.Stub {
// TODO: listen for cancellation to release callback.
private final Executor mExecutor;
private final OutcomeReceiver<Void, CredentialManagerException> mCallback;
- private ClearCredentialSessionTransport(Executor executor,
+ private ClearCredentialStateTransport(Executor executor,
OutcomeReceiver<Void, CredentialManagerException> callback) {
mExecutor = executor;
mCallback = callback;
diff --git a/core/java/android/credentials/IClearCredentialSessionCallback.aidl b/core/java/android/credentials/IClearCredentialStateCallback.aidl
index 903e7f56cd2e..f8b7ae440680 100644
--- a/core/java/android/credentials/IClearCredentialSessionCallback.aidl
+++ b/core/java/android/credentials/IClearCredentialStateCallback.aidl
@@ -17,11 +17,11 @@
package android.credentials;
/**
- * Listener for clearCredentialSession request.
+ * Listener for clearCredentialState request.
*
* @hide
*/
-interface IClearCredentialSessionCallback {
+interface IClearCredentialStateCallback {
oneway void onSuccess();
oneway void onError(int errorCode, String message);
} \ No newline at end of file
diff --git a/core/java/android/credentials/ICredentialManager.aidl b/core/java/android/credentials/ICredentialManager.aidl
index 35688d7fe113..c5497bdbdc0f 100644
--- a/core/java/android/credentials/ICredentialManager.aidl
+++ b/core/java/android/credentials/ICredentialManager.aidl
@@ -16,9 +16,10 @@
package android.credentials;
+import android.credentials.ClearCredentialStateRequest;
import android.credentials.CreateCredentialRequest;
import android.credentials.GetCredentialRequest;
-import android.credentials.IClearCredentialSessionCallback;
+import android.credentials.IClearCredentialStateCallback;
import android.credentials.ICreateCredentialCallback;
import android.credentials.IGetCredentialCallback;
import android.os.ICancellationSignal;
@@ -34,5 +35,5 @@ interface ICredentialManager {
@nullable ICancellationSignal executeCreateCredential(in CreateCredentialRequest request, in ICreateCredentialCallback callback, String callingPackage);
- @nullable ICancellationSignal clearCredentialSession(in IClearCredentialSessionCallback callback, String callingPackage);
+ @nullable ICancellationSignal clearCredentialState(in ClearCredentialStateRequest request, in IClearCredentialStateCallback callback, String callingPackage);
}
diff --git a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
index 374da1c8e7e3..30fcd06327dd 100644
--- a/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
+++ b/services/credentials/java/com/android/server/credentials/CredentialManagerService.java
@@ -22,10 +22,11 @@ import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.credentials.ClearCredentialStateRequest;
import android.credentials.CreateCredentialRequest;
import android.credentials.GetCredentialOption;
import android.credentials.GetCredentialRequest;
-import android.credentials.IClearCredentialSessionCallback;
+import android.credentials.IClearCredentialStateCallback;
import android.credentials.ICreateCredentialCallback;
import android.credentials.ICredentialManager;
import android.credentials.IGetCredentialCallback;
@@ -206,8 +207,8 @@ public final class CredentialManagerService extends
}
@Override
- public ICancellationSignal clearCredentialSession(
- IClearCredentialSessionCallback callback, String callingPackage) {
+ public ICancellationSignal clearCredentialState(ClearCredentialStateRequest request,
+ IClearCredentialStateCallback callback, String callingPackage) {
// TODO: implement.
Log.i(TAG, "clearCredentialSession");
ICancellationSignal cancelTransport = CancellationSignal.createTransport();