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

Commit 69c20281 authored by Reema Bajwa's avatar Reema Bajwa Committed by Android (Google) Code Review
Browse files

Merge "Make sure finishSession logs the final status" into main

parents 6e099f72 b8992fec
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -4782,7 +4782,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
        }

        if (isCredmanIntegrationActive(response)) {
            Slog.d(TAG, "Attempting to add Credential Manager callback to pinned entries");
            addCredentialManagerCallback(response);
        }

@@ -5713,7 +5712,6 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
                /* isPrimary= */ true);
        updateFillDialogTriggerIdsLocked();
        updateTrackedIdsLocked();

        if (mCurrentViewId == null) {
            return;
        }
+5 −2
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ import android.service.credentials.CredentialProviderService;
import android.service.credentials.PermissionUtils;
import android.util.Slog;

import com.android.server.credentials.metrics.ApiStatus;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -180,7 +182,7 @@ public class GetCandidateRequestSession extends RequestSession<GetCredentialRequ
        } else {
            Slog.w(TAG, "onUiCancellation called but finalResponseReceiver not found");
        }
        finishSession(/*propagateCancellation=*/false);
        finishSession(/*propagateCancellation=*/false, ApiStatus.FAILURE.getMetricCode());
    }

    @Override
@@ -221,9 +223,10 @@ public class GetCandidateRequestSession extends RequestSession<GetCredentialRequ
            resultData.putParcelable(
                    CredentialProviderService.EXTRA_GET_CREDENTIAL_RESPONSE, response);
            mFinalResponseReceiver.send(Constants.SUCCESS_CREDMAN_SELECTOR, resultData);
            finishSession(/*propagateCancellation=*/ false);
            finishSession(/*propagateCancellation=*/ false, ApiStatus.SUCCESS.getMetricCode());
        } else {
            Slog.w(TAG, "onFinalResponseReceived result receiver not found for pinned entry");
            finishSession(/*propagateCancellation=*/ false, ApiStatus.FAILURE.getMetricCode());
        }
    }

+22 −18
Original line number Diff line number Diff line
@@ -175,7 +175,7 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
                () -> {
                    Slog.d(TAG, "Cancellation invoked from the client - clearing session");
                    boolean isUiActive = maybeCancelUi();
                    finishSession(!isUiActive);
                    finishSession(!isUiActive, ApiStatus.CLIENT_CANCELED.getMetricCode());
                }
        );
    }
@@ -231,7 +231,8 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            return;
        }
        if (isSessionCancelled()) {
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true,
                    ApiStatus.CLIENT_CANCELED.getMetricCode());
            return;
        }
        String providerId = selection.getProviderId();
@@ -257,11 +258,12 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
        }
    }

    protected void finishSession(boolean propagateCancellation) {
    protected void finishSession(boolean propagateCancellation, int apiStatus) {
        Slog.i(TAG, "finishing session with propagateCancellation " + propagateCancellation);
        if (propagateCancellation) {
            mProviders.values().forEach(ProviderSession::cancelProviderRemoteSession);
        }
        mRequestSessionMetric.logApiCalledAtFinish(apiStatus);
        mRequestSessionStatus = RequestSessionStatus.COMPLETE;
        mProviders.clear();
        clearRequestSessionLocked();
@@ -326,7 +328,8 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
        mRequestSessionMetric.logCandidatePhaseMetrics(mProviders);

        if (isSessionCancelled()) {
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true,
                    ApiStatus.CLIENT_CANCELED.getMetricCode());
            return providerDataList;
        }

@@ -353,23 +356,20 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            return;
        }
        if (isSessionCancelled()) {
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.CLIENT_CANCELED.getMetricCode());
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true,
                    ApiStatus.CLIENT_CANCELED.getMetricCode());
            return;
        }
        try {
            invokeClientCallbackSuccess(response);
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.SUCCESS.getMetricCode());
            finishSession(/*propagateCancellation=*/false,
                    ApiStatus.SUCCESS.getMetricCode());
        } catch (RemoteException e) {
            mRequestSessionMetric.collectFinalPhaseProviderMetricStatus(
                    /*has_exception=*/ true, ProviderStatusForMetrics.FINAL_FAILURE);
            Slog.e(TAG, "Issue while responding to client with a response : " + e);
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.FAILURE.getMetricCode());
            finishSession(/*propagateCancellation=*/false, ApiStatus.FAILURE.getMetricCode());
        }
        finishSession(/*propagateCancellation=*/false);
    }

    /**
@@ -387,9 +387,7 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            return;
        }
        if (isSessionCancelled()) {
            mRequestSessionMetric.logApiCalledAtFinish(
                    /*apiStatus=*/ ApiStatus.CLIENT_CANCELED.getMetricCode());
            finishSession(/*propagateCancellation=*/true);
            finishSession(/*propagateCancellation=*/true, ApiStatus.CLIENT_CANCELED.getMetricCode());
            return;
        }

@@ -399,8 +397,14 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
            Slog.e(TAG, "Issue while responding to client with error : " + e);
        }
        boolean isUserCanceled = errorType.contains(MetricUtilities.USER_CANCELED_SUBSTRING);
        mRequestSessionMetric.logFailureOrUserCancel(isUserCanceled);
        finishSession(/*propagateCancellation=*/false);
        if (isUserCanceled) {
            mRequestSessionMetric.setHasExceptionFinalPhase(/* has_exception */ false);
            finishSession(/*propagateCancellation=*/false,
                    ApiStatus.USER_CANCELED.getMetricCode());
        } else {
            finishSession(/*propagateCancellation=*/false,
                    ApiStatus.FAILURE.getMetricCode());
        }
    }

    /**
@@ -419,7 +423,7 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
        @Override
        public void binderDied() {
            Slog.d(TAG, "Client binder died - clearing session");
            finishSession(isUiWaitingForData());
            finishSession(isUiWaitingForData(), ApiStatus.CLIENT_CANCELED.getMetricCode());
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -247,7 +247,7 @@ public class RequestSessionMetric {
     *
     * @param exceptionBitFinalPhase represents if the final phase provider had an exception
     */
    private void setHasExceptionFinalPhase(boolean exceptionBitFinalPhase) {
    public void setHasExceptionFinalPhase(boolean exceptionBitFinalPhase) {
        try {
            mChosenProviderFinalPhaseMetric.setHasException(exceptionBitFinalPhase);
        } catch (Exception e) {