Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f0e116d authored by Helen Qin's avatar Helen Qin Committed by Android (Google) Code Review
Browse files

Merge "Handle finishing up a dialog."

parents ec8ee5a7 a85ae625
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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
@@ -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;
@@ -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
@@ -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);
@@ -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);
+17 −2
Original line number Diff line number Diff line
@@ -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;
    }

@@ -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);
    }

+29 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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(
@@ -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 {
+22 −4
Original line number Diff line number Diff line
@@ -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
@@ -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")
@@ -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()
    }
  }
}
+2 −2
Original line number Diff line number Diff line
@@ -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)
@@ -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