diff options
7 files changed, 74 insertions, 47 deletions
diff --git a/core/java/android/hardware/hdmi/HdmiRecordListener.java b/core/java/android/hardware/hdmi/HdmiRecordListener.java index 29f6cfc3a29a..90b77681ea96 100644 --- a/core/java/android/hardware/hdmi/HdmiRecordListener.java +++ b/core/java/android/hardware/hdmi/HdmiRecordListener.java @@ -39,6 +39,8 @@ public abstract class HdmiRecordListener { /** * Called when one touch record is started or failed during initialization. * + * @param recorderAddress An address of recorder that reports result of one touch record + * request * @param result result code. For more details, please look at all constants starting with * "ONE_TOUCH_RECORD_". Only * {@link HdmiControlManager#ONE_TOUCH_RECORD_RECORDING_CURRENTLY_SELECTED_SOURCE}, @@ -47,15 +49,17 @@ public abstract class HdmiRecordListener { * {@link HdmiControlManager#ONE_TOUCH_RECORD_RECORDING_EXTERNAL_INPUT} mean normal * start of recording; otherwise, describes failure. */ - public void onOneTouchRecordResult(int result) { + public void onOneTouchRecordResult(int recorderAddress, int result) { } /** * Called when timer recording is started or failed during initialization. * + * @param recorderAddress An address of recorder that reports result of timer recording + * request * @param data timer status data. For more details, look at {@link TimerStatusData}. */ - public void onTimerRecordingResult(TimerStatusData data) { + public void onTimerRecordingResult(int recorderAddress, TimerStatusData data) { } /** @@ -230,6 +234,8 @@ public abstract class HdmiRecordListener { /** * Called when receiving result for clear timer recording request. * + * @param recorderAddress An address of recorder that reports result of clear timer recording + * request * @param result result of clear timer. It should be one of * {@link HdmiControlManager#CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_RECORDING} * {@link HdmiControlManager#CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_MATCHING}, @@ -239,6 +245,6 @@ public abstract class HdmiRecordListener { * {@link HdmiControlManager#CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE}, * {@link HdmiControlManager#CLEAR_TIMER_STATUS_CEC_DISABLE}. */ - public void onClearTimerRecordingResult(int result) { + public void onClearTimerRecordingResult(int recorderAddress, int result) { } } diff --git a/core/java/android/hardware/hdmi/HdmiTvClient.java b/core/java/android/hardware/hdmi/HdmiTvClient.java index dbfb4efe52a3..cef17dd4f197 100644 --- a/core/java/android/hardware/hdmi/HdmiTvClient.java +++ b/core/java/android/hardware/hdmi/HdmiTvClient.java @@ -226,19 +226,19 @@ public final class HdmiTvClient extends HdmiClient { } @Override - public void onOneTouchRecordResult(int result) { - callback.onOneTouchRecordResult(result); + public void onOneTouchRecordResult(int recorderAddress, int result) { + callback.onOneTouchRecordResult(recorderAddress, result); } @Override - public void onTimerRecordingResult(int result) { - callback.onTimerRecordingResult( + public void onTimerRecordingResult(int recorderAddress, int result) { + callback.onTimerRecordingResult(recorderAddress, HdmiRecordListener.TimerStatusData.parseFrom(result)); } @Override - public void onClearTimerRecordingResult(int result) { - callback.onClearTimerRecordingResult(result); + public void onClearTimerRecordingResult(int recorderAddress, int result) { + callback.onClearTimerRecordingResult(recorderAddress, result); } }; } diff --git a/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl b/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl index 44d906583721..d2deb381672a 100644 --- a/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl +++ b/core/java/android/hardware/hdmi/IHdmiRecordListener.aidl @@ -31,19 +31,25 @@ package android.hardware.hdmi; /** * Called when one touch record is started or failed during initialization. * + * @param recorderAddress An address of recorder that reports result of one touch record + * request * @param result result code for one touch record */ - void onOneTouchRecordResult(int result); + void onOneTouchRecordResult(int recorderAddress, int result); /** * Called when timer recording is started or failed during initialization. - + * + * @param recorderAddress An address of recorder that reports result of timer recording + * request * @param result result code for timer recording */ - void onTimerRecordingResult(int result); + void onTimerRecordingResult(int recorderAddress, int result); /** * Called when receiving result for clear timer recording request. * - * @param result result of clear timer. + * @param recorderAddress An address of recorder that reports result of clear timer recording + * request + * @param result result of clear timer */ - void onClearTimerRecordingResult(int result); + void onClearTimerRecordingResult(int recorderAddress, int result); }
\ No newline at end of file diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 6bae761c7478..f0f79735f61e 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -1029,6 +1029,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { OneTouchRecordAction action = actions.get(0); if (action.getRecorderAddress() != message.getSource()) { announceOneTouchRecordResult( + message.getSource(), HdmiControlManager.ONE_TOUCH_RECORD_PREVIOUS_RECORDING_IN_PROGRESS); } return super.handleRecordTvScreen(message); @@ -1047,20 +1048,20 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { protected boolean handleTimerClearedStatus(HdmiCecMessage message) { byte[] params = message.getParams(); int timerClearedStatusData = params[0] & 0xFF; - announceTimerRecordingResult(timerClearedStatusData); + announceTimerRecordingResult(message.getSource(), timerClearedStatusData); return true; } - void announceOneTouchRecordResult(int result) { - mService.invokeOneTouchRecordResult(result); + void announceOneTouchRecordResult(int recorderAddress, int result) { + mService.invokeOneTouchRecordResult(recorderAddress, result); } - void announceTimerRecordingResult(int result) { - mService.invokeTimerRecordingResult(result); + void announceTimerRecordingResult(int recorderAddress, int result) { + mService.invokeTimerRecordingResult(recorderAddress, result); } - void announceClearTimerRecordingResult(int result) { - mService.invokeClearTimerRecordingResult(result); + void announceClearTimerRecordingResult(int recorderAddress, int result) { + mService.invokeClearTimerRecordingResult(recorderAddress, result); } private boolean isMessageForSystemAudio(HdmiCecMessage message) { @@ -1528,19 +1529,21 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { assertRunOnServiceThread(); if (!mService.isControlEnabled()) { Slog.w(TAG, "Can not start one touch record. CEC control is disabled."); - announceOneTouchRecordResult(ONE_TOUCH_RECORD_CEC_DISABLED); + announceOneTouchRecordResult(recorderAddress, ONE_TOUCH_RECORD_CEC_DISABLED); return Constants.ABORT_NOT_IN_CORRECT_MODE; } if (!checkRecorder(recorderAddress)) { Slog.w(TAG, "Invalid recorder address:" + recorderAddress); - announceOneTouchRecordResult(ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION); + announceOneTouchRecordResult(recorderAddress, + ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION); return Constants.ABORT_NOT_IN_CORRECT_MODE; } if (!checkRecordSource(recordSource)) { Slog.w(TAG, "Invalid record source." + Arrays.toString(recordSource)); - announceOneTouchRecordResult(ONE_TOUCH_RECORD_FAIL_TO_RECORD_DISPLAYED_SCREEN); + announceOneTouchRecordResult(recorderAddress, + ONE_TOUCH_RECORD_FAIL_TO_RECORD_DISPLAYED_SCREEN); return Constants.ABORT_UNABLE_TO_DETERMINE; } @@ -1555,13 +1558,14 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { assertRunOnServiceThread(); if (!mService.isControlEnabled()) { Slog.w(TAG, "Can not stop one touch record. CEC control is disabled."); - announceOneTouchRecordResult(ONE_TOUCH_RECORD_CEC_DISABLED); + announceOneTouchRecordResult(recorderAddress, ONE_TOUCH_RECORD_CEC_DISABLED); return; } if (!checkRecorder(recorderAddress)) { Slog.w(TAG, "Invalid recorder address:" + recorderAddress); - announceOneTouchRecordResult(ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION); + announceOneTouchRecordResult(recorderAddress, + ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION); return; } @@ -1587,13 +1591,14 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { assertRunOnServiceThread(); if (!mService.isControlEnabled()) { Slog.w(TAG, "Can not start one touch record. CEC control is disabled."); - announceTimerRecordingResult(TIMER_RECORDING_RESULT_EXTRA_CEC_DISABLED); + announceTimerRecordingResult(recorderAddress, + TIMER_RECORDING_RESULT_EXTRA_CEC_DISABLED); return; } if (!checkRecorder(recorderAddress)) { Slog.w(TAG, "Invalid recorder address:" + recorderAddress); - announceTimerRecordingResult( + announceTimerRecordingResult(recorderAddress, TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); return; } @@ -1601,6 +1606,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { if (!checkTimerRecordingSource(sourceType, recordSource)) { Slog.w(TAG, "Invalid record source." + Arrays.toString(recordSource)); announceTimerRecordingResult( + recorderAddress, TIMER_RECORDING_RESULT_EXTRA_FAIL_TO_RECORD_SELECTED_SOURCE); return; } @@ -1621,26 +1627,29 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { assertRunOnServiceThread(); if (!mService.isControlEnabled()) { Slog.w(TAG, "Can not start one touch record. CEC control is disabled."); - announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_CEC_DISABLE); + announceClearTimerRecordingResult(recorderAddress, CLEAR_TIMER_STATUS_CEC_DISABLE); return; } if (!checkRecorder(recorderAddress)) { Slog.w(TAG, "Invalid recorder address:" + recorderAddress); - announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION); + announceClearTimerRecordingResult(recorderAddress, + CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION); return; } if (!checkTimerRecordingSource(sourceType, recordSource)) { Slog.w(TAG, "Invalid record source." + Arrays.toString(recordSource)); - announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); + announceClearTimerRecordingResult(recorderAddress, + CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); return; } sendClearTimerMessage(recorderAddress, sourceType, recordSource); } - private void sendClearTimerMessage(int recorderAddress, int sourceType, byte[] recordSource) { + private void sendClearTimerMessage(final int recorderAddress, int sourceType, + byte[] recordSource) { HdmiCecMessage message = null; switch (sourceType) { case TIMER_RECORDING_TYPE_DIGITAL: @@ -1657,7 +1666,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { break; default: Slog.w(TAG, "Invalid source type:" + recorderAddress); - announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); + announceClearTimerRecordingResult(recorderAddress, + CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); return; } @@ -1665,7 +1675,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @Override public void onSendCompleted(int error) { if (error != Constants.SEND_RESULT_SUCCESS) { - announceClearTimerRecordingResult( + announceClearTimerRecordingResult(recorderAddress, CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); } } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index aeb21dbfa136..d8d513e5c7ed 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -1661,11 +1661,11 @@ public final class HdmiControlService extends SystemService { } } - void invokeOneTouchRecordResult(int result) { + void invokeOneTouchRecordResult(int recorderAddress, int result) { synchronized (mLock) { if (mRecordListenerRecord != null) { try { - mRecordListenerRecord.mListener.onOneTouchRecordResult(result); + mRecordListenerRecord.mListener.onOneTouchRecordResult(recorderAddress, result); } catch (RemoteException e) { Slog.w(TAG, "Failed to call onOneTouchRecordResult.", e); } @@ -1673,11 +1673,11 @@ public final class HdmiControlService extends SystemService { } } - void invokeTimerRecordingResult(int result) { + void invokeTimerRecordingResult(int recorderAddress, int result) { synchronized (mLock) { if (mRecordListenerRecord != null) { try { - mRecordListenerRecord.mListener.onTimerRecordingResult(result); + mRecordListenerRecord.mListener.onTimerRecordingResult(recorderAddress, result); } catch (RemoteException e) { Slog.w(TAG, "Failed to call onTimerRecordingResult.", e); } @@ -1685,11 +1685,12 @@ public final class HdmiControlService extends SystemService { } } - void invokeClearTimerRecordingResult(int result) { + void invokeClearTimerRecordingResult(int recorderAddress, int result) { synchronized (mLock) { if (mRecordListenerRecord != null) { try { - mRecordListenerRecord.mListener.onClearTimerRecordingResult(result); + mRecordListenerRecord.mListener.onClearTimerRecordingResult(recorderAddress, + result); } catch (RemoteException e) { Slog.w(TAG, "Failed to call onClearTimerRecordingResult.", e); } diff --git a/services/core/java/com/android/server/hdmi/OneTouchRecordAction.java b/services/core/java/com/android/server/hdmi/OneTouchRecordAction.java index 906944bf1921..d80b81f6fe4a 100644 --- a/services/core/java/com/android/server/hdmi/OneTouchRecordAction.java +++ b/services/core/java/com/android/server/hdmi/OneTouchRecordAction.java @@ -64,6 +64,7 @@ public class OneTouchRecordAction extends HdmiCecFeatureAction { // if failed to send <Record On>, display error message and finish action. if (error != Constants.SEND_RESULT_SUCCESS) { tv().announceOneTouchRecordResult( + mRecorderAddress, ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION); finish(); return; @@ -94,7 +95,7 @@ public class OneTouchRecordAction extends HdmiCecFeatureAction { } int recordStatus = cmd.getParams()[0]; - tv().announceOneTouchRecordResult(recordStatus); + tv().announceOneTouchRecordResult(mRecorderAddress, recordStatus); Slog.i(TAG, "Got record status:" + recordStatus + " from " + cmd.getSource()); // If recording started successfully, change state and keep this action until <Record Off> @@ -121,7 +122,8 @@ public class OneTouchRecordAction extends HdmiCecFeatureAction { return; } - tv().announceOneTouchRecordResult(ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION); + tv().announceOneTouchRecordResult(mRecorderAddress, + ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION); finish(); } diff --git a/services/core/java/com/android/server/hdmi/TimerRecordingAction.java b/services/core/java/com/android/server/hdmi/TimerRecordingAction.java index 5fcbc91d0e60..16fc25fb1917 100644 --- a/services/core/java/com/android/server/hdmi/TimerRecordingAction.java +++ b/services/core/java/com/android/server/hdmi/TimerRecordingAction.java @@ -74,7 +74,7 @@ public class TimerRecordingAction extends HdmiCecFeatureAction { mRecorderAddress, mRecordSource); break; default: - tv().announceTimerRecordingResult( + tv().announceTimerRecordingResult(mRecorderAddress, TIMER_RECORDING_RESULT_EXTRA_FAIL_TO_RECORD_SELECTED_SOURCE); finish(); return; @@ -83,7 +83,7 @@ public class TimerRecordingAction extends HdmiCecFeatureAction { @Override public void onSendCompleted(int error) { if (error != Constants.SEND_RESULT_SUCCESS) { - tv().announceTimerRecordingResult( + tv().announceTimerRecordingResult(mRecorderAddress, TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); finish(); return; @@ -114,7 +114,7 @@ public class TimerRecordingAction extends HdmiCecFeatureAction { byte[] timerStatusData = cmd.getParams(); // [Timer Status Data] should be one or three bytes. if (timerStatusData.length == 1 || timerStatusData.length == 3) { - tv().announceTimerRecordingResult(bytesToInt(timerStatusData)); + tv().announceTimerRecordingResult(mRecorderAddress, bytesToInt(timerStatusData)); Slog.i(TAG, "Received [Timer Status Data]:" + Arrays.toString(timerStatusData)); } else { Slog.w(TAG, "Invalid [Timer Status Data]:" + Arrays.toString(timerStatusData)); @@ -138,7 +138,8 @@ public class TimerRecordingAction extends HdmiCecFeatureAction { } int reason = params[1] & 0xFF; Slog.i(TAG, "[Feature Abort] for " + messageType + " reason:" + reason); - tv().announceTimerRecordingResult(TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); + tv().announceTimerRecordingResult(mRecorderAddress, + TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); finish(); return true; } @@ -163,7 +164,8 @@ public class TimerRecordingAction extends HdmiCecFeatureAction { return; } - tv().announceTimerRecordingResult(TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); + tv().announceTimerRecordingResult(mRecorderAddress, + TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); finish(); } } |