Loading core/java/android/credentials/ui/ProviderData.java +9 −9 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ public class ProviderData implements Parcelable { "android.credentials.ui.extra.PROVIDER_DATA_LIST"; @NonNull private final String mPackageName; private final String mProviderId; @NonNull private final List<Entry> mCredentialEntries; @NonNull Loading @@ -50,11 +50,11 @@ public class ProviderData implements Parcelable { private final Entry mAuthenticationEntry; public ProviderData( @NonNull String packageName, @NonNull String providerId, @NonNull List<Entry> credentialEntries, @NonNull List<Entry> actionChips, @Nullable Entry authenticationEntry) { mPackageName = packageName; mProviderId = providerId; mCredentialEntries = credentialEntries; mActionChips = actionChips; mAuthenticationEntry = authenticationEntry; Loading @@ -62,8 +62,8 @@ public class ProviderData implements Parcelable { /** Returns the provider package name. */ @NonNull public String getPackageName() { return mPackageName; public String getProviderId() { return mProviderId; } @NonNull Loading @@ -82,9 +82,9 @@ public class ProviderData implements Parcelable { } protected ProviderData(@NonNull Parcel in) { String packageName = in.readString8(); mPackageName = packageName; AnnotationValidations.validate(NonNull.class, null, mPackageName); String providerId = in.readString8(); mProviderId = providerId; AnnotationValidations.validate(NonNull.class, null, mProviderId); List<Entry> credentialEntries = new ArrayList<>(); in.readTypedList(credentialEntries, Entry.CREATOR); Loading @@ -102,7 +102,7 @@ public class ProviderData implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString8(mPackageName); dest.writeString8(mProviderId); dest.writeTypedList(mCredentialEntries); dest.writeTypedList(mActionChips); dest.writeTypedObject(mAuthenticationEntry, flags); Loading core/java/android/credentials/ui/UserSelectionResult.java +17 −2 Original line number Diff line number Diff line Loading @@ -43,11 +43,16 @@ public class UserSelectionResult implements Parcelable { @NonNull private final IBinder mRequestToken; @NonNull private final String mProviderId; // TODO: consider switching to string or other types, depending on the service implementation. private final int mEntryId; public UserSelectionResult(@NonNull IBinder requestToken, int entryId) { public UserSelectionResult(@NonNull IBinder requestToken, @NonNull String providerId, int entryId) { mRequestToken = requestToken; mProviderId = providerId; mEntryId = entryId; } Loading @@ -57,23 +62,33 @@ public class UserSelectionResult implements Parcelable { return mRequestToken; } /** Returns provider package name whose entry was selected by the user. */ @NonNull public String getProviderId() { return mProviderId; } /** Returns the id of the visual entry that the user selected. */ public int geEntryId() { public int getEntryId() { return mEntryId; } protected UserSelectionResult(@NonNull Parcel in) { IBinder requestToken = in.readStrongBinder(); String providerId = in.readString8(); int entryId = in.readInt(); mRequestToken = requestToken; AnnotationValidations.validate(NonNull.class, null, mRequestToken); mProviderId = providerId; AnnotationValidations.validate(NonNull.class, null, mProviderId); mEntryId = entryId; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeStrongBinder(mRequestToken); dest.writeString8(mProviderId); dest.writeInt(mEntryId); } Loading packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +29 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.credentialmanager import android.app.Activity import android.app.slice.Slice import android.app.slice.SliceSpec import android.content.Context Loading @@ -23,8 +24,11 @@ import android.content.Intent import android.credentials.ui.Entry import android.credentials.ui.ProviderData import android.credentials.ui.RequestInfo import android.credentials.ui.UserSelectionResult import android.graphics.drawable.Icon import android.os.Binder import android.os.Bundle import android.os.ResultReceiver import com.android.credentialmanager.createflow.CreatePasskeyUiState import com.android.credentialmanager.createflow.CreateScreenState import com.android.credentialmanager.getflow.GetCredentialUiState Loading @@ -37,6 +41,8 @@ class CredentialManagerRepo( ) { private val requestInfo: RequestInfo private val providerList: List<ProviderData> // TODO: require non-null. val resultReceiver: ResultReceiver? init { requestInfo = intent.extras?.getParcelable( Loading @@ -52,6 +58,29 @@ class CredentialManagerRepo( ProviderData.EXTRA_PROVIDER_DATA_LIST, ProviderData::class.java ) ?: testProviderList() resultReceiver = intent.getParcelableExtra( RequestInfo.EXTRA_RESULT_RECEIVER, ResultReceiver::class.java ) } fun onCancel() { resultReceiver?.send(Activity.RESULT_CANCELED, null) } fun onOptionSelected(providerPackageName: String, entryId: Int) { val userSelectionResult = UserSelectionResult( requestInfo.token, providerPackageName, entryId ) val resultData = Bundle() resultData.putParcelable( UserSelectionResult.EXTRA_USER_SELECTION_RESULT, userSelectionResult ) resultReceiver?.send(Activity.RESULT_OK, resultData) } fun getCredentialInitialUiState(): GetCredentialUiState { Loading packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt +22 −4 Original line number Diff line number Diff line Loading @@ -23,9 +23,15 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.runtime.Composable import androidx.lifecycle.Observer import androidx.lifecycle.viewmodel.compose.viewModel import com.android.credentialmanager.common.DialogType import com.android.credentialmanager.common.DialogResult import com.android.credentialmanager.common.ResultState import com.android.credentialmanager.createflow.CreatePasskeyScreen import com.android.credentialmanager.createflow.CreatePasskeyViewModel import com.android.credentialmanager.getflow.GetCredentialScreen import com.android.credentialmanager.getflow.GetCredentialViewModel import com.android.credentialmanager.ui.theme.CredentialSelectorTheme @ExperimentalMaterialApi Loading Loading @@ -57,10 +63,20 @@ class CredentialSelectorActivity : ComponentActivity() { val dialogType = DialogType.toDialogType(operationType) when (dialogType) { DialogType.CREATE_PASSKEY -> { CreatePasskeyScreen(cancelActivity = onCancel) val viewModel: CreatePasskeyViewModel = viewModel() viewModel.observeDialogResult().observe( this@CredentialSelectorActivity, onCancel ) CreatePasskeyScreen(viewModel = viewModel) } DialogType.GET_CREDENTIALS -> { GetCredentialScreen(cancelActivity = onCancel) val viewModel: GetCredentialViewModel = viewModel() viewModel.observeDialogResult().observe( this@CredentialSelectorActivity, onCancel ) GetCredentialScreen(viewModel = viewModel) } else -> { Log.w("AccountSelector", "Unknown type, not rendering any UI") Loading @@ -69,7 +85,9 @@ class CredentialSelectorActivity : ComponentActivity() { } } private val onCancel = { private val onCancel = Observer<DialogResult> { if (it.resultState == ResultState.COMPLETE || it.resultState == ResultState.CANCELED) { this@CredentialSelectorActivity.finish() } } } packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt +2 −2 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ class GetFlowUtils { ProviderInfo( // TODO: replace to extract from the service data structure when available icon = context.getDrawable(R.drawable.ic_passkey)!!, name = it.packageName, name = it.providerId, appDomainName = "tribank.us", credentialTypeIcon = context.getDrawable(R.drawable.ic_passkey)!!, credentialOptions = toCredentialOptionInfoList(it.credentialEntries, context) Loading Loading @@ -78,7 +78,7 @@ class CreateFlowUtils { com.android.credentialmanager.createflow.ProviderInfo( // TODO: replace to extract from the service data structure when available icon = context.getDrawable(R.drawable.ic_passkey)!!, name = it.packageName, name = it.providerId, appDomainName = "tribank.us", credentialTypeIcon = context.getDrawable(R.drawable.ic_passkey)!!, createOptions = toCreationOptionInfoList(it.credentialEntries, context), Loading Loading
core/java/android/credentials/ui/ProviderData.java +9 −9 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ public class ProviderData implements Parcelable { "android.credentials.ui.extra.PROVIDER_DATA_LIST"; @NonNull private final String mPackageName; private final String mProviderId; @NonNull private final List<Entry> mCredentialEntries; @NonNull Loading @@ -50,11 +50,11 @@ public class ProviderData implements Parcelable { private final Entry mAuthenticationEntry; public ProviderData( @NonNull String packageName, @NonNull String providerId, @NonNull List<Entry> credentialEntries, @NonNull List<Entry> actionChips, @Nullable Entry authenticationEntry) { mPackageName = packageName; mProviderId = providerId; mCredentialEntries = credentialEntries; mActionChips = actionChips; mAuthenticationEntry = authenticationEntry; Loading @@ -62,8 +62,8 @@ public class ProviderData implements Parcelable { /** Returns the provider package name. */ @NonNull public String getPackageName() { return mPackageName; public String getProviderId() { return mProviderId; } @NonNull Loading @@ -82,9 +82,9 @@ public class ProviderData implements Parcelable { } protected ProviderData(@NonNull Parcel in) { String packageName = in.readString8(); mPackageName = packageName; AnnotationValidations.validate(NonNull.class, null, mPackageName); String providerId = in.readString8(); mProviderId = providerId; AnnotationValidations.validate(NonNull.class, null, mProviderId); List<Entry> credentialEntries = new ArrayList<>(); in.readTypedList(credentialEntries, Entry.CREATOR); Loading @@ -102,7 +102,7 @@ public class ProviderData implements Parcelable { @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString8(mPackageName); dest.writeString8(mProviderId); dest.writeTypedList(mCredentialEntries); dest.writeTypedList(mActionChips); dest.writeTypedObject(mAuthenticationEntry, flags); Loading
core/java/android/credentials/ui/UserSelectionResult.java +17 −2 Original line number Diff line number Diff line Loading @@ -43,11 +43,16 @@ public class UserSelectionResult implements Parcelable { @NonNull private final IBinder mRequestToken; @NonNull private final String mProviderId; // TODO: consider switching to string or other types, depending on the service implementation. private final int mEntryId; public UserSelectionResult(@NonNull IBinder requestToken, int entryId) { public UserSelectionResult(@NonNull IBinder requestToken, @NonNull String providerId, int entryId) { mRequestToken = requestToken; mProviderId = providerId; mEntryId = entryId; } Loading @@ -57,23 +62,33 @@ public class UserSelectionResult implements Parcelable { return mRequestToken; } /** Returns provider package name whose entry was selected by the user. */ @NonNull public String getProviderId() { return mProviderId; } /** Returns the id of the visual entry that the user selected. */ public int geEntryId() { public int getEntryId() { return mEntryId; } protected UserSelectionResult(@NonNull Parcel in) { IBinder requestToken = in.readStrongBinder(); String providerId = in.readString8(); int entryId = in.readInt(); mRequestToken = requestToken; AnnotationValidations.validate(NonNull.class, null, mRequestToken); mProviderId = providerId; AnnotationValidations.validate(NonNull.class, null, mProviderId); mEntryId = entryId; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeStrongBinder(mRequestToken); dest.writeString8(mProviderId); dest.writeInt(mEntryId); } Loading
packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +29 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.credentialmanager import android.app.Activity import android.app.slice.Slice import android.app.slice.SliceSpec import android.content.Context Loading @@ -23,8 +24,11 @@ import android.content.Intent import android.credentials.ui.Entry import android.credentials.ui.ProviderData import android.credentials.ui.RequestInfo import android.credentials.ui.UserSelectionResult import android.graphics.drawable.Icon import android.os.Binder import android.os.Bundle import android.os.ResultReceiver import com.android.credentialmanager.createflow.CreatePasskeyUiState import com.android.credentialmanager.createflow.CreateScreenState import com.android.credentialmanager.getflow.GetCredentialUiState Loading @@ -37,6 +41,8 @@ class CredentialManagerRepo( ) { private val requestInfo: RequestInfo private val providerList: List<ProviderData> // TODO: require non-null. val resultReceiver: ResultReceiver? init { requestInfo = intent.extras?.getParcelable( Loading @@ -52,6 +58,29 @@ class CredentialManagerRepo( ProviderData.EXTRA_PROVIDER_DATA_LIST, ProviderData::class.java ) ?: testProviderList() resultReceiver = intent.getParcelableExtra( RequestInfo.EXTRA_RESULT_RECEIVER, ResultReceiver::class.java ) } fun onCancel() { resultReceiver?.send(Activity.RESULT_CANCELED, null) } fun onOptionSelected(providerPackageName: String, entryId: Int) { val userSelectionResult = UserSelectionResult( requestInfo.token, providerPackageName, entryId ) val resultData = Bundle() resultData.putParcelable( UserSelectionResult.EXTRA_USER_SELECTION_RESULT, userSelectionResult ) resultReceiver?.send(Activity.RESULT_OK, resultData) } fun getCredentialInitialUiState(): GetCredentialUiState { Loading
packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt +22 −4 Original line number Diff line number Diff line Loading @@ -23,9 +23,15 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.runtime.Composable import androidx.lifecycle.Observer import androidx.lifecycle.viewmodel.compose.viewModel import com.android.credentialmanager.common.DialogType import com.android.credentialmanager.common.DialogResult import com.android.credentialmanager.common.ResultState import com.android.credentialmanager.createflow.CreatePasskeyScreen import com.android.credentialmanager.createflow.CreatePasskeyViewModel import com.android.credentialmanager.getflow.GetCredentialScreen import com.android.credentialmanager.getflow.GetCredentialViewModel import com.android.credentialmanager.ui.theme.CredentialSelectorTheme @ExperimentalMaterialApi Loading Loading @@ -57,10 +63,20 @@ class CredentialSelectorActivity : ComponentActivity() { val dialogType = DialogType.toDialogType(operationType) when (dialogType) { DialogType.CREATE_PASSKEY -> { CreatePasskeyScreen(cancelActivity = onCancel) val viewModel: CreatePasskeyViewModel = viewModel() viewModel.observeDialogResult().observe( this@CredentialSelectorActivity, onCancel ) CreatePasskeyScreen(viewModel = viewModel) } DialogType.GET_CREDENTIALS -> { GetCredentialScreen(cancelActivity = onCancel) val viewModel: GetCredentialViewModel = viewModel() viewModel.observeDialogResult().observe( this@CredentialSelectorActivity, onCancel ) GetCredentialScreen(viewModel = viewModel) } else -> { Log.w("AccountSelector", "Unknown type, not rendering any UI") Loading @@ -69,7 +85,9 @@ class CredentialSelectorActivity : ComponentActivity() { } } private val onCancel = { private val onCancel = Observer<DialogResult> { if (it.resultState == ResultState.COMPLETE || it.resultState == ResultState.CANCELED) { this@CredentialSelectorActivity.finish() } } }
packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt +2 −2 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ class GetFlowUtils { ProviderInfo( // TODO: replace to extract from the service data structure when available icon = context.getDrawable(R.drawable.ic_passkey)!!, name = it.packageName, name = it.providerId, appDomainName = "tribank.us", credentialTypeIcon = context.getDrawable(R.drawable.ic_passkey)!!, credentialOptions = toCredentialOptionInfoList(it.credentialEntries, context) Loading Loading @@ -78,7 +78,7 @@ class CreateFlowUtils { com.android.credentialmanager.createflow.ProviderInfo( // TODO: replace to extract from the service data structure when available icon = context.getDrawable(R.drawable.ic_passkey)!!, name = it.packageName, name = it.providerId, appDomainName = "tribank.us", credentialTypeIcon = context.getDrawable(R.drawable.ic_passkey)!!, createOptions = toCreationOptionInfoList(it.credentialEntries, context), Loading