Add setDisplayService and waitDisplayService in IVirtualizationServiceInternal

In normal app context, it cannot add a service into service manager, so
add something similar into VirtualizationServiceInternal.

Bug: 331708504
Test: check if the display shows
Change-Id: I895e6a8affe3bc4e9de6bea226ebc40a7fcf7a0d
diff --git a/libs/android_display_backend/Android.bp b/libs/android_display_backend/Android.bp
index f818951..6ad5fab 100644
--- a/libs/android_display_backend/Android.bp
+++ b/libs/android_display_backend/Android.bp
@@ -37,11 +37,12 @@
     srcs: [
         "crosvm_android_display_client.cpp",
     ],
-    stl: "libc++_static",
     whole_static_libs: [
         "libcrosvm_android_display_service-ndk",
+        "android.system.virtualizationservice_internal-ndk",
+        "android.system.virtualizationcommon-ndk",
+        "android.system.virtualizationservice-ndk",
         "libyuv",
-        "libc++_static",
     ],
     shared_libs: [
         "libbinder_ndk",
diff --git a/libs/android_display_backend/crosvm_android_display_client.cpp b/libs/android_display_backend/crosvm_android_display_client.cpp
index 91412af..6737453 100644
--- a/libs/android_display_backend/crosvm_android_display_client.cpp
+++ b/libs/android_display_backend/crosvm_android_display_client.cpp
@@ -15,6 +15,7 @@
  */
 
 #include <aidl/android/crosvm/BnCrosvmAndroidDisplayService.h>
+#include <aidl/android/system/virtualizationservice_internal/IVirtualizationServiceInternal.h>
 #include <android/binder_manager.h>
 #include <android/binder_process.h>
 #include <android/native_window.h>
@@ -28,6 +29,8 @@
 #include <mutex>
 #include <vector>
 
+using aidl::android::system::virtualizationservice_internal::IVirtualizationServiceInternal;
+
 #define LIBEXPORT __attribute__((visibility("default"))) extern "C"
 
 typedef void (*android_display_log_callback_type)(const char* message);
@@ -104,9 +107,16 @@
                strlen(name));
         return nullptr;
     }
+    ::ndk::SpAIBinder binder(
+            AServiceManager_waitForService("android.system.virtualizationservice"));
 
-    auto status = AServiceManager_addService(service->asBinder().get(), name);
-    if (status != STATUS_OK) {
+    auto virt_service = IVirtualizationServiceInternal::fromBinder(binder);
+    if (virt_service == nullptr) {
+        ErrorF(error_callback, "Failed to find android.system.virtualizationservice");
+        return nullptr;
+    }
+    auto status = virt_service->setDisplayService(service->asBinder());
+    if (!status.isOk()) {
         ErrorF(error_callback, "Failed to register %s",
                aidl::android::crosvm::ICrosvmAndroidDisplayService::descriptor);
         return nullptr;