diff options
| -rw-r--r-- | services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java | 41 |
1 files changed, 30 insertions, 11 deletions
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 9078f3ffeb54..cc5aaf4f7f45 100644 --- a/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java +++ b/services/core/java/com/android/server/location/contexthub/IContextHubWrapper.java @@ -41,8 +41,10 @@ import android.util.Pair; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; @@ -320,9 +322,8 @@ public abstract class IContextHubWrapper { private static class ContextHubWrapperAidl extends IContextHubWrapper { private android.hardware.contexthub.IContextHub mHub; - private ICallback mCallback = null; - - private ContextHubAidlCallback mAidlCallback = new ContextHubAidlCallback(); + private final Map<Integer, ContextHubAidlCallback> mAidlCallbackMap = + new HashMap<>(); // Use this thread in case where the execution requires to be on a service thread. // For instance, AppOpsManager.noteOp requires the UPDATE_APP_OPS_STATS permission. @@ -332,6 +333,14 @@ public abstract class IContextHubWrapper { private class ContextHubAidlCallback extends android.hardware.contexthub.IContextHubCallback.Stub { + private final int mContextHubId; + private final ICallback mCallback; + + ContextHubAidlCallback(int contextHubId, ICallback callback) { + mContextHubId = contextHubId; + mCallback = callback; + } + public void handleNanoappInfo(android.hardware.contexthub.NanoappInfo[] appInfo) { List<NanoAppState> nanoAppStateList = ContextHubServiceUtil.createNanoAppStateList(appInfo); @@ -481,8 +490,8 @@ public abstract class IContextHubWrapper { } public void registerCallback(int contextHubId, ICallback callback) throws RemoteException { - mCallback = callback; - mHub.registerCallback(contextHubId, mAidlCallback); + mAidlCallbackMap.put(contextHubId, new ContextHubAidlCallback(contextHubId, callback)); + mHub.registerCallback(contextHubId, mAidlCallbackMap.get(contextHubId)); } @ContextHubTransaction.Result @@ -508,10 +517,18 @@ public abstract class IContextHubWrapper { protected ICallback mCallback = null; - protected final ContextHubWrapperHidlCallback mHidlCallback = - new ContextHubWrapperHidlCallback(); + protected final Map<Integer, ContextHubWrapperHidlCallback> mHidlCallbackMap = + new HashMap<>(); protected class ContextHubWrapperHidlCallback extends IContexthubCallback.Stub { + private final int mContextHubId; + private final ICallback mCallback; + + ContextHubWrapperHidlCallback(int contextHubId, ICallback callback) { + mContextHubId = contextHubId; + mCallback = callback; + } + @Override public void handleClientMsg(ContextHubMsg message) { mCallback.handleNanoappMessage( @@ -612,8 +629,9 @@ public abstract class IContextHubWrapper { } public void registerCallback(int contextHubId, ICallback callback) throws RemoteException { - mCallback = callback; - mHub.registerCallback(contextHubId, mHidlCallback); + mHidlCallbackMap.put(contextHubId, + new ContextHubWrapperHidlCallback(contextHubId, callback)); + mHub.registerCallback(contextHubId, mHidlCallbackMap.get(contextHubId)); } public void onWifiMainSettingChanged(boolean enabled) {} @@ -779,8 +797,9 @@ public abstract class IContextHubWrapper { } public void registerCallback(int contextHubId, ICallback callback) throws RemoteException { - mCallback = callback; - mHub.registerCallback_1_2(contextHubId, mHidlCallback); + mHidlCallbackMap.put(contextHubId, + new ContextHubWrapperHidlCallback(contextHubId, callback)); + mHub.registerCallback_1_2(contextHubId, mHidlCallbackMap.get(contextHubId)); } private void sendSettingChanged(byte setting, byte newValue) { |