diff options
author | Jinsuk Kim <jinsukkim@google.com> | 2014-07-30 14:28:17 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-07-30 14:28:17 +0000 |
commit | 006c117421bede8bd0425ddad688f70ff2de9db3 (patch) | |
tree | f8752e24f415a9c81227cf113c82adced414f4ad | |
parent | b47a622fca343a1d9893c0469e840f971d187e2d (diff) | |
parent | 56d138c2ef316ae8d68424c289c13bd6f362757b (diff) | |
download | frameworks_base-006c117421bede8bd0425ddad688f70ff2de9db3.zip frameworks_base-006c117421bede8bd0425ddad688f70ff2de9db3.tar.gz frameworks_base-006c117421bede8bd0425ddad688f70ff2de9db3.tar.bz2 |
am 58b0f818: am e129f19b: am 78aaab20: Merge "Send TV app the intent for the new active source" into lmp-dev
* commit '58b0f818878fbd739ed5420ac62fc69877a50e63':
Send TV app the intent for the new active source
-rw-r--r-- | core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java | 50 | ||||
-rw-r--r-- | services/core/java/com/android/server/tv/TvInputHardwareManager.java | 19 |
2 files changed, 60 insertions, 9 deletions
diff --git a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java index d663714..27829a7 100644 --- a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java +++ b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java @@ -24,6 +24,8 @@ import android.os.Parcelable; * A class to encapsulate device information for HDMI-CEC. This container * include basic information such as logical address, physical address and * device type, and additional information like vendor id and osd name. + * Also used to keep the information of non-CEC devices for which only + * port ID, physical address are meaningful. * * @hide */ @@ -71,6 +73,7 @@ public final class HdmiCecDeviceInfo implements Parcelable { private final int mDeviceType; private final int mVendorId; private final String mDisplayName; + private final boolean mIsCecDevice; /** * A helper class to deserialize {@link HdmiCecDeviceInfo} for a parcel. @@ -96,7 +99,7 @@ public final class HdmiCecDeviceInfo implements Parcelable { }; /** - * Constructor. + * Constructor. Used to initialize the instance for CEC device. * * @param logicalAddress logical address of HDMI-CEC device * @param physicalAddress physical address of HDMI-CEC device @@ -114,6 +117,24 @@ public final class HdmiCecDeviceInfo implements Parcelable { mDeviceType = deviceType; mDisplayName = displayName; mVendorId = vendorId; + mIsCecDevice = true; + } + + /** + * Constructor. Used to initialize the instance for non-CEC device. + * + * @param physicalAddress physical address of HDMI device + * @param portId HDMI port ID (1 for HDMI1) + * @hide + */ + public HdmiCecDeviceInfo(int physicalAddress, int portId) { + mLogicalAddress = -1; + mPhysicalAddress = physicalAddress; + mPortId = portId; + mDeviceType = DEVICE_RESERVED; + mDisplayName = null; + mVendorId = 0; + mIsCecDevice = false; } /** @@ -155,6 +176,14 @@ public final class HdmiCecDeviceInfo implements Parcelable { } /** + * Return {@code true} if the device represents an HDMI-CEC device. {@code false} + * if the device is either MHL or non-CEC device. + */ + public boolean isCecDevice() { + return mIsCecDevice; + } + + /** * Return display (OSD) name of the device. */ public String getDisplayName() { @@ -199,12 +228,19 @@ public final class HdmiCecDeviceInfo implements Parcelable { @Override public String toString() { StringBuffer s = new StringBuffer(); - s.append("logical_address: ").append(mLogicalAddress).append(", "); - s.append("physical_address: ").append(mPhysicalAddress).append(", "); - s.append("port_id: ").append(mPortId).append(", "); - s.append("device_type: ").append(mDeviceType).append(", "); - s.append("vendor_id: ").append(mVendorId).append(", "); - s.append("display_name: ").append(mDisplayName); + if (isCecDevice()) { + s.append("CEC: "); + s.append("logical_address: ").append(mLogicalAddress).append(", "); + s.append("physical_address: ").append(mPhysicalAddress).append(", "); + s.append("port_id: ").append(mPortId).append(", "); + s.append("device_type: ").append(mDeviceType).append(", "); + s.append("vendor_id: ").append(mVendorId).append(", "); + s.append("display_name: ").append(mDisplayName); + } else { + s.append("Non-CEC: "); + s.append("physical_address: ").append(mPhysicalAddress).append(", "); + s.append("port_id: ").append(mPortId).append(", "); + } return s.toString(); } diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java index 65e617b..077d16f 100644 --- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java +++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java @@ -20,6 +20,7 @@ import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED; import static android.media.tv.TvInputManager.INPUT_STATE_DISCONNECTED; import android.content.Context; +import android.content.Intent; import android.hardware.hdmi.HdmiCecDeviceInfo; import android.hardware.hdmi.HdmiHotplugEvent; import android.hardware.hdmi.IHdmiControlService; @@ -34,6 +35,7 @@ import android.media.AudioPortConfig; import android.media.tv.ITvInputHardware; import android.media.tv.ITvInputHardwareCallback; import android.media.tv.TvInputHardwareInfo; +import android.media.tv.TvContract; import android.media.tv.TvInputInfo; import android.media.tv.TvStreamConfig; import android.os.Handler; @@ -759,8 +761,21 @@ class TvInputHardwareManager implements TvInputHal.Callback { private final class HdmiInputChangeListener extends IHdmiInputChangeListener.Stub { @Override public void onChanged(HdmiCecDeviceInfo device) throws RemoteException { - // TODO: Build a channel Uri for the TvInputInfo associated with the logical device - // and send an intent to TV app + String inputId; + synchronized (mLock) { + if (device.isCecDevice()) { + inputId = mHdmiCecInputIdMap.get(device.getLogicalAddress()); + } else { + inputId = findInputIdForHdmiPortLocked(device.getPortId()); + } + } + if (inputId != null) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(TvContract.buildChannelUriForPassthroughTvInput(inputId)); + mContext.startActivity(intent); + } else { + Slog.w(TAG, "onChanged: InputId cannot be found for :" + device); + } } } } |