2121
2222import android .content .Context ;
2323import android .content .Intent ;
24+ import android .hardware .hdmi .HdmiControlManager ;
2425import android .hardware .hdmi .HdmiDeviceInfo ;
2526import android .hardware .hdmi .HdmiHotplugEvent ;
2627import android .hardware .hdmi .IHdmiControlService ;
@@ -862,6 +863,7 @@ interface Listener {
862863 public void onHardwareDeviceRemoved (TvInputHardwareInfo info );
863864 public void onHdmiDeviceAdded (HdmiDeviceInfo device );
864865 public void onHdmiDeviceRemoved (HdmiDeviceInfo device );
866+ public void onHdmiDeviceUpdated (HdmiDeviceInfo device );
865867 }
866868
867869 private class ListenerHandler extends Handler {
@@ -870,6 +872,7 @@ private class ListenerHandler extends Handler {
870872 private static final int HARDWARE_DEVICE_REMOVED = 3 ;
871873 private static final int HDMI_DEVICE_ADDED = 4 ;
872874 private static final int HDMI_DEVICE_REMOVED = 5 ;
875+ private static final int HDMI_DEVICE_UPDATED = 6 ;
873876
874877 @ Override
875878 public final void handleMessage (Message msg ) {
@@ -900,6 +903,10 @@ public final void handleMessage(Message msg) {
900903 mListener .onHdmiDeviceRemoved (info );
901904 break ;
902905 }
906+ case HDMI_DEVICE_UPDATED : {
907+ HdmiDeviceInfo info = (HdmiDeviceInfo ) msg .obj ;
908+ mListener .onHdmiDeviceUpdated (info );
909+ }
903910 default : {
904911 Slog .w (TAG , "Unhandled message: " + msg );
905912 break ;
@@ -932,25 +939,40 @@ public void onReceived(HdmiHotplugEvent event) {
932939
933940 private final class HdmiDeviceEventListener extends IHdmiDeviceEventListener .Stub {
934941 @ Override
935- public void onStatusChanged (HdmiDeviceInfo deviceInfo , boolean activated ) {
942+ public void onStatusChanged (HdmiDeviceInfo deviceInfo , int status ) {
936943 synchronized (mLock ) {
937- if (activated ) {
938- if (!mHdmiDeviceList .contains (deviceInfo )) {
939- mHdmiDeviceList .add (deviceInfo );
940- } else {
941- Slog .w (TAG , "The list already contains " + deviceInfo + "; ignoring." );
942- return ;
944+ int messageType = 0 ;
945+ switch (status ) {
946+ case HdmiControlManager .DEVICE_EVENT_ADD_DEVICE : {
947+ if (!mHdmiDeviceList .contains (deviceInfo )) {
948+ mHdmiDeviceList .add (deviceInfo );
949+ } else {
950+ Slog .w (TAG , "The list already contains " + deviceInfo + "; ignoring." );
951+ return ;
952+ }
953+ messageType = ListenerHandler .HDMI_DEVICE_ADDED ;
954+ break ;
943955 }
944- } else {
945- if (!mHdmiDeviceList .remove (deviceInfo )) {
946- Slog .w (TAG , "The list doesn't contain " + deviceInfo + "; ignoring." );
947- return ;
956+ case HdmiControlManager .DEVICE_EVENT_REMOVE_DEVICE : {
957+ if (!mHdmiDeviceList .remove (deviceInfo )) {
958+ Slog .w (TAG , "The list doesn't contain " + deviceInfo + "; ignoring." );
959+ return ;
960+ }
961+ messageType = ListenerHandler .HDMI_DEVICE_REMOVED ;
962+ break ;
963+ }
964+ case HdmiControlManager .DEVICE_EVENT_UPDATE_DEVICE : {
965+ if (!mHdmiDeviceList .remove (deviceInfo )) {
966+ Slog .w (TAG , "The list doesn't contain " + deviceInfo + "; ignoring." );
967+ return ;
968+ }
969+ mHdmiDeviceList .add (deviceInfo );
970+ messageType = ListenerHandler .HDMI_DEVICE_UPDATED ;
971+ break ;
948972 }
949973 }
950- Message msg = mHandler .obtainMessage (
951- activated ? ListenerHandler .HDMI_DEVICE_ADDED
952- : ListenerHandler .HDMI_DEVICE_REMOVED ,
953- 0 , 0 , deviceInfo );
974+
975+ Message msg = mHandler .obtainMessage (messageType , 0 , 0 , deviceInfo );
954976 if (findHardwareInfoForHdmiPortLocked (deviceInfo .getPortId ()) != null ) {
955977 msg .sendToTarget ();
956978 } else {
0 commit comments