Merge "Migrate Test Targets to New Android Ownership Model" into main
diff --git a/Android.bp b/Android.bp
index e801d0e..c7150c6 100644
--- a/Android.bp
+++ b/Android.bp
@@ -95,9 +95,6 @@
         "libhwservicemanager_shared_libs",
         "libtokenmanager_shared_libs",
     ],
-    vintf_fragments: [
-        "hwservicemanager.xml",
-    ],
     init_rc: [
         "hwservicemanager.rc",
     ],
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 052dadf..7a20e90 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -5,6 +5,14 @@
     },
     {
       "name": "hidl_lazy_test"
+    },
+    {
+       "name": "CtsOsTestCases",
+       "options": [
+           {
+              "include-filter": "android.os.cts.HwBinderTest"
+           }
+       ]
     }
   ],
   "hwasan-presubmit": [
diff --git a/hwservicemanager.xml b/hwservicemanager.xml
index 65220d8..cd60550 100644
--- a/hwservicemanager.xml
+++ b/hwservicemanager.xml
@@ -1,5 +1,5 @@
 <manifest version="1.0" type="framework">
-    <hal>
+    <hal max-level="8">
         <name>android.hidl.manager</name>
         <transport>hwbinder</transport>
         <version>1.2</version>
@@ -8,7 +8,7 @@
             <instance>default</instance>
         </interface>
     </hal>
-    <hal>
+    <hal max-level="8">
         <name>android.hidl.token</name>
         <transport>hwbinder</transport>
         <version>1.0</version>
diff --git a/hwservicemanager_no_max.xml b/hwservicemanager_no_max.xml
new file mode 100644
index 0000000..65220d8
--- /dev/null
+++ b/hwservicemanager_no_max.xml
@@ -0,0 +1,20 @@
+<manifest version="1.0" type="framework">
+    <hal>
+        <name>android.hidl.manager</name>
+        <transport>hwbinder</transport>
+        <version>1.2</version>
+        <interface>
+            <name>IServiceManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal>
+        <name>android.hidl.token</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>ITokenManager</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+</manifest>
diff --git a/service.cpp b/service.cpp
index 3766bc5..ec8cef1 100644
--- a/service.cpp
+++ b/service.cpp
@@ -36,6 +36,7 @@
 
 #include "ServiceManager.h"
 #include "TokenManager.h"
+#include "Vintf.h"
 
 // libutils:
 using android::sp;
@@ -146,7 +147,8 @@
 
     // TODO(b/36424585): make fatal
     ProcessState::self()->setCallRestriction(ProcessState::CallRestriction::ERROR_IF_NOT_ONEWAY);
-    if (!android::hardware::isHidlSupported()) {
+    auto transport = android::hardware::getTransport(ServiceManager::descriptor, serviceName);
+    if (transport == android::vintf::Transport::EMPTY) {
         ALOGI("HIDL is not supported on this device so hwservicemanager is not needed");
         int rc = property_set("hwservicemanager.disabled", "true");
         if (rc) {
@@ -166,9 +168,17 @@
         ALOGE("Failed to register hwservicemanager with itself.");
     }
 
-    sp<TokenManager> tokenManager = new TokenManager();
-    if (!manager->add(serviceName, tokenManager).withDefault(false)) {
-        ALOGE("Failed to register ITokenManager with hwservicemanager.");
+    // Check to make sure we should be registering tokenManager first. Only if
+    // it's declared in the manifest.
+    sp<TokenManager> tokenManager;
+    if (android::vintf::Transport::EMPTY !=
+        android::hardware::getTransport(TokenManager::descriptor, serviceName)) {
+        tokenManager = new TokenManager();
+        if (!manager->add(serviceName, tokenManager).withDefault(false)) {
+            ALOGE("Failed to register ITokenManager with hwservicemanager.");
+        }
+    } else {
+        ALOGW("Not registering android.hidl.token service because it is no longer supported");
     }
 
     // Tell IPCThreadState we're the service manager