diff options
| author | 2021-02-14 21:50:26 +0000 | |
|---|---|---|
| committer | 2021-02-14 21:50:26 +0000 | |
| commit | 424cd636e2739f3abe01af4927b73ef0995155a4 (patch) | |
| tree | db758432053ae1c51dd833eb5f1491f451a1d26a | |
| parent | e5ba22ab36482eafa21e4efc3cb4b5dc94d419cd (diff) | |
| parent | acc78ee8ebb85721e84f4094fe78511613837eee (diff) | |
Merge "Add KeyChain.createManageCredentialsIntent" am: acc78ee8eb
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1588312
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I56b4c955a512f66a5d0ddf23f2edc140c067b86b
| -rw-r--r-- | core/api/current.txt | 1 | ||||
| -rw-r--r-- | keystore/java/android/security/Credentials.java | 2 | ||||
| -rw-r--r-- | keystore/java/android/security/KeyChain.java | 38 | 
3 files changed, 41 insertions, 0 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 4aba3537fe0d..f6164af55889 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -36030,6 +36030,7 @@ package android.security {      method public static void choosePrivateKeyAlias(@NonNull android.app.Activity, @NonNull android.security.KeyChainAliasCallback, @Nullable String[], @Nullable java.security.Principal[], @Nullable String, int, @Nullable String);      method public static void choosePrivateKeyAlias(@NonNull android.app.Activity, @NonNull android.security.KeyChainAliasCallback, @Nullable String[], @Nullable java.security.Principal[], @Nullable android.net.Uri, @Nullable String);      method @NonNull public static android.content.Intent createInstallIntent(); +    method @NonNull public static android.content.Intent createManageCredentialsIntent(@NonNull android.security.AppUriAuthenticationPolicy);      method @Nullable @WorkerThread public static java.security.cert.X509Certificate[] getCertificateChain(@NonNull android.content.Context, @NonNull String) throws java.lang.InterruptedException, android.security.KeyChainException;      method @Nullable @WorkerThread public static java.security.PrivateKey getPrivateKey(@NonNull android.content.Context, @NonNull String) throws java.lang.InterruptedException, android.security.KeyChainException;      method @Deprecated public static boolean isBoundKeyAlgorithm(@NonNull String); diff --git a/keystore/java/android/security/Credentials.java b/keystore/java/android/security/Credentials.java index 9e1fb54bedbe..ae9f866459d6 100644 --- a/keystore/java/android/security/Credentials.java +++ b/keystore/java/android/security/Credentials.java @@ -49,6 +49,8 @@ public class Credentials {      public static final String INSTALL_AS_USER_ACTION = "android.credentials.INSTALL_AS_USER"; +    public static final String ACTION_MANAGE_CREDENTIALS = "android.security.MANAGE_CREDENTIALS"; +      /**       * Key prefix for CA certificates.       * diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java index 6df62c0a0cba..63690d3c1567 100644 --- a/keystore/java/android/security/KeyChain.java +++ b/keystore/java/android/security/KeyChain.java @@ -15,6 +15,8 @@   */  package android.security; +import static android.security.Credentials.ACTION_MANAGE_CREDENTIALS; +  import android.annotation.NonNull;  import android.annotation.Nullable;  import android.annotation.SdkConstant; @@ -122,6 +124,11 @@ public final class KeyChain {      private static final String CERT_INSTALLER_PACKAGE = "com.android.certinstaller";      /** +     * Package name for Settings. +     */ +    private static final String SETTINGS_PACKAGE = "com.android.settings"; + +    /**       * Extra for use with {@link #ACTION_CHOOSER}       * @hide Also used by KeyChainActivity implementation       */ @@ -202,6 +209,20 @@ public final class KeyChain {      public static final String EXTRA_PKCS12 = "PKCS12";      /** +     * Extra used by {@link #createManageCredentialsIntent(AppUriAuthenticationPolicy)} to specify +     * the authentication policy of the credential management app. +     * +     * <p>The authentication policy declares which alias for a private key and certificate pair +     * should be used for authentication, given a list of apps and URIs. +     * +     * <p>The extra value should be a {@link AppUriAuthenticationPolicy}. +     * +     * @hide +     */ +    public static final String EXTRA_AUTHENTICATION_POLICY = +            "android.security.extra.AUTHENTICATION_POLICY"; + +    /**       * Broadcast Action: Indicates the trusted storage has changed. Sent when       * one of this happens:       * @@ -386,6 +407,23 @@ public final class KeyChain {      }      /** +     * Returns an {@code Intent} that should be used by an app to request to manage the user's +     * credentials. This is limited to unmanaged devices. The authentication policy must be +     * provided to be able to make this request successfully. +     * +     * @param policy The authentication policy determines which alias for a private key and +     *               certificate pair should be used for authentication. +     */ +    @NonNull +    public static Intent createManageCredentialsIntent(@NonNull AppUriAuthenticationPolicy policy) { +        Intent intent = new Intent(ACTION_MANAGE_CREDENTIALS); +        intent.setComponent(ComponentName.createRelative(SETTINGS_PACKAGE, +                ".security.RequestManageCredentials")); +        intent.putExtra(EXTRA_AUTHENTICATION_POLICY, policy); +        return intent; +    } + +    /**       * Launches an {@code Activity} for the user to select the alias       * for a private key and certificate pair for authentication. The       * selected alias or null will be returned via the  |