diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/hardware/location/ContextHubManager.java | 24 | ||||
| -rw-r--r-- | core/java/android/hardware/location/IContextHubService.aidl | 6 |
2 files changed, 26 insertions, 4 deletions
diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java index b0b77f31c24d..9acefa567ed6 100644 --- a/core/java/android/hardware/location/ContextHubManager.java +++ b/core/java/android/hardware/location/ContextHubManager.java @@ -808,7 +808,7 @@ public final class ContextHubManager { * * @throws IllegalArgumentException if hubInfo does not represent a valid hub, or pendingIntent * was not associated with a client - * @throws IllegalStateException if there were too many registered clients at the service + * @throws IllegalStateException if the client is already registered to a valid callback * @throws NullPointerException if pendingIntent, hubInfo, callback, or executor is null * * @hide @@ -818,8 +818,24 @@ public final class ContextHubManager { @NonNull PendingIntent pendingIntent, @NonNull ContextHubInfo hubInfo, @NonNull ContextHubClientCallback callback, @NonNull @CallbackExecutor Executor executor) { - // TODO: Implement this - throw new UnsupportedOperationException("Not implemented yet"); + Preconditions.checkNotNull(pendingIntent, "PendingIntent cannot be null"); + Preconditions.checkNotNull(callback, "Callback cannot be null"); + Preconditions.checkNotNull(hubInfo, "ContextHubInfo cannot be null"); + Preconditions.checkNotNull(executor, "Executor cannot be null"); + + ContextHubClient client = new ContextHubClient(hubInfo); + IContextHubClientCallback clientInterface = createClientCallback( + client, callback, executor); + + IContextHubClient clientProxy; + try { + clientProxy = mService.bindClient(pendingIntent, clientInterface, hubInfo.getId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + + client.setClientProxy(clientProxy); + return client; } /** @@ -833,7 +849,7 @@ public final class ContextHubManager { * * @throws IllegalArgumentException if hubInfo does not represent a valid hub, or pendingIntent * was not associated with a client - * @throws IllegalStateException if there were too many registered clients at the service + * @throws IllegalStateException if the client is already registered to a valid callback * @throws NullPointerException if pendingIntent, hubInfo, or callback is null * * @hide diff --git a/core/java/android/hardware/location/IContextHubService.aidl b/core/java/android/hardware/location/IContextHubService.aidl index 233e857d8e67..9b0acdf14724 100644 --- a/core/java/android/hardware/location/IContextHubService.aidl +++ b/core/java/android/hardware/location/IContextHubService.aidl @@ -17,6 +17,7 @@ package android.hardware.location; // Declare any non-default types here with import statements +import android.app.PendingIntent; import android.hardware.location.ContextHubInfo; import android.hardware.location.ContextHubMessage; import android.hardware.location.NanoApp; @@ -60,6 +61,11 @@ interface IContextHubService { // Creates a client to send and receive messages IContextHubClient createClient(in IContextHubClientCallback client, int contextHubId); + // Binds an existing client to a new callback interface, provided a previously registered + // PendingIntent + IContextHubClient bindClient( + in PendingIntent pendingIntent, in IContextHubClientCallback client, int contextHubId); + // Returns a list of ContextHub objects of available hubs List<ContextHubInfo> getContextHubs(); |
