/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.hidl.manager@1.2; import @1.1::IServiceManager; import IClientCallback; interface IServiceManager extends @1.1::IServiceManager { /** * Adds a callback that must be called when the specified server has no clients. * * If the service has clients at the time of registration, the callback is called with * hasClients true. After that, it is called based on the changes in clientele. * * @param fqName Fully-qualified interface name (used to register) * @param name Instance name (of the registered service) * @param server non-null service waiting to have no clients (previously registered) * @param cb non-null callback to call when there are no clients * @return success * true on success * false if either * - the server or cb parameters are null * - this is called by a process other than the server process */ registerClientCallback(string fqName, string name, interface server, IClientCallback cb) generates (bool success); /** * Removes a callback previously registered with registerClientCallback. * * If server is null, then this must remove the cb from all matching services. * * @param server service registered with registerClientCallback * @param cb non-null callback to remove * @return success * true if the server(s) have been removed * false if cb is null or if the client callback or server could not be found */ unregisterClientCallback(interface server, IClientCallback cb) generates (bool success); /** * Exactly the same as @1.0::IServiceManager.add, but the interfaceChain of the service is * provided in the same call. * * @param name Instance name. Must also be used to retrieve service. * @param service Handle to registering service. * @param chain service->interfaceChain * * @return success Whether or not the service was registered. */ addWithChain(string name, interface service, vec chain) generates (bool success); /** * List all instances of a particular service from the manifest. Must be sorted. These HALs * may not be started if they are lazy. * * See also @1.0::IServiceManager's listByInterface function. * * @param fqName Fully-qualified interface name. * * @return instanceNames List of instance names running the particular service. */ listManifestByInterface(string fqName) generates (vec instanceNames); /** * Unregisters a service if there are no clients for it. This must only unregister the * service if it is called from the same process that registered the service. * * This unregisters all instances of the service, even if they are under a different instance * name. * * Recommended usage is when creating a lazy process, try unregistering when IClientCallback's * onClients(*, false) is called. If this unregister is successful, then it is safe to exit. If * it is unsuccessful, then you can assume a client re-associated with the server. If a process * has multiple servers, and only some succeed in unregistration, then the unregistered services * can be re-registered. * * See also addWithChain and @1.0::IServiceManager's add. * * @param fqName Fully-qualified interface name. * @param name Instance name. * @param service Handle to registering service. * * @return success Whether the service was successfully unregistered. */ tryUnregister(string fqName, string name, interface service) generates (bool success); };