From 58500f43ecbed3f92d7c077fb6ce396252cd00ea Mon Sep 17 00:00:00 2001 From: Jinsuk Kim Date: Tue, 5 Aug 2014 12:48:35 +0900 Subject: [PATCH] CEC: Make deviceSelect to active device a no-op Changing input to already the active source should return immediately without initiating routing control. This is also required for processing the incoming Also set the flag in intent for input change to start a new activity from a service. The service fails to launch an activity without it. Bug: 15570939 Change-Id: I9b20b31137dfa4dc847bc43cc7fd35e669d0dec7 --- services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java | 5 +++++ services/core/java/com/android/server/tv/TvInputHardwareManager.java | 1 + 2 files changed, 6 insertions(+) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 70d108aeaab8..b36c176ef844 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -165,6 +165,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @ServiceThreadOnly void deviceSelect(int targetAddress, IHdmiControlCallback callback) { assertRunOnServiceThread(); + ActiveSource active = getActiveSource(); + if (active.isValid() && targetAddress == active.logicalAddress) { + invokeCallback(callback, HdmiControlManager.RESULT_SUCCESS); + return; + } if (targetAddress == Constants.ADDR_INTERNAL) { handleSelectInternalSource(); // Switching to internal source is always successful even when CEC control is disabled. diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java index ba79fed4bd21..08ac210d2f0a 100644 --- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java +++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java @@ -930,6 +930,7 @@ class TvInputHardwareManager implements TvInputHal.Callback { if (inputId != null) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(TvContract.buildChannelUriForPassthroughTvInput(inputId)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); } else { Slog.w(TAG, "onChanged: InputId cannot be found for :" + device); -- 2.11.0