Maintain separate callbacks for each Context Hub

Current implementation does not distinguish various Context Hubs
in registerCallback().

Bug: 194287786
Test: Run CHQTS
Change-Id: Ie9b0c65c1a163a4139608522059c0685cc68b664
This commit is contained in:
Arthur Ishiguro
2021-12-10 17:04:56 +00:00
parent b04c63a1bc
commit a830cb86f1

View File

@@ -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) {