Loading services/credentials/java/com/android/server/credentials/ClearRequestSession.java +10 −0 Original line number Diff line number Diff line Loading @@ -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 } } services/credentials/java/com/android/server/credentials/CreateRequestSession.java +8 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading services/credentials/java/com/android/server/credentials/GetRequestSession.java +10 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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) { Loading @@ -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 Loading services/credentials/java/com/android/server/credentials/RequestSession.java +18 −16 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading @@ -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(); } Loading Loading
services/credentials/java/com/android/server/credentials/ClearRequestSession.java +10 −0 Original line number Diff line number Diff line Loading @@ -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 } }
services/credentials/java/com/android/server/credentials/CreateRequestSession.java +8 −0 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading
services/credentials/java/com/android/server/credentials/GetRequestSession.java +10 −1 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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) { Loading @@ -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 Loading
services/credentials/java/com/android/server/credentials/RequestSession.java +18 −16 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading @@ -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(); } Loading