blob: 10b058ca2ec98388c89edd7be92d5bc56268798b [file] [log] [blame]
/*
* Copyright (C) 2014 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.hardware.hdmi;
import android.os.IBinder;
import android.os.RemoteException;
/**
* The HdmiCecManager class is used to provide an HdmiCecClient instance,
* get various information on HDMI ports configuration. It is connected to actual hardware
* via HdmiCecService.
*/
public final class HdmiCecManager {
private final IHdmiCecService mService;
/**
* @hide - hide this constructor because it has a parameter of type IHdmiCecService,
* which is a system private class. The right way to create an instance of this class
* is using the factory Context.getSystemService.
*/
public HdmiCecManager(IHdmiCecService service) {
mService = service;
}
/**
* Provide the HdmiCecClient instance of the given type. It also registers the listener
* for client to get the events coming to the device.
*
* @param type type of the HDMI-CEC logical device
* @param listener listener to be called
* @return {@link HdmiCecClient} instance. {@code null} on failure.
*/
public HdmiCecClient getClient(int type, HdmiCecClient.Listener listener) {
if (mService == null) {
return null;
}
try {
IBinder b = mService.allocateLogicalDevice(type, getListenerWrapper(listener));
return HdmiCecClient.create(mService, b);
} catch (RemoteException e) {
return null;
}
}
private IHdmiCecListener getListenerWrapper(final HdmiCecClient.Listener listener) {
// TODO: The message/events are not yet forwarded to client since it is not clearly
// defined as to how/who to handle them. Revisit it once the decision is
// made on what messages will have to reach the clients, what will be
// handled by service/manager.
return new IHdmiCecListener.Stub() {
@Override
public void onMessageReceived(HdmiCecMessage message) {
// Do nothing.
}
@Override
public void onCableStatusChanged(boolean connected) {
// Do nothing.
}
};
}
}