summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJinsuk Kim <jinsukkim@google.com>2014-07-30 14:28:17 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-07-30 14:28:17 +0000
commit006c117421bede8bd0425ddad688f70ff2de9db3 (patch)
treef8752e24f415a9c81227cf113c82adced414f4ad
parentb47a622fca343a1d9893c0469e840f971d187e2d (diff)
parent56d138c2ef316ae8d68424c289c13bd6f362757b (diff)
downloadframeworks_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.java50
-rw-r--r--services/core/java/com/android/server/tv/TvInputHardwareManager.java19
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);
+ }
}
}
}