diff options
| -rw-r--r-- | api/system-current.txt | 7 | ||||
| -rw-r--r-- | core/java/android/hardware/location/NanoApp.java | 37 | ||||
| -rw-r--r-- | services/core/java/com/android/server/location/ContextHubService.java | 39 |
3 files changed, 33 insertions, 50 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index cb0d7b1371b0..48f8ce5324e3 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -16935,10 +16935,11 @@ package android.hardware.location { public class NanoApp { ctor public NanoApp(); - ctor public NanoApp(int, byte[]); + ctor public deprecated NanoApp(int, byte[]); + ctor public NanoApp(long, byte[]); method public int describeContents(); method public byte[] getAppBinary(); - method public int getAppId(); + method public long getAppId(); method public int getAppVersion(); method public java.lang.String getName(); method public int getNeededExecMemBytes(); @@ -16948,7 +16949,7 @@ package android.hardware.location { method public int[] getOutputEvents(); method public java.lang.String getPublisher(); method public void setAppBinary(byte[]); - method public void setAppId(int); + method public void setAppId(long); method public void setAppVersion(int); method public void setName(java.lang.String); method public void setNeededExecMemBytes(int); diff --git a/core/java/android/hardware/location/NanoApp.java b/core/java/android/hardware/location/NanoApp.java index 03ac4a2afaac..d5d428e95080 100644 --- a/core/java/android/hardware/location/NanoApp.java +++ b/core/java/android/hardware/location/NanoApp.java @@ -39,7 +39,7 @@ public class NanoApp { private String mPublisher; private String mName; - private int mAppId; + private long mAppId; private boolean mAppIdSet; private int mAppVersion; @@ -53,7 +53,7 @@ public class NanoApp { /** * If this version of the constructor is used, the methods - * {@link #setAppBinary(byte[])} and {@link #setAppId(int)} must be called + * {@link #setAppBinary(byte[])} and {@link #setAppId(long)} must be called * prior to passing this object to any managers. * * @see #NanoApp(int, byte[]) @@ -77,8 +77,29 @@ public class NanoApp { * @see #setNeededExecMemBytes(int) * @see #setNeededSensors(int[]) * @see #setOutputEvents(int[]) + * + * @deprecated Use NanoApp(long, byte[]) instead + */ + @Deprecated public NanoApp(int appId, byte[] appBinary) { + Log.w(TAG, "NanoApp(int, byte[]) is deprecated, please use NanoApp(long, byte[]) instead."); + } + + /** + * Initialize a NanoApp with the given id and binary. + * + * While this sets defaults for other fields, users will want to provide + * other values for those fields in most cases. + * + * @see #setPublisher(String) + * @see #setName(String) + * @see #setAppVersion(int) + * @see #setNeededReadMemBytes(int) + * @see #setNeededWriteMemBytes(int) + * @see #setNeededExecMemBytes(int) + * @see #setNeededSensors(int[]) + * @see #setOutputEvents(int[]) */ - public NanoApp(int appId, byte[] appBinary) { + public NanoApp(long appId, byte[] appBinary) { mPublisher = UNKNOWN; mName = UNKNOWN; @@ -116,9 +137,9 @@ public class NanoApp { /** * set the app identifier * - * @param appId add identifier + * @param appId app identifier */ - public void setAppId(int appId) { + public void setAppId(long appId) { mAppId = appId; mAppIdSet = true; } @@ -209,7 +230,7 @@ public class NanoApp { * * @return identifier for this app */ - public int getAppId() { + public long getAppId() { return mAppId; } @@ -280,7 +301,7 @@ public class NanoApp { mPublisher = in.readString(); mName = in.readString(); - mAppId = in.readInt(); + mAppId = in.readLong(); mAppVersion = in.readInt(); mNeededReadMemBytes = in.readInt(); mNeededWriteMemBytes = in.readInt(); @@ -313,7 +334,7 @@ public class NanoApp { out.writeString(mPublisher); out.writeString(mName); - out.writeInt(mAppId); + out.writeLong(mAppId); out.writeInt(mAppVersion); out.writeInt(mNeededReadMemBytes); out.writeInt(mNeededWriteMemBytes); diff --git a/services/core/java/com/android/server/location/ContextHubService.java b/services/core/java/com/android/server/location/ContextHubService.java index a4c0fa85f2f7..258fb6d02c7a 100644 --- a/services/core/java/com/android/server/location/ContextHubService.java +++ b/services/core/java/com/android/server/location/ContextHubService.java @@ -120,36 +120,6 @@ public class ContextHubService extends IContextHubService.Stub { return mContextHubInfo[contextHubHandle]; } - // TODO(b/30808791): Remove this when NanoApp's API is correctly treating - // app IDs as 64-bits. - private static long parseAppId(NanoApp app) { - // NOTE: If this shifting seems odd (since it's actually "ONAN"), note - // that it matches how this is defined in context_hub.h. - final int HEADER_MAGIC = - (((int)'N' << 0) | - ((int)'A' << 8) | - ((int)'N' << 16) | - ((int)'O' << 24)); - final int HEADER_MAGIC_OFFSET = 4; - final int HEADER_APP_ID_OFFSET = 8; - - ByteBuffer header = ByteBuffer.wrap(app.getAppBinary()) - .order(ByteOrder.LITTLE_ENDIAN); - - try { - if (header.getInt(HEADER_MAGIC_OFFSET) == HEADER_MAGIC) { - // This is a legitimate nanoapp header. Let's grab the app ID. - return header.getLong(HEADER_APP_ID_OFFSET); - } - } catch (IndexOutOfBoundsException e) { - // The header is undersized. We'll fall through to our code - // path below, which handles being unable to parse the header. - } - // We failed to parse the header. Even through it's probably wrong, - // let's give NanoApp's idea of our ID. This is at least consistent. - return app.getAppId(); - } - @Override public int loadNanoApp(int contextHubHandle, NanoApp app) throws RemoteException { checkPermissions(); @@ -169,15 +139,6 @@ public class ContextHubService extends IContextHubService.Stub { msgHeader[HEADER_FIELD_MSG_TYPE] = MSG_LOAD_NANO_APP; long appId = app.getAppId(); - // TODO(b/30808791): Remove this hack when the NanoApp API is fixed, - // and getAppId() returns a 'long' instead of an 'int'. - if ((appId >> 32) != 0) { - // We're unlikely to notice this warning, but at least - // we can avoid running our hack logic. - Log.w(TAG, "Code has not been updated since API fix."); - } else { - appId = parseAppId(app); - } msgHeader[HEADER_FIELD_LOAD_APP_ID_LO] = (int)(appId & 0xFFFFFFFF); msgHeader[HEADER_FIELD_LOAD_APP_ID_HI] = (int)((appId >> 32) & 0xFFFFFFFF); |