Loading core/java/android/hardware/location/ContextHubService.java +53 −27 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,11 @@ package android.hardware.location; package android.hardware.location; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import android.Manifest; import android.Manifest; import android.content.Context; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.PackageManager; Loading Loading @@ -53,10 +58,14 @@ public class ContextHubService extends IContextHubService.Stub { private static final int PRE_LOADED_APP_MEM_REQ = 0; private static final int PRE_LOADED_APP_MEM_REQ = 0; private static final int MSG_HEADER_SIZE = 4; private static final int MSG_HEADER_SIZE = 4; private static final int MSG_FIELD_TYPE = 0; private static final int HEADER_FIELD_MSG_TYPE = 0; private static final int MSG_FIELD_VERSION = 1; private static final int HEADER_FIELD_MSG_VERSION = 1; private static final int MSG_FIELD_HUB_HANDLE = 2; private static final int HEADER_FIELD_HUB_HANDLE = 2; private static final int MSG_FIELD_APP_INSTANCE = 3; private static final int HEADER_FIELD_APP_INSTANCE = 3; private static final int HEADER_FIELD_LOAD_APP_ID_LO = MSG_HEADER_SIZE; private static final int HEADER_FIELD_LOAD_APP_ID_HI = MSG_HEADER_SIZE + 1; private static final int MSG_LOAD_APP_HEADER_SIZE = MSG_HEADER_SIZE + 2; private static final int OS_APP_INSTANCE = -1; private static final int OS_APP_INSTANCE = -1; Loading Loading @@ -146,11 +155,16 @@ public class ContextHubService extends IContextHubService.Stub { return -1; return -1; } } int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_LOAD_APP_HEADER_SIZE]; msgHeader[MSG_FIELD_HUB_HANDLE] = contextHubHandle; msgHeader[HEADER_FIELD_HUB_HANDLE] = contextHubHandle; msgHeader[MSG_FIELD_APP_INSTANCE] = OS_APP_INSTANCE; msgHeader[HEADER_FIELD_APP_INSTANCE] = OS_APP_INSTANCE; msgHeader[MSG_FIELD_VERSION] = 0; msgHeader[HEADER_FIELD_MSG_VERSION] = 0; msgHeader[MSG_FIELD_TYPE] = MSG_LOAD_NANO_APP; msgHeader[HEADER_FIELD_MSG_TYPE] = MSG_LOAD_NANO_APP; long appId = app.getAppId(); msgHeader[HEADER_FIELD_LOAD_APP_ID_LO] = (int)(appId & 0xFFFFFFFF); msgHeader[HEADER_FIELD_LOAD_APP_ID_HI] = (int)((appId >> 32) & 0xFFFFFFFF); if (nativeSendMessage(msgHeader, app.getAppBinary()) != 0) { if (nativeSendMessage(msgHeader, app.getAppBinary()) != 0) { return -1; return -1; Loading @@ -169,12 +183,14 @@ public class ContextHubService extends IContextHubService.Stub { // Call Native interface here // Call Native interface here int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_HEADER_SIZE]; msgHeader[MSG_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[HEADER_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[MSG_FIELD_APP_INSTANCE] = OS_APP_INSTANCE; msgHeader[HEADER_FIELD_APP_INSTANCE] = nanoAppInstanceHandle; msgHeader[MSG_FIELD_VERSION] = 0; msgHeader[HEADER_FIELD_MSG_VERSION] = 0; msgHeader[MSG_FIELD_TYPE] = MSG_UNLOAD_NANO_APP; msgHeader[HEADER_FIELD_MSG_TYPE] = MSG_UNLOAD_NANO_APP; if (nativeSendMessage(msgHeader, null) != 0) { byte msg[] = new byte[0]; if (nativeSendMessage(msgHeader, msg) != 0) { return -1; return -1; } } Loading Loading @@ -222,10 +238,10 @@ public class ContextHubService extends IContextHubService.Stub { checkPermissions(); checkPermissions(); int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_HEADER_SIZE]; msgHeader[MSG_FIELD_HUB_HANDLE] = hubHandle; msgHeader[HEADER_FIELD_HUB_HANDLE] = hubHandle; msgHeader[MSG_FIELD_APP_INSTANCE] = nanoAppHandle; msgHeader[HEADER_FIELD_APP_INSTANCE] = nanoAppHandle; msgHeader[MSG_FIELD_VERSION] = msg.getVersion(); msgHeader[HEADER_FIELD_MSG_VERSION] = msg.getVersion(); msgHeader[MSG_FIELD_TYPE] = msg.getMsgType(); msgHeader[HEADER_FIELD_MSG_TYPE] = msg.getMsgType(); return nativeSendMessage(msgHeader, msg.getData()); return nativeSendMessage(msgHeader, msg.getData()); } } Loading Loading @@ -269,15 +285,17 @@ public class ContextHubService extends IContextHubService.Stub { Log.v(TAG, "No message callbacks registered."); Log.v(TAG, "No message callbacks registered."); return 0; return 0; } } ContextHubMessage message = new ContextHubMessage(header[MSG_FIELD_TYPE], header[MSG_FIELD_VERSION], data); ContextHubMessage msg = new ContextHubMessage(header[HEADER_FIELD_MSG_TYPE], header[HEADER_FIELD_MSG_VERSION], data); for (int i = 0; i < callbacksCount; ++i) { for (int i = 0; i < callbacksCount; ++i) { IContextHubCallback callback = mCallbacksList.getBroadcastItem(i); IContextHubCallback callback = mCallbacksList.getBroadcastItem(i); try { try { callback.onMessageReceipt( callback.onMessageReceipt( header[MSG_FIELD_HUB_HANDLE], header[HEADER_FIELD_HUB_HANDLE], header[MSG_FIELD_APP_INSTANCE], header[HEADER_FIELD_APP_INSTANCE], message); msg); } catch (RemoteException e) { } catch (RemoteException e) { Log.i(TAG, "Exception (" + e + ") calling remote callback (" + callback + ")."); Log.i(TAG, "Exception (" + e + ") calling remote callback (" + callback + ")."); continue; continue; Loading Loading @@ -308,12 +326,20 @@ public class ContextHubService extends IContextHubService.Stub { return 0; return 0; } } private int deleteAppInstance(int appInstanceHandle) { if (mNanoAppHash.remove(appInstanceHandle) == null) { return -1; } return 0; } private void sendVrStateChangeMessageToApp(NanoAppInstanceInfo app, boolean vrModeEnabled) { private void sendVrStateChangeMessageToApp(NanoAppInstanceInfo app, boolean vrModeEnabled) { int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_HEADER_SIZE]; msgHeader[MSG_FIELD_TYPE] = 0; msgHeader[HEADER_FIELD_MSG_TYPE] = 0; msgHeader[MSG_FIELD_VERSION] = 0; msgHeader[HEADER_FIELD_MSG_VERSION] = 0; msgHeader[MSG_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[HEADER_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[MSG_FIELD_APP_INSTANCE] = app.getHandle(); msgHeader[HEADER_FIELD_APP_INSTANCE] = app.getHandle(); byte[] data = new byte[1]; byte[] data = new byte[1]; data[0] = (byte) ((vrModeEnabled) ? 1 : 0); data[0] = (byte) ((vrModeEnabled) ? 1 : 0); Loading Loading
core/java/android/hardware/location/ContextHubService.java +53 −27 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,11 @@ package android.hardware.location; package android.hardware.location; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import android.Manifest; import android.Manifest; import android.content.Context; import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.PackageManager; Loading Loading @@ -53,10 +58,14 @@ public class ContextHubService extends IContextHubService.Stub { private static final int PRE_LOADED_APP_MEM_REQ = 0; private static final int PRE_LOADED_APP_MEM_REQ = 0; private static final int MSG_HEADER_SIZE = 4; private static final int MSG_HEADER_SIZE = 4; private static final int MSG_FIELD_TYPE = 0; private static final int HEADER_FIELD_MSG_TYPE = 0; private static final int MSG_FIELD_VERSION = 1; private static final int HEADER_FIELD_MSG_VERSION = 1; private static final int MSG_FIELD_HUB_HANDLE = 2; private static final int HEADER_FIELD_HUB_HANDLE = 2; private static final int MSG_FIELD_APP_INSTANCE = 3; private static final int HEADER_FIELD_APP_INSTANCE = 3; private static final int HEADER_FIELD_LOAD_APP_ID_LO = MSG_HEADER_SIZE; private static final int HEADER_FIELD_LOAD_APP_ID_HI = MSG_HEADER_SIZE + 1; private static final int MSG_LOAD_APP_HEADER_SIZE = MSG_HEADER_SIZE + 2; private static final int OS_APP_INSTANCE = -1; private static final int OS_APP_INSTANCE = -1; Loading Loading @@ -146,11 +155,16 @@ public class ContextHubService extends IContextHubService.Stub { return -1; return -1; } } int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_LOAD_APP_HEADER_SIZE]; msgHeader[MSG_FIELD_HUB_HANDLE] = contextHubHandle; msgHeader[HEADER_FIELD_HUB_HANDLE] = contextHubHandle; msgHeader[MSG_FIELD_APP_INSTANCE] = OS_APP_INSTANCE; msgHeader[HEADER_FIELD_APP_INSTANCE] = OS_APP_INSTANCE; msgHeader[MSG_FIELD_VERSION] = 0; msgHeader[HEADER_FIELD_MSG_VERSION] = 0; msgHeader[MSG_FIELD_TYPE] = MSG_LOAD_NANO_APP; msgHeader[HEADER_FIELD_MSG_TYPE] = MSG_LOAD_NANO_APP; long appId = app.getAppId(); msgHeader[HEADER_FIELD_LOAD_APP_ID_LO] = (int)(appId & 0xFFFFFFFF); msgHeader[HEADER_FIELD_LOAD_APP_ID_HI] = (int)((appId >> 32) & 0xFFFFFFFF); if (nativeSendMessage(msgHeader, app.getAppBinary()) != 0) { if (nativeSendMessage(msgHeader, app.getAppBinary()) != 0) { return -1; return -1; Loading @@ -169,12 +183,14 @@ public class ContextHubService extends IContextHubService.Stub { // Call Native interface here // Call Native interface here int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_HEADER_SIZE]; msgHeader[MSG_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[HEADER_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[MSG_FIELD_APP_INSTANCE] = OS_APP_INSTANCE; msgHeader[HEADER_FIELD_APP_INSTANCE] = nanoAppInstanceHandle; msgHeader[MSG_FIELD_VERSION] = 0; msgHeader[HEADER_FIELD_MSG_VERSION] = 0; msgHeader[MSG_FIELD_TYPE] = MSG_UNLOAD_NANO_APP; msgHeader[HEADER_FIELD_MSG_TYPE] = MSG_UNLOAD_NANO_APP; if (nativeSendMessage(msgHeader, null) != 0) { byte msg[] = new byte[0]; if (nativeSendMessage(msgHeader, msg) != 0) { return -1; return -1; } } Loading Loading @@ -222,10 +238,10 @@ public class ContextHubService extends IContextHubService.Stub { checkPermissions(); checkPermissions(); int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_HEADER_SIZE]; msgHeader[MSG_FIELD_HUB_HANDLE] = hubHandle; msgHeader[HEADER_FIELD_HUB_HANDLE] = hubHandle; msgHeader[MSG_FIELD_APP_INSTANCE] = nanoAppHandle; msgHeader[HEADER_FIELD_APP_INSTANCE] = nanoAppHandle; msgHeader[MSG_FIELD_VERSION] = msg.getVersion(); msgHeader[HEADER_FIELD_MSG_VERSION] = msg.getVersion(); msgHeader[MSG_FIELD_TYPE] = msg.getMsgType(); msgHeader[HEADER_FIELD_MSG_TYPE] = msg.getMsgType(); return nativeSendMessage(msgHeader, msg.getData()); return nativeSendMessage(msgHeader, msg.getData()); } } Loading Loading @@ -269,15 +285,17 @@ public class ContextHubService extends IContextHubService.Stub { Log.v(TAG, "No message callbacks registered."); Log.v(TAG, "No message callbacks registered."); return 0; return 0; } } ContextHubMessage message = new ContextHubMessage(header[MSG_FIELD_TYPE], header[MSG_FIELD_VERSION], data); ContextHubMessage msg = new ContextHubMessage(header[HEADER_FIELD_MSG_TYPE], header[HEADER_FIELD_MSG_VERSION], data); for (int i = 0; i < callbacksCount; ++i) { for (int i = 0; i < callbacksCount; ++i) { IContextHubCallback callback = mCallbacksList.getBroadcastItem(i); IContextHubCallback callback = mCallbacksList.getBroadcastItem(i); try { try { callback.onMessageReceipt( callback.onMessageReceipt( header[MSG_FIELD_HUB_HANDLE], header[HEADER_FIELD_HUB_HANDLE], header[MSG_FIELD_APP_INSTANCE], header[HEADER_FIELD_APP_INSTANCE], message); msg); } catch (RemoteException e) { } catch (RemoteException e) { Log.i(TAG, "Exception (" + e + ") calling remote callback (" + callback + ")."); Log.i(TAG, "Exception (" + e + ") calling remote callback (" + callback + ")."); continue; continue; Loading Loading @@ -308,12 +326,20 @@ public class ContextHubService extends IContextHubService.Stub { return 0; return 0; } } private int deleteAppInstance(int appInstanceHandle) { if (mNanoAppHash.remove(appInstanceHandle) == null) { return -1; } return 0; } private void sendVrStateChangeMessageToApp(NanoAppInstanceInfo app, boolean vrModeEnabled) { private void sendVrStateChangeMessageToApp(NanoAppInstanceInfo app, boolean vrModeEnabled) { int[] msgHeader = new int[MSG_HEADER_SIZE]; int[] msgHeader = new int[MSG_HEADER_SIZE]; msgHeader[MSG_FIELD_TYPE] = 0; msgHeader[HEADER_FIELD_MSG_TYPE] = 0; msgHeader[MSG_FIELD_VERSION] = 0; msgHeader[HEADER_FIELD_MSG_VERSION] = 0; msgHeader[MSG_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[HEADER_FIELD_HUB_HANDLE] = ANY_HUB; msgHeader[MSG_FIELD_APP_INSTANCE] = app.getHandle(); msgHeader[HEADER_FIELD_APP_INSTANCE] = app.getHandle(); byte[] data = new byte[1]; byte[] data = new byte[1]; data[0] = (byte) ((vrModeEnabled) ? 1 : 0); data[0] = (byte) ((vrModeEnabled) ? 1 : 0); Loading