Merge "Add type to framework manifest file." into oc-dev
diff --git a/transport/token/1.0/ITokenManager.hal b/transport/token/1.0/ITokenManager.hal
index b1bb735..23a44bd 100644
--- a/transport/token/1.0/ITokenManager.hal
+++ b/transport/token/1.0/ITokenManager.hal
@@ -26,10 +26,12 @@
      * Register an interface. The server must keep a strong reference
      * to the interface until the token is destroyed by calling unregister.
      *
+     * Must return empty token on failure.
+     *
      * @param store Interface which can later be fetched with the returned token.
      * @return token Opaque value which may be used as inputs to other functions.
      */
-    createToken(interface store) generates (uint64_t token);
+    createToken(interface store) generates (vec<uint8_t>token);
 
     /**
      * Destory a token and the strong reference to the associated interface.
@@ -37,7 +39,7 @@
      * @param token Token received from createToken
      * @return success Whether or not the token was successfully unregistered.
      */
-    unregister(uint64_t token) generates (bool success);
+    unregister(vec<uint8_t> token) generates (bool success);
 
     /**
      * Fetch an interface from a provided token.
@@ -46,5 +48,5 @@
      * @return store Interface registered with createToken and the corresponding
      *               token or nullptr.
      */
-    get(uint64_t token) generates (interface store);
+    get(vec<uint8_t> token) generates (interface store);
 };
diff --git a/transport/token/1.0/utils/HybridInterface.cpp b/transport/token/1.0/utils/HybridInterface.cpp
index f28446e..106ad4e 100644
--- a/transport/token/1.0/utils/HybridInterface.cpp
+++ b/transport/token/1.0/utils/HybridInterface.cpp
@@ -89,19 +89,17 @@
 }
 
 bool createHalToken(const sp<HInterface>& interface, HalToken* token) {
-    hardware::Return<HalToken> transaction(false);
+    hardware::Return<void> transaction;
     {
         std::lock_guard<std::mutex> lock(gTokenManagerLock);
         if (isBadTokenManager()) {
             return false;
         }
-        transaction = gTokenManager->createToken(interface);
-        if (isBadTransaction(transaction)) {
-            return false;
-        }
+        transaction = gTokenManager->createToken(interface, [&](const HalToken &newToken) {
+            *token = newToken;
+        });
     }
-    *token = static_cast<HalToken>(transaction);
-    return true;
+    return !isBadTransaction(transaction);
 }
 
 bool deleteHalToken(const HalToken& token) {
diff --git a/transport/token/1.0/utils/include/hidl/HybridInterface.h b/transport/token/1.0/utils/include/hidl/HybridInterface.h
index 42d3734..8c3e742 100644
--- a/transport/token/1.0/utils/include/hidl/HybridInterface.h
+++ b/transport/token/1.0/utils/include/hidl/HybridInterface.h
@@ -96,7 +96,7 @@
 
 namespace android {
 
-typedef uint64_t HalToken;
+typedef ::android::hardware::hidl_vec<uint8_t> HalToken;
 typedef ::android::hidl::base::V1_0::IBase HInterface;
 
 constexpr uint32_t DEFAULT_GET_HAL_TOKEN_TRANSACTION_CODE =
@@ -247,7 +247,7 @@
             ALOGE("H2BConverter: Failed to create HAL token.");
         }
         reply->writeBool(result);
-        reply->writeUint64(token);
+        reply->writeByteArray(token.size(), token.data());
         return NO_ERROR;
     }
     return BNINTERFACE::onTransact(code, data, reply, flags);
@@ -313,7 +313,11 @@
     data.writeInterfaceToken(BaseInterface::getInterfaceDescriptor());
     if (mImpl->transact(GET_HAL_TOKEN, data, &reply) == NO_ERROR) {
         bool tokenCreated = reply.readBool();
-        HalToken token = reply.readUint64();
+
+        std::vector<uint8_t> tokenVector;
+        reply.readByteVector(&tokenVector);
+        HalToken token = HalToken(tokenVector);
+
         if (tokenCreated) {
             sp<HInterface> hBase = retrieveHalInterface(token);
             if (hBase != nullptr) {