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

Commit 6075ec3c authored by Daniel Kim's avatar Daniel Kim Committed by Android (Google) Code Review
Browse files

Merge changes from topic "credman_metric_autofill" into main

* changes:
  Collect autofill ids in credman request
  Update MetricUtil apis with autofill apis
parents 57e3d19b c0910cc5
Loading
Loading
Loading
Loading
+25 −10
Original line number Diff line number Diff line
@@ -69,7 +69,8 @@ class CredentialAutofillService : AutofillService() {
    companion object {
        private const val TAG = "CredAutofill"

        private const val SESSION_ID_KEY = "session_id"
        private const val SESSION_ID_KEY = "autofill_session_id"
        private const val REQUEST_ID_KEY = "autofill_request_id"
        private const val CRED_HINT_PREFIX = "credential="
        private const val REQUEST_DATA_KEY = "requestData"
        private const val CANDIDATE_DATA_KEY = "candidateQueryData"
@@ -97,16 +98,23 @@ class CredentialAutofillService : AutofillService() {
        val callingPackage = structure.activityComponent.packageName
        Log.i(TAG, "onFillCredentialRequest called for $callingPackage")

        var sessionId = request.clientState?.getInt(SESSION_ID_KEY)

        Log.i(TAG, "Autofill sessionId: " + sessionId)
        if (sessionId == null) {
            Log.i(TAG, "Session Id not found")
            callback.onFailure("Session Id not found")
        val clientState = request.clientState
        if (clientState == null) {
            Log.i(TAG, "Client state not found")
            callback.onFailure("Client state not found")
            return
        }
        val sessionId = clientState.getInt(SESSION_ID_KEY)
        val requestId = clientState.getInt(REQUEST_ID_KEY)
        Log.i(TAG, "Autofill sessionId: $sessionId, autofill requestId: $requestId")
        if (sessionId == 0 || requestId == 0) {
            Log.i(TAG, "Session Id or request Id not found")
            callback.onFailure("Session Id or request Id not found")
            return
        }

        val getCredRequest: GetCredentialRequest? = getCredManRequest(structure)
        val getCredRequest: GetCredentialRequest? = getCredManRequest(structure, sessionId,
            requestId)
        if (getCredRequest == null) {
            Log.i(TAG, "No credential manager request found")
            callback.onFailure("No credential manager request found")
@@ -515,12 +523,19 @@ class CredentialAutofillService : AutofillService() {
        TODO("Not yet implemented")
    }

    private fun getCredManRequest(structure: AssistStructure): GetCredentialRequest? {
    private fun getCredManRequest(
        structure: AssistStructure,
        sessionId: Int,
        requestId: Int
    ): GetCredentialRequest? {
        val credentialOptions: MutableList<CredentialOption> = mutableListOf()
        traverseStructure(structure, credentialOptions)

        if (credentialOptions.isNotEmpty()) {
            return GetCredentialRequest.Builder(Bundle.EMPTY)
            val dataBundle = Bundle()
            dataBundle.putInt(SESSION_ID_KEY, sessionId)
            dataBundle.putInt(REQUEST_ID_KEY, requestId)
            return GetCredentialRequest.Builder(dataBundle)
                    .setCredentialOptions(credentialOptions)
                    .build()
        }
+7 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.autofill;

import static com.android.server.autofill.Session.REQUEST_ID_KEY;
import static com.android.server.autofill.Session.SESSION_ID_KEY;

import android.annotation.NonNull;
@@ -107,15 +108,16 @@ final class SecondaryProviderHandler implements RemoteFillService.FillServiceCal
        mLastFlag = flag;
        if (mRemoteFillService != null && mRemoteFillService.isCredentialAutofillService()) {
            Slog.v(TAG, "About to call CredAutofill service as secondary provider");
            addSessionIdToClientState(pendingFillRequest, pendingInlineSuggestionsRequest, id);
            addSessionIdAndRequestIdToClientState(pendingFillRequest,
                    pendingInlineSuggestionsRequest, id);
            mRemoteFillService.onFillCredentialRequest(pendingFillRequest, client);
        } else {
            mRemoteFillService.onFillRequest(pendingFillRequest);
        }
    }

    private FillRequest addSessionIdToClientState(FillRequest pendingFillRequest,
            InlineSuggestionsRequest pendingInlineSuggestionsRequest, int id) {
    private FillRequest addSessionIdAndRequestIdToClientState(FillRequest pendingFillRequest,
            InlineSuggestionsRequest pendingInlineSuggestionsRequest, int sessionId) {
        if (pendingFillRequest.getClientState() == null) {
            pendingFillRequest = new FillRequest(pendingFillRequest.getId(),
                    pendingFillRequest.getFillContexts(),
@@ -125,7 +127,8 @@ final class SecondaryProviderHandler implements RemoteFillService.FillServiceCal
                    pendingInlineSuggestionsRequest,
                    pendingFillRequest.getDelayedFillIntentSender());
        }
        pendingFillRequest.getClientState().putInt(SESSION_ID_KEY, id);
        pendingFillRequest.getClientState().putInt(SESSION_ID_KEY, sessionId);
        pendingFillRequest.getClientState().putInt(REQUEST_ID_KEY, pendingFillRequest.getId());
        return pendingFillRequest;
    }

+7 −5
Original line number Diff line number Diff line
@@ -234,7 +234,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
            new ComponentName("com.android.credentialmanager",
                    "com.android.credentialmanager.autofill.CredentialAutofillService");

    static final String SESSION_ID_KEY = "session_id";
    static final String SESSION_ID_KEY = "autofill_session_id";
    static final String REQUEST_ID_KEY = "autofill_request_id";

    final Object mLock;

@@ -729,7 +730,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
                        mPendingFillRequest.getFlags(), id, mClient);
            } else if (mRemoteFillService != null) {
                if (mIsPrimaryCredential) {
                    mPendingFillRequest = addSessionIdToClientState(mPendingFillRequest,
                    mPendingFillRequest = addSessionIdAndRequestIdToClientState(mPendingFillRequest,
                            mPendingInlineSuggestionsRequest, id);
                    mRemoteFillService.onFillCredentialRequest(mPendingFillRequest, mClient);
                } else {
@@ -877,8 +878,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
        }
    }

    private FillRequest addSessionIdToClientState(FillRequest pendingFillRequest,
            InlineSuggestionsRequest pendingInlineSuggestionsRequest, int id) {
    private FillRequest addSessionIdAndRequestIdToClientState(FillRequest pendingFillRequest,
            InlineSuggestionsRequest pendingInlineSuggestionsRequest, int sessionId) {
        if (pendingFillRequest.getClientState() == null) {
            pendingFillRequest = new FillRequest(pendingFillRequest.getId(),
                    pendingFillRequest.getFillContexts(),
@@ -888,7 +889,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
                    pendingInlineSuggestionsRequest,
                    pendingFillRequest.getDelayedFillIntentSender());
        }
        pendingFillRequest.getClientState().putInt(SESSION_ID_KEY, id);
        pendingFillRequest.getClientState().putInt(SESSION_ID_KEY, sessionId);
        pendingFillRequest.getClientState().putInt(REQUEST_ID_KEY, pendingFillRequest.getId());
        return pendingFillRequest;
    }

+9 −0
Original line number Diff line number Diff line
@@ -517,6 +517,8 @@ public final class CredentialManagerService
                                    .map(CredentialOption::getType)
                                    .collect(Collectors.toList()));

            finalizeAndEmitInitialPhaseMetric(session);

            if (providerSessions.isEmpty()) {
                try {
                    callback.onError(
@@ -776,6 +778,13 @@ public final class CredentialManagerService
            providerSessions.forEach(ProviderSession::invokeSession);
        }

        private void finalizeAndEmitInitialPhaseMetric(GetCandidateRequestSession session) {
            var initMetric = session.mRequestSessionMetric.getInitialPhaseMetric();
            initMetric.setAutofillSessionId(session.getAutofillSessionId());
            initMetric.setAutofillRequestId(session.getAutofillRequestId());
            finalizeAndEmitInitialPhaseMetric((RequestSession) session);
        }

        private void finalizeAndEmitInitialPhaseMetric(RequestSession session) {
            try {
                var initMetric = session.mRequestSessionMetric.getInitialPhaseMetric();
+22 −0
Original line number Diff line number Diff line
@@ -49,7 +49,12 @@ public class GetCandidateRequestSession extends RequestSession<GetCredentialRequ
        implements ProviderSession.ProviderInternalCallback<GetCredentialResponse> {
    private static final String TAG = "GetCandidateRequestSession";

    private static final String SESSION_ID_KEY = "autofill_session_id";
    private static final String REQUEST_ID_KEY = "autofill_request_id";

    private final IAutoFillManagerClient mAutoFillCallback;
    private final int mAutofillSessionId;
    private final int mAutofillRequestId;

    public GetCandidateRequestSession(
            Context context, SessionLifetime sessionCallback,
@@ -62,6 +67,8 @@ public class GetCandidateRequestSession extends RequestSession<GetCredentialRequ
                RequestInfo.TYPE_GET, callingAppInfo, enabledProviders,
                cancellationSignal, 0L);
        mAutoFillCallback = autoFillCallback;
        mAutofillSessionId = request.getData().getInt(SESSION_ID_KEY, -1);
        mAutofillRequestId = request.getData().getInt(REQUEST_ID_KEY, -1);
    }

    /**
@@ -177,4 +184,19 @@ public class GetCandidateRequestSession extends RequestSession<GetCredentialRequ
        Slog.d(TAG, "onFinalResponseReceived");
        respondToClientWithResponseAndFinish(new GetCandidateCredentialsResponse(response));
    }

    /**
     * Returns autofill session id. Returns -1 if unavailable.
     */
    public int getAutofillSessionId() {
        return mAutofillSessionId;
    }

    /**
     * Returns autofill request id. Returns -1 if unavailable.
     */
    public int getAutofillRequestId() {
        return mAutofillRequestId;

    }
}
Loading