diff options
| author | Anthony Stange <stange@google.com> | 2021-02-11 18:08:15 +0000 |
|---|---|---|
| committer | Anthony Stange <stange@google.com> | 2021-02-16 17:34:59 +0000 |
| commit | 2e6ebbc453ddd873c3ef9616de9537d856e55db6 (patch) | |
| tree | 719ee8400f5057be6b3f6e3ee78abc515979be74 /core/java/android | |
| parent | 7e24b8beff4d4167183881f2e62831aba405c2a1 (diff) | |
Add new ContextHubTransaction error code
To support synchronous sendMessageToNanoapp failures resulting from
invalid permissions, add a new error code that indicates the transaction
failed due to invalid permissions.
Also adds a recommendation for how apps should behave when interacting
with nanoapps.
Bug: 166846988
Test: compile
Change-Id: I189b387fbcd5c4425a12391e4413519f6befae5e
Diffstat (limited to 'core/java/android')
3 files changed, 26 insertions, 5 deletions
diff --git a/core/java/android/hardware/location/ContextHubClient.java b/core/java/android/hardware/location/ContextHubClient.java index 43480ab9cc44..49beeb3a2e96 100644 --- a/core/java/android/hardware/location/ContextHubClient.java +++ b/core/java/android/hardware/location/ContextHubClient.java @@ -127,6 +127,20 @@ public class ContextHubClient implements Closeable { * This function returns RESULT_SUCCESS if the message has reached the HAL, but * does not guarantee delivery of the message to the target nanoapp. * + * Before sending the first message to your nanoapp, it's recommended that the following + * operations should be performed: + * 1) Invoke {@link ContextHubManager#queryNanoApps(ContextHubInfo)} to verify the nanoapp is + * present. + * 2) Validate that you have the permissions to communicate with the nanoapp by looking at + * {@link NanoAppState#getNanoAppPermissions}. + * 3) If you don't have permissions, send an idempotent message to the nanoapp ensuring any + * work your app previously may have asked it to do is stopped. This is useful if your app + * restarts due to permission changes and no longer has the permissions when it is started + * again. + * 4) If you have valid permissions, send a message to your nanoapp to resubscribe so that it's + * aware you have restarted or so you can initially subscribe if this is the first time you + * have sent it a message. + * * @param message the message object to send * * @return the result of sending the message defined as in ContextHubTransaction.Result diff --git a/core/java/android/hardware/location/ContextHubClientCallback.java b/core/java/android/hardware/location/ContextHubClientCallback.java index b31b85fdabf6..7e484dda283c 100644 --- a/core/java/android/hardware/location/ContextHubClientCallback.java +++ b/core/java/android/hardware/location/ContextHubClientCallback.java @@ -117,10 +117,11 @@ public class ContextHubClientCallback { * 4) {@link ContextHubClient} performs any cleanup required with the nanoapp * 5) Callback invoked with the nanoapp ID and {@link ContextHubManager#AUTHORIZATION_DENIED}. * At this point, any further attempts of communication between the nanoapp and the - * {@link ContextHubClient} will be dropped by the contexthub along with - * {@link ContextHubManager#AUTHORIZATION_DENIED} being sent. The {@link ContextHubClient} - * should assume no communciation can happen again until - * {@link ContextHubManager#AUTHORIZATION_GRANTED} is received. + * {@link ContextHubClient} will be dropped by the contexthub and a return value of + * {@link ContextHubTransaction#RESULT_FAILED_PERMISSION_DENIED} will be used when calling + * {@link ContextHubClient#sendMessageToNanoApp}. The {@link ContextHubClient} should assume + * no communciation can happen again until {@link ContextHubManager#AUTHORIZATION_GRANTED} is + * received. * * @param client the client that is associated with this callback * @param nanoAppId the ID of the nanoapp associated with the new diff --git a/core/java/android/hardware/location/ContextHubTransaction.java b/core/java/android/hardware/location/ContextHubTransaction.java index d11e0a9b6081..86f77c0bf138 100644 --- a/core/java/android/hardware/location/ContextHubTransaction.java +++ b/core/java/android/hardware/location/ContextHubTransaction.java @@ -81,7 +81,8 @@ public class ContextHubTransaction<T> { RESULT_FAILED_AT_HUB, RESULT_FAILED_TIMEOUT, RESULT_FAILED_SERVICE_INTERNAL_FAILURE, - RESULT_FAILED_HAL_UNAVAILABLE + RESULT_FAILED_HAL_UNAVAILABLE, + RESULT_FAILED_PERMISSION_DENIED }) public @interface Result {} public static final int RESULT_SUCCESS = 0; @@ -117,6 +118,11 @@ public class ContextHubTransaction<T> { * Failure mode when the Context Hub HAL was not available. */ public static final int RESULT_FAILED_HAL_UNAVAILABLE = 8; + /** + * Failure mode when the user of the API doesn't have the required permissions to perform the + * operation. + */ + public static final int RESULT_FAILED_PERMISSION_DENIED = 9; /** * A class describing the response for a ContextHubTransaction. |
