summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Greg Kaiser <gkaiser@google.com> 2016-08-29 17:43:29 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-08-29 17:43:31 +0000
commit143aaa6d05332515afca4977d29bcfc66c015d27 (patch)
treef55fbcf9f007a24a7143129e3766776216fa7c8b
parent81f876e7950a37f55ea5dc55a42d3950d6134a03 (diff)
parent5817ce0c13c4d190845b0cc74a4232cc845c31e3 (diff)
Merge "ContextHubService: Hack in Google vendor value" into nyc-mr1-dev
-rw-r--r--core/java/android/hardware/location/ContextHubService.java22
1 files changed, 22 insertions, 0 deletions
diff --git a/core/java/android/hardware/location/ContextHubService.java b/core/java/android/hardware/location/ContextHubService.java
index a699b687918b..eea2387d7dea 100644
--- a/core/java/android/hardware/location/ContextHubService.java
+++ b/core/java/android/hardware/location/ContextHubService.java
@@ -162,6 +162,28 @@ 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.
+ // Due to a bug in the NanoApp API, only the least significant four
+ // bytes of the app ID can be stored. The most significant five
+ // bytes of a normal app ID are the "vendor", and thus the most
+ // significant of the bytes we have is the least significant byte
+ // of the vendor. In the case that byte is the ASCII value for
+ // lower-case 'L', we assume the vendor is supposed to be "Googl"
+ // and fill in the four most significant bytes accordingly.
+ 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 {
+ // Note: Lower-case 'L', not the number 1.
+ if (((appId >> 24) & 0xFF) == (long)'l') {
+ // Assume we're a Google nanoapp.
+ appId |= ((long)'G') << 56;
+ appId |= ((long)'o') << 48;
+ appId |= ((long)'o') << 40;
+ appId |= ((long)'g') << 32;
+ }
+ }
msgHeader[HEADER_FIELD_LOAD_APP_ID_LO] = (int)(appId & 0xFFFFFFFF);
msgHeader[HEADER_FIELD_LOAD_APP_ID_HI] = (int)((appId >> 32) & 0xFFFFFFFF);