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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user