Merge "Add recorder address to all recording listerner apis." into lmp-mr1-dev

This commit is contained in:
Jungshik Jang
2014-11-05 05:54:13 +00:00
committed by Android (Google) Code Review
7 changed files with 74 additions and 47 deletions

View File

@@ -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) {
}
}

View File

@@ -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);
}
};
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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();
}

View File

@@ -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();
}
}