hidl: cpp: Use the root namespace for type tags

Fixes a collision if a vendor uses a namespace that contain android:

out/soong/.intermediates/vendor/corp/interfaces/interface/1.0/com.corp.android.something@1.0_genc++_headers/
gen/com/corp/android/something/1.0/ISomething.h:24:13: error: no member named 'hardware' in namespace 'com:
:corp::android'; did you mean '::android::hardware'?
    typedef android::hardware::details::i_tag _hidl_tag;
            ^~~~~~~~~~~~~~~~~
            ::android::hardware

Also adds an an interface to hidl.tests.vendor.android which is
generated in cpp_impl_test, providing a regression test for this
behavior.

Change-Id: Ia6a778127678771e47ac65cec019f8fc1c69e7d0
diff --git a/generateCpp.cpp b/generateCpp.cpp
index f697392..ba12300 100644
--- a/generateCpp.cpp
+++ b/generateCpp.cpp
@@ -285,7 +285,7 @@
         DocComment("Type tag for use in template logic that indicates this is a 'pure' class.",
                    HIDL_LOCATION_HERE)
                 .emit(out);
-        generateCppTag(out, "android::hardware::details::i_tag");
+        generateCppTag(out, "::android::hardware::details::i_tag");
 
         DocComment("Fully qualified interface name: \"" + iface->fqName().string() + "\"",
                    HIDL_LOCATION_HERE)
@@ -697,7 +697,7 @@
     DocComment("Type tag for use in template logic that indicates this is a 'native' class.",
                HIDL_LOCATION_HERE)
             .emit(out);
-    generateCppTag(out, "android::hardware::details::bnhw_tag");
+    generateCppTag(out, "::android::hardware::details::bnhw_tag");
 
     out << "::android::sp<" << iface->definedName() << "> getImpl() { return _hidl_mImpl; }\n";
 
@@ -789,7 +789,7 @@
     DocComment("Type tag for use in template logic that indicates this is a 'proxy' class.",
                HIDL_LOCATION_HERE)
             .emit(out);
-    generateCppTag(out, "android::hardware::details::bphw_tag");
+    generateCppTag(out, "::android::hardware::details::bphw_tag");
 
     out << "virtual bool isRemote() const override { return true; }\n\n";
 
@@ -1675,7 +1675,7 @@
 
     out.endl();
     generateTemplatizationLink(out);
-    generateCppTag(out, "android::hardware::details::bs_tag");
+    generateCppTag(out, "::android::hardware::details::bs_tag");
 
     generateMethods(out, [&](const Method* method, const Interface* superInterface) {
         generatePassthroughMethod(out, method, superInterface);