From 2e293aa8ae8dd977e54aa2c2f2e1ede2af5792ed Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Wed, 23 Sep 2020 00:25:16 +0000 Subject: servicemanager: vintf declared API servicemanager already has to parse VINTF configurations, so exposing this functionality here (mirroring hwservicemanager). Note, this API, like isDeclared is not branded as "VINTF" for future compatibility with APEX or other interfaces. Bug: 168715768 Test: manual Change-Id: Ifbc44677605de757c46ef17f7f29fd83e66a8161 --- libs/binder/IServiceManager.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'libs/binder/IServiceManager.cpp') diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp index 9aa82d908c..6d728dc6b1 100644 --- a/libs/binder/IServiceManager.cpp +++ b/libs/binder/IServiceManager.cpp @@ -74,6 +74,7 @@ public: Vector listServices(int dumpsysPriority) override; sp waitForService(const String16& name16) override; bool isDeclared(const String16& name) override; + Vector getDeclaredInstances(const String16& interface) override; // for legacy ABI const String16& getInterfaceDescriptor() const override { @@ -373,4 +374,18 @@ bool ServiceManagerShim::isDeclared(const String16& name) { return declared; } +Vector ServiceManagerShim::getDeclaredInstances(const String16& interface) { + std::vector out; + if (!mTheRealServiceManager->getDeclaredInstances(String8(interface).c_str(), &out).isOk()) { + return {}; + } + + Vector res; + res.setCapacity(out.size()); + for (const std::string& instance : out) { + res.push(String16(instance.c_str())); + } + return res; +} + } // namespace android -- cgit v1.2.3-59-g8ed1b