summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Arthur Ishiguro <arthuri@google.com> 2021-08-31 09:35:34 -0700
committer Arthur Ishiguro <arthuri@google.com> 2021-09-01 17:16:56 +0000
commit551ada2012261a79a94be537a4a1fa4e3181c504 (patch)
treea0c5e1bfc9496bfc70e799307f3ccd90eed56bd3
parent88cc919cb3365235daa4922f4a584d026539feae (diff)
Removes HIDL references from ContextHubService
This CL fully encapsulates HIDL references in the IContextHubWrapper, allowing the ContextHubService to operate independently regardless of whether the HAL is HIDL/AIDL. Bug: 194285834 Test: Presubmits, run CHQTS on device Test: Manual testing of untested code path (e.g. Context Hub restart) Change-Id: I56494a4bd5f508601b8a0f4e3ab1c74a858b81f2
-rw-r--r--services/core/java/com/android/server/location/contexthub/ContextHubService.java97
-rw-r--r--services/core/java/com/android/server/location/contexthub/ContextHubServiceUtil.java18
-rw-r--r--services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java138
-rw-r--r--services/core/java/com/android/server/location/contexthub/NanoAppStateManager.java34
4 files changed, 198 insertions, 89 deletions
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubService.java b/services/core/java/com/android/server/location/contexthub/ContextHubService.java
index fa84d127697f..27a78dd17d27 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubService.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubService.java
@@ -16,6 +16,7 @@
package com.android.server.location.contexthub;
+import android.annotation.IntDef;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.PendingIntent;
@@ -27,12 +28,6 @@ import android.content.pm.UserInfo;
import android.database.ContentObserver;
import android.hardware.SensorPrivacyManager;
import android.hardware.SensorPrivacyManagerInternal;
-import android.hardware.contexthub.V1_0.AsyncEventType;
-import android.hardware.contexthub.V1_0.ContextHubMsg;
-import android.hardware.contexthub.V1_0.Result;
-import android.hardware.contexthub.V1_0.TransactionResult;
-import android.hardware.contexthub.V1_2.HubAppInfo;
-import android.hardware.contexthub.V1_2.IContexthubCallback;
import android.hardware.location.ContextHubInfo;
import android.hardware.location.ContextHubMessage;
import android.hardware.location.ContextHubTransaction;
@@ -66,6 +61,8 @@ import com.android.server.location.ContextHubServiceProto;
import java.io.FileDescriptor;
import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
@@ -96,6 +93,20 @@ public class ContextHubService extends IContextHubService.Stub {
private static final int OS_APP_INSTANCE = -1;
+ /**
+ * Constants describing an async event from the Context Hub.
+ * {@hide}
+ */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(prefix = { "CONTEXT_HUB_EVENT_" }, value = {
+ CONTEXT_HUB_EVENT_UNKNOWN,
+ CONTEXT_HUB_EVENT_RESTARTED,
+ })
+ public @interface Type { }
+
+ public static final int CONTEXT_HUB_EVENT_UNKNOWN = 0;
+ public static final int CONTEXT_HUB_EVENT_RESTARTED = 1;
+
/*
* Local flag to enable debug logging.
*/
@@ -135,7 +146,7 @@ public class ContextHubService extends IContextHubService.Stub {
/**
* Class extending the callback to register with a Context Hub.
*/
- private class ContextHubServiceCallback extends IContexthubCallback.Stub {
+ private class ContextHubServiceCallback implements IContextHubWrapper.ICallback {
private final int mContextHubId;
ContextHubServiceCallback(int contextHubId) {
@@ -143,46 +154,31 @@ public class ContextHubService extends IContextHubService.Stub {
}
@Override
- public void handleClientMsg(ContextHubMsg message) {
- handleClientMessageCallback(mContextHubId, message,
- Collections.emptyList() /* nanoappPermissions */,
- Collections.emptyList() /* messagePermissions */);
- }
-
- @Override
- public void handleTxnResult(int transactionId, int result) {
- handleTransactionResultCallback(mContextHubId, transactionId,
- result == TransactionResult.SUCCESS);
+ public void handleTransactionResult(int transactionId, boolean success) {
+ handleTransactionResultCallback(mContextHubId, transactionId, success);
}
@Override
- public void handleHubEvent(int eventType) {
+ public void handleContextHubEvent(int eventType) {
handleHubEventCallback(mContextHubId, eventType);
}
@Override
- public void handleAppAbort(long nanoAppId, int abortCode) {
- handleAppAbortCallback(mContextHubId, nanoAppId, abortCode);
+ public void handleNanoappAbort(long nanoappId, int abortCode) {
+ handleAppAbortCallback(mContextHubId, nanoappId, abortCode);
}
@Override
- public void handleAppsInfo(
- ArrayList<android.hardware.contexthub.V1_0.HubAppInfo> nanoAppInfoList) {
- handleQueryAppsCallback(mContextHubId,
- ContextHubServiceUtil.toHubAppInfo_1_2(nanoAppInfoList));
+ public void handleNanoappInfo(List<NanoAppState> nanoappStateList) {
+ handleQueryAppsCallback(mContextHubId, nanoappStateList);
}
@Override
- public void handleClientMsg_1_2(android.hardware.contexthub.V1_2.ContextHubMsg message,
- ArrayList<String> messagePermissions) {
- handleClientMessageCallback(mContextHubId, message.msg_1_0, message.permissions,
+ public void handleNanoappMessage(short hostEndpointId, NanoAppMessage message,
+ List<String> nanoappPermissions, List<String> messagePermissions) {
+ handleClientMessageCallback(mContextHubId, hostEndpointId, message, nanoappPermissions,
messagePermissions);
}
-
- @Override
- public void handleAppsInfo_1_2(ArrayList<HubAppInfo> nanoAppInfoList) {
- handleQueryAppsCallback(mContextHubId, nanoAppInfoList);
- }
}
public ContextHubService(Context context) {
@@ -329,7 +325,7 @@ public class ContextHubService extends IContextHubService.Stub {
@Override
public void onHubReset() {
- byte[] data = {TransactionResult.SUCCESS};
+ byte[] data = {android.hardware.contexthub.V1_0.TransactionResult.SUCCESS};
onMessageReceiptOldApi(MSG_HUB_RESET, contextHubId, OS_APP_INSTANCE, data);
}
@@ -565,12 +561,12 @@ public class ContextHubService extends IContextHubService.Stub {
* cache or as a result of an explicit query requested by a client through the sendMessage API.
*
* @param contextHubId the ID of the hub to do the query
- * @return the result of the query
+ * @return true if the query succeeded
* @throws IllegalStateException if the transaction queue is full
*/
- private int queryNanoAppsInternal(int contextHubId) {
+ private boolean queryNanoAppsInternal(int contextHubId) {
if (mContextHubWrapper == null) {
- return Result.UNKNOWN_FAILURE;
+ return false;
}
IContextHubTransactionCallback onCompleteCallback =
@@ -579,7 +575,7 @@ public class ContextHubService extends IContextHubService.Stub {
contextHubId, onCompleteCallback, getCallingPackageName());
mTransactionManager.addTransaction(transaction);
- return Result.OK;
+ return true;
}
@Override
@@ -605,7 +601,7 @@ public class ContextHubService extends IContextHubService.Stub {
boolean success = false;
if (nanoAppHandle == OS_APP_INSTANCE) {
if (msg.getMsgType() == MSG_QUERY_NANO_APPS) {
- success = (queryNanoAppsInternal(contextHubHandle) == Result.OK);
+ success = queryNanoAppsInternal(contextHubHandle);
} else {
Log.e(TAG, "Invalid OS message params of type " + msg.getMsgType());
}
@@ -631,16 +627,16 @@ public class ContextHubService extends IContextHubService.Stub {
* Handles a unicast or broadcast message from a nanoapp.
*
* @param contextHubId the ID of the hub the message came from
+ * @param hostEndpointId the host endpoint ID of the client receiving this message
* @param message the message contents
* @param reqPermissions the permissions required to consume this message
*/
private void handleClientMessageCallback(
- int contextHubId, ContextHubMsg message, List<String> nanoappPermissions,
+ int contextHubId, short hostEndpointId, NanoAppMessage message,
+ List<String> nanoappPermissions,
List<String> messagePermissions) {
- NanoAppMessage clientMessage = ContextHubServiceUtil.createNanoAppMessage(message);
mClientManager.onMessageFromNanoApp(
- contextHubId, message.hostEndPoint, clientMessage, nanoappPermissions,
- messagePermissions);
+ contextHubId, hostEndpointId, message, nanoappPermissions, messagePermissions);
}
/**
@@ -690,10 +686,10 @@ public class ContextHubService extends IContextHubService.Stub {
* Handles an asynchronous event from a Context Hub.
*
* @param contextHubId the ID of the hub the response came from
- * @param eventType the type of the event as defined in Context Hub HAL AsyncEventType
+ * @param eventType the type of the event as in CONTEXT_HUB_EVENT_*
*/
private void handleHubEventCallback(int contextHubId, int eventType) {
- if (eventType == AsyncEventType.RESTARTED) {
+ if (eventType == CONTEXT_HUB_EVENT_RESTARTED) {
sendLocationSettingUpdate();
sendWifiSettingUpdate(true /* forceUpdate */);
sendAirplaneModeSettingUpdate();
@@ -723,15 +719,12 @@ public class ContextHubService extends IContextHubService.Stub {
/**
* Handles a query response from a Context Hub.
*
- * @param contextHubId the ID of the hub of the response
- * @param nanoAppInfoList the list of loaded nanoapps
+ * @param contextHubId the ID of the hub of the response
+ * @param nanoappStateList the list of loaded nanoapps
*/
- private void handleQueryAppsCallback(int contextHubId, List<HubAppInfo> nanoAppInfoList) {
- List<NanoAppState> nanoAppStateList =
- ContextHubServiceUtil.createNanoAppStateList(nanoAppInfoList);
-
- mNanoAppStateManager.updateCache(contextHubId, nanoAppInfoList);
- mTransactionManager.onQueryResponse(nanoAppStateList);
+ private void handleQueryAppsCallback(int contextHubId, List<NanoAppState> nanoappStateList) {
+ mNanoAppStateManager.updateCache(contextHubId, nanoappStateList);
+ mTransactionManager.onQueryResponse(nanoappStateList);
}
/**
diff --git a/services/core/java/com/android/server/location/contexthub/ContextHubServiceUtil.java b/services/core/java/com/android/server/location/contexthub/ContextHubServiceUtil.java
index d0e00c481e43..df6cc0517964 100644
--- a/services/core/java/com/android/server/location/contexthub/ContextHubServiceUtil.java
+++ b/services/core/java/com/android/server/location/contexthub/ContextHubServiceUtil.java
@@ -20,6 +20,7 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import android.Manifest;
import android.content.Context;
+import android.hardware.contexthub.V1_0.AsyncEventType;
import android.hardware.contexthub.V1_0.ContextHubMsg;
import android.hardware.contexthub.V1_0.HostEndPoint;
import android.hardware.contexthub.V1_0.Result;
@@ -256,4 +257,21 @@ import java.util.List;
}
return newAppInfo;
}
+
+ /**
+ * Converts a HIDL AsyncEventType to the corresponding ContextHubService.CONTEXT_HUB_EVENT_*.
+ *
+ * @param hidlEventType The AsyncEventType value.
+ * @return The converted event type.
+ */
+ /* package */
+ static int toContextHubEvent(int hidlEventType) {
+ switch (hidlEventType) {
+ case AsyncEventType.RESTARTED:
+ return ContextHubService.CONTEXT_HUB_EVENT_RESTARTED;
+ default:
+ Log.e(TAG, "toContextHubEvent: Unknown event type: " + hidlEventType);
+ return ContextHubService.CONTEXT_HUB_EVENT_UNKNOWN;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java b/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java
index 092e1a1be7ee..d733db009726 100644
--- a/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java
+++ b/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java
@@ -15,16 +15,20 @@
*/
package com.android.server.location.contexthub;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.contexthub.V1_0.ContextHub;
import android.hardware.contexthub.V1_0.ContextHubMsg;
+import android.hardware.contexthub.V1_0.TransactionResult;
import android.hardware.contexthub.V1_1.Setting;
import android.hardware.contexthub.V1_1.SettingValue;
+import android.hardware.contexthub.V1_2.HubAppInfo;
import android.hardware.contexthub.V1_2.IContexthubCallback;
import android.hardware.location.ContextHubInfo;
import android.hardware.location.ContextHubTransaction;
import android.hardware.location.NanoAppBinary;
import android.hardware.location.NanoAppMessage;
+import android.hardware.location.NanoAppState;
import android.os.RemoteException;
import android.util.Log;
import android.util.Pair;
@@ -41,6 +45,45 @@ public abstract class IContextHubWrapper {
private static final String TAG = "IContextHubWrapper";
/**
+ * The callback interface to use in registerCallback.
+ */
+ public interface ICallback {
+ /**
+ * @param transactionId The ID of the transaction that completed.
+ * @param success true if the transaction succeeded.
+ */
+ void handleTransactionResult(int transactionId, boolean success);
+
+ /**
+ * @param eventType The Context Hub event type defined by ContextHubService
+ * .CONTEXT_HUB_EVENT_*.
+ */
+ void handleContextHubEvent(int eventType);
+
+ /**
+ * @param nanoappId The ID of the nanoapp that aborted.
+ * @param abortCode The nanoapp-defined abort code.
+ */
+ void handleNanoappAbort(long nanoappId, int abortCode);
+
+ /**
+ * @param nanoappStateList The list of loaded nanoapps on the Context Hub.
+ */
+ void handleNanoappInfo(List<NanoAppState> nanoappStateList);
+
+ /**
+ * Handles a message from a nanoapp to a ContextHubClient.
+ *
+ * @param hostEndpointId The host endpoint ID of the recipient.
+ * @param message The message from the nanoapp.
+ * @param nanoappPermissions The list of permissions held by the nanoapp.
+ * @param messagePermissions The list of permissions required to receive the message.
+ */
+ void handleNanoappMessage(short hostEndpointId, NanoAppMessage message,
+ List<String> nanoappPermissions, List<String> messagePermissions);
+ }
+
+ /**
* Attempts to connect to the Contexthub HAL 1.0 service, if it exists.
*
* @return A valid IContextHubWrapper if the connection was successful, null otherwise.
@@ -103,12 +146,6 @@ public abstract class IContextHubWrapper {
public abstract Pair<List<ContextHubInfo>, List<String>> getHubs() throws RemoteException;
/**
- * Calls the appropriate registerCallback function depending on the HAL version.
- */
- public abstract void registerCallback(
- int hubId, IContexthubCallback callback) throws RemoteException;
-
- /**
* @return True if this version of the Contexthub HAL supports Location setting notifications.
*/
public abstract boolean supportsLocationSettingNotifications();
@@ -213,11 +250,75 @@ public abstract class IContextHubWrapper {
public abstract int queryNanoapps(int contextHubId) throws RemoteException;
/**
+ * Registers a callback with the Context Hub.
+ *
+ * @param contextHubId The ID of the Context Hub to register the callback with.
+ * @param callback The callback to register.
+ */
+ public abstract void registerCallback(int contextHubId, @NonNull ICallback callback)
+ throws RemoteException;
+
+ /**
* An abstract call that defines methods common to all HIDL IContextHubWrappers.
*/
private abstract static class ContextHubWrapperHidl extends IContextHubWrapper {
private android.hardware.contexthub.V1_0.IContexthub mHub;
+ protected ICallback mCallback = null;
+
+ protected final ContextHubWrapperHidlCallback mHidlCallback =
+ new ContextHubWrapperHidlCallback();
+
+ protected class ContextHubWrapperHidlCallback extends IContexthubCallback.Stub {
+ @Override
+ public void handleClientMsg(ContextHubMsg message) {
+ mCallback.handleNanoappMessage(
+ message.hostEndPoint,
+ ContextHubServiceUtil.createNanoAppMessage(message),
+ Collections.emptyList() /* nanoappPermissions */,
+ Collections.emptyList() /* messagePermissions */);
+ }
+
+ @Override
+ public void handleTxnResult(int transactionId, int result) {
+ mCallback.handleTransactionResult(transactionId,
+ result == TransactionResult.SUCCESS);
+ }
+
+ @Override
+ public void handleHubEvent(int eventType) {
+ mCallback.handleContextHubEvent(
+ ContextHubServiceUtil.toContextHubEvent(eventType));
+ }
+
+ @Override
+ public void handleAppAbort(long nanoAppId, int abortCode) {
+ mCallback.handleNanoappAbort(nanoAppId, abortCode);
+ }
+
+ @Override
+ public void handleAppsInfo(
+ ArrayList<android.hardware.contexthub.V1_0.HubAppInfo> nanoAppInfoList) {
+ handleAppsInfo_1_2(ContextHubServiceUtil.toHubAppInfo_1_2(nanoAppInfoList));
+ }
+
+ @Override
+ public void handleClientMsg_1_2(android.hardware.contexthub.V1_2.ContextHubMsg message,
+ ArrayList<String> messagePermissions) {
+ mCallback.handleNanoappMessage(
+ message.msg_1_0.hostEndPoint,
+ ContextHubServiceUtil.createNanoAppMessage(message.msg_1_0),
+ message.permissions, messagePermissions);
+ }
+
+ @Override
+ public void handleAppsInfo_1_2(ArrayList<HubAppInfo> nanoAppInfoList) {
+ List<NanoAppState> nanoAppStateList =
+ ContextHubServiceUtil.createNanoAppStateList(nanoAppInfoList);
+ mCallback.handleNanoappInfo(nanoAppStateList);
+ }
+ }
+
ContextHubWrapperHidl(android.hardware.contexthub.V1_0.IContexthub hub) {
mHub = hub;
}
@@ -267,6 +368,11 @@ public abstract class IContextHubWrapper {
return ContextHubServiceUtil.toTransactionResult(
mHub.queryApps(contextHubId));
}
+
+ public void registerCallback(int contextHubId, ICallback callback) throws RemoteException {
+ mCallback = callback;
+ mHub.registerCallback(contextHubId, mHidlCallback);
+ }
}
private static class ContextHubWrapperV1_0 extends ContextHubWrapperHidl {
@@ -285,11 +391,6 @@ public abstract class IContextHubWrapper {
return new Pair(hubInfoList, new ArrayList<String>());
}
- public void registerCallback(
- int hubId, IContexthubCallback callback) throws RemoteException {
- mHub.registerCallback(hubId, callback);
- }
-
public boolean supportsLocationSettingNotifications() {
return false;
}
@@ -335,11 +436,6 @@ public abstract class IContextHubWrapper {
return new Pair(hubInfoList, new ArrayList<String>());
}
- public void registerCallback(
- int hubId, IContexthubCallback callback) throws RemoteException {
- mHub.registerCallback(hubId, callback);
- }
-
public boolean supportsLocationSettingNotifications() {
return true;
}
@@ -401,11 +497,6 @@ public abstract class IContextHubWrapper {
return mHubInfo;
}
- public void registerCallback(
- int hubId, IContexthubCallback callback) throws RemoteException {
- mHub.registerCallback_1_2(hubId, callback);
- }
-
public boolean supportsLocationSettingNotifications() {
return true;
}
@@ -445,6 +536,11 @@ public abstract class IContextHubWrapper {
enabled ? SettingValue.DISABLED : SettingValue.ENABLED);
}
+ public void registerCallback(int contextHubId, ICallback callback) throws RemoteException {
+ mCallback = callback;
+ mHub.registerCallback_1_2(contextHubId, mHidlCallback);
+ }
+
private void sendSettingChanged(byte setting, byte newValue) {
try {
mHub.onSettingChanged_1_2(setting, newValue);
diff --git a/services/core/java/com/android/server/location/contexthub/NanoAppStateManager.java b/services/core/java/com/android/server/location/contexthub/NanoAppStateManager.java
index 667fb98f8649..b6d5496ca547 100644
--- a/services/core/java/com/android/server/location/contexthub/NanoAppStateManager.java
+++ b/services/core/java/com/android/server/location/contexthub/NanoAppStateManager.java
@@ -17,8 +17,8 @@
package com.android.server.location.contexthub;
import android.annotation.Nullable;
-import android.hardware.contexthub.V1_2.HubAppInfo;
import android.hardware.location.NanoAppInstanceInfo;
+import android.hardware.location.NanoAppState;
import android.util.Log;
import java.util.HashMap;
@@ -31,8 +31,8 @@ import java.util.function.Consumer;
* Manages the state of loaded nanoapps at the Context Hubs.
*
* This class maintains a list of nanoapps that have been informed as loaded at the hubs. The state
- * should be updated based on the hub callbacks (defined in IContexthubCallback.hal), as a result
- * of either loadNanoApp, unloadNanoApp, or queryApps.
+ * should be updated based on the hub callbacks (defined in IContexthubCallback.hal), as a result of
+ * either loadNanoApp, unloadNanoApp, or queryApps.
*
* The state tracked by this manager is used by clients of ContextHubService that use the old APIs.
*
@@ -61,7 +61,7 @@ import java.util.function.Consumer;
/**
* @param nanoAppHandle the nanoapp handle
* @return the NanoAppInstanceInfo for the given nanoapp, or null if the nanoapp does not exist
- * in the cache
+ * in the cache
*/
@Nullable
/* package */
@@ -83,7 +83,7 @@ import java.util.function.Consumer;
/**
* @param contextHubId the ID of the hub to search for the instance
- * @param nanoAppId the unique 64-bit ID of the nanoapp
+ * @param nanoAppId the unique 64-bit ID of the nanoapp
* @return the nanoapp handle, -1 if the nanoapp is not in the cache
*/
/* package */
@@ -99,12 +99,12 @@ import java.util.function.Consumer;
/**
* Adds a nanoapp instance to the cache.
- *
+ * <p>
* If the cache already contained the nanoapp, the entry is removed and a new nanoapp handle is
* generated.
*
- * @param contextHubId the ID of the hub the nanoapp is loaded in
- * @param nanoAppId the unique 64-bit ID of the nanoapp
+ * @param contextHubId the ID of the hub the nanoapp is loaded in
+ * @param nanoAppId the unique 64-bit ID of the nanoapp
* @param nanoAppVersion the version of the nanoapp
*/
/* package */
@@ -147,15 +147,17 @@ import java.util.function.Consumer;
/**
* Performs a batch update of the nanoapp cache given a nanoapp query response.
*
- * @param contextHubId the ID of the hub the response came from
- * @param nanoAppInfoList the list of loaded nanoapps
+ * @param contextHubId the ID of the hub the response came from
+ * @param nanoappStateList the list of loaded nanoapps
*/
/* package */
- synchronized void updateCache(int contextHubId, List<HubAppInfo> nanoAppInfoList) {
+ synchronized void updateCache(int contextHubId, List<NanoAppState> nanoappStateList) {
HashSet<Long> nanoAppIdSet = new HashSet<>();
- for (HubAppInfo appInfo : nanoAppInfoList) {
- handleQueryAppEntry(contextHubId, appInfo.info_1_0.appId, appInfo.info_1_0.version);
- nanoAppIdSet.add(appInfo.info_1_0.appId);
+ for (NanoAppState nanoappState : nanoappStateList) {
+ handleQueryAppEntry(
+ contextHubId, nanoappState.getNanoAppId(),
+ (int) nanoappState.getNanoAppVersion());
+ nanoAppIdSet.add(nanoappState.getNanoAppId());
}
Iterator<NanoAppInstanceInfo> iterator = mNanoAppHash.values().iterator();
@@ -172,8 +174,8 @@ import java.util.function.Consumer;
* If the nanoapp exists in the cache, then the entry is updated. Otherwise, inserts a new
* instance of the nanoapp in the cache. This method should only be invoked from updateCache.
*
- * @param contextHubId the ID of the hub the nanoapp is loaded in
- * @param nanoAppId the unique 64-bit ID of the nanoapp
+ * @param contextHubId the ID of the hub the nanoapp is loaded in
+ * @param nanoAppId the unique 64-bit ID of the nanoapp
* @param nanoAppVersion the version of the nanoapp
*/
private void handleQueryAppEntry(int contextHubId, long nanoAppId, int nanoAppVersion) {