diff options
| author | 2014-08-05 16:10:21 +0900 | |
|---|---|---|
| committer | 2014-08-05 17:24:39 +0900 | |
| commit | faa49bc896be859d5bcf2da3bddd4507b5e6494c (patch) | |
| tree | e7fd447b7ac4b18743d0878b7ee7775463cff4b1 | |
| parent | 307a8ba9f028dc476558bc443aabe4f70705a159 (diff) | |
Fix bugs on timer recording action.
1. Apply masking to feature abort of SetXXXTimer
2. Announce error when failed to send SetXXXTimer.
3. Remove TimerRecordingAction when deivce is disabled.
4. Report clear timer record error thru onClearTimerRecordingResult.
Change-Id: Id243aa25481dad57509b4229ca214fa9b6b00fdc
| -rw-r--r-- | services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java | 18 | ||||
| -rw-r--r-- | services/core/java/com/android/server/hdmi/TimerRecordingAction.java | 10 |
2 files changed, 18 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index 8e64bfa9911d..70d108aeaab8 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -900,6 +900,10 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { mService.invokeTimerRecordingResult(result); } + void announceClearTimerRecordingResult(int result) { + mService.invokeClearTimerRecordingResult(result); + } + private boolean isMessageForSystemAudio(HdmiCecMessage message) { if (message.getSource() != Constants.ADDR_AUDIO_SYSTEM || message.getDestination() != Constants.ADDR_TV @@ -1227,8 +1231,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { // LocalDeviceTv.onAddressAllocated() -> launchDeviceDiscovery(). removeAction(DeviceDiscoveryAction.class); removeAction(HotplugDetectionAction.class); - // Remove one touch record action. + // Remove recording actions. removeAction(OneTouchRecordAction.class); + removeAction(TimerRecordingAction.class); disableSystemAudioIfExist(); disableArcIfExist(); @@ -1397,19 +1402,19 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { assertRunOnServiceThread(); if (!mService.isControlEnabled()) { Slog.w(TAG, "Can not start one touch record. CEC control is disabled."); - announceTimerRecordingResult(CLEAR_TIMER_STATUS_CEC_DISABLE); + announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_CEC_DISABLE); return; } if (!checkRecorder(recorderAddress)) { Slog.w(TAG, "Invalid recorder address:" + recorderAddress); - announceTimerRecordingResult(CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION); + announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION); return; } if (!checkTimerRecordingSource(sourceType, recordSource)) { Slog.w(TAG, "Invalid record source." + Arrays.toString(recordSource)); - announceTimerRecordingResult(CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); + announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); return; } @@ -1433,7 +1438,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { break; default: Slog.w(TAG, "Invalid source type:" + recorderAddress); - announceTimerRecordingResult(CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); + announceClearTimerRecordingResult(CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); return; } @@ -1441,7 +1446,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @Override public void onSendCompleted(int error) { if (error != Constants.SEND_RESULT_SUCCESS) { - announceTimerRecordingResult(CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); + announceClearTimerRecordingResult( + CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE); } } }); diff --git a/services/core/java/com/android/server/hdmi/TimerRecordingAction.java b/services/core/java/com/android/server/hdmi/TimerRecordingAction.java index 0275853d0098..1a179e67272a 100644 --- a/services/core/java/com/android/server/hdmi/TimerRecordingAction.java +++ b/services/core/java/com/android/server/hdmi/TimerRecordingAction.java @@ -83,11 +83,13 @@ public class TimerRecordingAction extends FeatureAction { @Override public void onSendCompleted(int error) { if (error != Constants.SEND_RESULT_SUCCESS) { - mState = STATE_WAITING_FOR_TIMER_STATUS; - addTimer(mState, TIMER_STATUS_TIMEOUT_MS); + tv().announceTimerRecordingResult( + TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); finish(); return; } + mState = STATE_WAITING_FOR_TIMER_STATUS; + addTimer(mState, TIMER_STATUS_TIMEOUT_MS); } }); } @@ -128,7 +130,7 @@ public class TimerRecordingAction extends FeatureAction { private boolean handleFeatureAbort(HdmiCecMessage cmd) { byte[] params = cmd.getParams(); - int messageType = params[0]; + int messageType = params[0] & 0xFF; switch (messageType) { case Constants.MESSAGE_SET_DIGITAL_TIMER: // fall through case Constants.MESSAGE_SET_ANALOG_TIMER: // fall through @@ -137,7 +139,7 @@ public class TimerRecordingAction extends FeatureAction { default: return false; } - int reason = params[1]; + int reason = params[1] & 0xFF; Slog.i(TAG, "[Feature Abort] for " + messageType + " reason:" + reason); tv().announceTimerRecordingResult(TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION); finish(); |