diff options
| author | 2019-11-25 10:16:04 +0900 | |
|---|---|---|
| committer | 2019-12-13 02:06:12 +0000 | |
| commit | f6d1e09fd77b664ecabe4e495c6a388616b47fe0 (patch) | |
| tree | 12c80b388fcce690623135ded02aa204adf1d3fd | |
| parent | 01e54d44b9f21005edb1d1673eedec86ced33735 (diff) | |
TIF: Add TvInputService#onHdmiDeviceUpdated()
Add API to update device infos to TvInputInfo.
Bug: 145047101
Test: Manual
Change-Id: I67438193cc00d3bf76b8ebaa02869b6ff4e04b77
| -rwxr-xr-x[-rw-r--r--] | api/system-current.txt | 1 | ||||
| -rwxr-xr-x[-rw-r--r--] | media/java/android/media/tv/ITvInputService.aidl | 1 | ||||
| -rwxr-xr-x[-rw-r--r--] | media/java/android/media/tv/TvInputService.java | 30 | ||||
| -rwxr-xr-x[-rw-r--r--] | services/core/java/com/android/server/tv/TvInputManagerService.java | 10 |
4 files changed, 42 insertions, 0 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index bf0bfb6b5fc8..5725763ba6c2 100644..100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4081,6 +4081,7 @@ package android.media.tv { method @Nullable public String onHardwareRemoved(android.media.tv.TvInputHardwareInfo); method @Nullable public android.media.tv.TvInputInfo onHdmiDeviceAdded(android.hardware.hdmi.HdmiDeviceInfo); method @Nullable public String onHdmiDeviceRemoved(android.hardware.hdmi.HdmiDeviceInfo); + method public void onHdmiDeviceUpdated(@NonNull android.hardware.hdmi.HdmiDeviceInfo); } public abstract static class TvInputService.RecordingSession { diff --git a/media/java/android/media/tv/ITvInputService.aidl b/media/java/android/media/tv/ITvInputService.aidl index bd0518493557..f90c50491129 100644..100755 --- a/media/java/android/media/tv/ITvInputService.aidl +++ b/media/java/android/media/tv/ITvInputService.aidl @@ -38,4 +38,5 @@ oneway interface ITvInputService { void notifyHardwareRemoved(in TvInputHardwareInfo hardwareInfo); void notifyHdmiDeviceAdded(in HdmiDeviceInfo deviceInfo); void notifyHdmiDeviceRemoved(in HdmiDeviceInfo deviceInfo); + void notifyHdmiDeviceUpdated(in HdmiDeviceInfo deviceInfo); } diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java index ff6977914ac3..5c11ed9bb7b4 100644..100755 --- a/media/java/android/media/tv/TvInputService.java +++ b/media/java/android/media/tv/TvInputService.java @@ -173,6 +173,12 @@ public abstract class TvInputService extends Service { mServiceHandler.obtainMessage(ServiceHandler.DO_REMOVE_HDMI_INPUT, deviceInfo).sendToTarget(); } + + @Override + public void notifyHdmiDeviceUpdated(HdmiDeviceInfo deviceInfo) { + mServiceHandler.obtainMessage(ServiceHandler.DO_UPDATE_HDMI_INPUT, + deviceInfo).sendToTarget(); + } }; } @@ -257,6 +263,24 @@ public abstract class TvInputService extends Service { return null; } + /** + * Called when {@code deviceInfo} is updated. + * + * <p>The changes are usually cuased by the corresponding HDMI-CEC logical device. + * + * <p>The default behavior ignores all changes. + * + * <p>The TV input service responsible for {@code deviceInfo} can update the {@link TvInputInfo} + * object based on the updated {@code deviceInfo} (e.g. update the label based on the preferred + * device OSD name). + * + * @param deviceInfo the updated {@link HdmiDeviceInfo} object. + * @hide + */ + @SystemApi + public void onHdmiDeviceUpdated(@NonNull HdmiDeviceInfo deviceInfo) { + } + private boolean isPassthroughInput(String inputId) { if (mTvInputManager == null) { mTvInputManager = (TvInputManager) getSystemService(Context.TV_INPUT_SERVICE); @@ -1962,6 +1986,7 @@ public abstract class TvInputService extends Service { private static final int DO_REMOVE_HARDWARE_INPUT = 5; private static final int DO_ADD_HDMI_INPUT = 6; private static final int DO_REMOVE_HDMI_INPUT = 7; + private static final int DO_UPDATE_HDMI_INPUT = 8; private void broadcastAddHardwareInput(int deviceId, TvInputInfo inputInfo) { int n = mCallbacks.beginBroadcast(); @@ -2131,6 +2156,11 @@ public abstract class TvInputService extends Service { } return; } + case DO_UPDATE_HDMI_INPUT: { + HdmiDeviceInfo deviceInfo = (HdmiDeviceInfo) msg.obj; + onHdmiDeviceUpdated(deviceInfo); + return; + } default: { Log.w(TAG, "Unhandled message code: " + msg.what); return; diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java index 8e66b149d344..18ed51a6cd5e 100644..100755 --- a/services/core/java/com/android/server/tv/TvInputManagerService.java +++ b/services/core/java/com/android/server/tv/TvInputManagerService.java @@ -2943,6 +2943,16 @@ public final class TvInputManagerService extends SystemService { if (state != null) { setStateLocked(inputId, state, mCurrentUserId); } + UserState userState = getOrCreateUserStateLocked(mCurrentUserId); + // Broadcast the event to all hardware inputs. + for (ServiceState serviceState : userState.serviceStateMap.values()) { + if (!serviceState.isHardware || serviceState.service == null) continue; + try { + serviceState.service.notifyHdmiDeviceUpdated(deviceInfo); + } catch (RemoteException e) { + Slog.e(TAG, "error in notifyHdmiDeviceUpdated", e); + } + } } } } |