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

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

Merge "Add status enum to RequestSession"

parents 72adb375 ac014cf3
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -164,4 +164,14 @@ public final class ClearRequestSession extends RequestSession<ClearCredentialSta
        // TODO: Replace with properly defined error type
        respondToClientWithErrorAndFinish("UNKNOWN", "All providers failed");
    }

    @Override
    public void onUiCancellation(boolean isUserCancellation) {
        // Not needed since UI is not involved
    }

    @Override
    public void onUiSelectorInvocationFailure() {
        // Not needed since UI is not involved
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -135,6 +135,10 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR

    private void respondToClientWithResponseAndFinish(CreateCredentialResponse response) {
        Log.i(TAG, "respondToClientWithResponseAndFinish");
        if (mRequestSessionStatus == RequestSessionStatus.COMPLETE) {
            Log.i(TAG, "Request has already been completed. This is strange.");
            return;
        }
        if (isSessionCancelled()) {
            // TODO: Differentiate btw cancelled and false
            logApiCalled(RequestType.CREATE_CREDENTIALS, /* isSuccessful */ true);
@@ -153,6 +157,10 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR

    private void respondToClientWithErrorAndFinish(String errorType, String errorMsg) {
        Log.i(TAG, "respondToClientWithErrorAndFinish");
        if (mRequestSessionStatus == RequestSessionStatus.COMPLETE) {
            Log.i(TAG, "Request has already been completed. This is strange.");
            return;
        }
        if (isSessionCancelled()) {
            // TODO: Differentiate btw cancelled and false
            logApiCalled(RequestType.CREATE_CREDENTIALS, /* isSuccessful */ true);
+10 −1
Original line number Diff line number Diff line
@@ -112,6 +112,10 @@ public final class GetRequestSession extends RequestSession<GetCredentialRequest
    }

    private void respondToClientWithResponseAndFinish(GetCredentialResponse response) {
        if (mRequestSessionStatus == RequestSessionStatus.COMPLETE) {
            Log.i(TAG, "Request has already been completed. This is strange.");
            return;
        }
        if (isSessionCancelled()) {
            // TODO: Differentiate btw cancelled and false
            logApiCalled(RequestType.GET_CREDENTIALS, /* isSuccessful */ false);
@@ -129,11 +133,16 @@ public final class GetRequestSession extends RequestSession<GetCredentialRequest
    }

    private void respondToClientWithErrorAndFinish(String errorType, String errorMsg) {
        if (mRequestSessionStatus == RequestSessionStatus.COMPLETE) {
            Log.i(TAG, "Request has already been completed. This is strange.");
            return;
        }
        if (isSessionCancelled()) {
            logApiCalled(RequestType.GET_CREDENTIALS, /* isSuccessful */ false);
            finishSession(/*propagateCancellation=*/true);
            return;
        }

        try {
            mClientCallback.onError(errorType, errorMsg);
        } catch (RemoteException e) {
@@ -157,7 +166,7 @@ public final class GetRequestSession extends RequestSession<GetCredentialRequest
    @Override
    public void onUiSelectorInvocationFailure() {
        respondToClientWithErrorAndFinish(GetCredentialException.TYPE_NO_CREDENTIAL,
                    "No credentials to show on the selector.");
                    "No credentials available.");
    }

    @Override
+18 −16
Original line number Diff line number Diff line
@@ -82,6 +82,19 @@ abstract class RequestSession<T, U> implements CredentialManagerUi.CredentialMan
    //TODO improve design to allow grouped metrics per request
    protected final String mHybridService;

    @NonNull protected RequestSessionStatus mRequestSessionStatus =
            RequestSessionStatus.IN_PROGRESS;

    /** The status in which a given request session is. */
    enum RequestSessionStatus {
        /** Request is in progress. This is the status a request session is instantiated with. */
        IN_PROGRESS,
        /** Request has been cancelled by the developer. */
        CANCELLED,
        /** Request is complete. */
        COMPLETE
    }

    protected RequestSession(@NonNull Context context,
            @UserIdInt int userId, int callingUid, @NonNull T clientRequest, U clientCallback,
            @NonNull String requestType,
@@ -112,6 +125,10 @@ abstract class RequestSession<T, U> implements CredentialManagerUi.CredentialMan

    @Override // from CredentialManagerUiCallbacks
    public void onUiSelection(UserSelectionDialogResult selection) {
        if (mRequestSessionStatus == RequestSessionStatus.COMPLETE) {
            Log.i(TAG, "Request has already been completed. This is strange.");
            return;
        }
        if (isSessionCancelled()) {
            finishSession(/*propagateCancellation=*/true);
            return;
@@ -128,27 +145,12 @@ abstract class RequestSession<T, U> implements CredentialManagerUi.CredentialMan
                selection.getEntrySubkey(), selection.getPendingIntentProviderResponse());
    }

    @Override // from CredentialManagerUiCallbacks
    public void onUiCancellation(boolean isUserCancellation) {
        Log.i(TAG, "Ui canceled. Canceled by user: " + isUserCancellation);
        if (isSessionCancelled()) {
            finishSession(/*propagateCancellation=*/true);
            return;
        }
        // User canceled the activity
        finishSession(/*propagateCancellation=*/false);
    }

    @Override
    public void onUiSelectorInvocationFailure() {
        Log.i(TAG, "onUiSelectorInvocationFailure");
    }

    protected void finishSession(boolean propagateCancellation) {
        Log.i(TAG, "finishing session");
        if (propagateCancellation) {
            mProviders.values().forEach(ProviderSession::cancelProviderRemoteSession);
        }
        mRequestSessionStatus = RequestSessionStatus.COMPLETE;
        mProviders.clear();
    }