CEC: Avoid setting op in disabled mode

In disabled HDMI control mode, TV local device is gone, for which
setting operation is not possible. Does the check against the tv instance
when TV setting update is notified. The settings is picked up when
the control is enabled back, so notification is not lost.

Bug: 18580387
Change-Id: Id8891bfa54d851ec1aff280fc99be8e428f4e0cf
This commit is contained in:
Jinsuk Kim
2014-12-05 12:05:27 +09:00
parent 109ec376da
commit de7a4248d8

View File

@@ -379,7 +379,7 @@ public final class HdmiControlService extends SystemService {
}
mWakeUpMessageReceived = false;
if (isTvDevice()) {
if (isTvDeviceEnabled()) {
mCecController.setOption(OPTION_CEC_AUTO_WAKEUP, toInt(tv().getAutoWakeup()));
}
int reason = -1;
@@ -430,11 +430,15 @@ public final class HdmiControlService extends SystemService {
setControlEnabled(enabled);
break;
case Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED:
tv().setAutoWakeup(enabled);
if (isTvDeviceEnabled()) {
tv().setAutoWakeup(enabled);
}
setCecOption(OPTION_CEC_AUTO_WAKEUP, toInt(enabled));
break;
case Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED:
tv().setAutoDeviceOff(enabled);
if (isTvDeviceEnabled()) {
tv().setAutoDeviceOff(enabled);
}
// No need to propagate to HAL.
break;
case Global.MHL_INPUT_SWITCHING_ENABLED:
@@ -665,11 +669,7 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
HdmiDeviceInfo getDeviceInfo(int logicalAddress) {
assertRunOnServiceThread();
HdmiCecLocalDeviceTv tv = tv();
if (tv == null) {
return null;
}
return tv.getCecDeviceInfo(logicalAddress);
return tv() == null ? null : tv().getCecDeviceInfo(logicalAddress);
}
/**
@@ -1418,8 +1418,8 @@ public final class HdmiControlService extends SystemService {
runOnServiceThread(new Runnable() {
@Override
public void run() {
if (!isTvDevice()) {
Slog.w(TAG, "No TV is available.");
if (!isTvDeviceEnabled()) {
Slog.w(TAG, "TV device is not enabled.");
return;
}
tv().startOneTouchRecord(recorderAddress, recordSource);
@@ -1433,8 +1433,8 @@ public final class HdmiControlService extends SystemService {
runOnServiceThread(new Runnable() {
@Override
public void run() {
if (!isTvDevice()) {
Slog.w(TAG, "No TV is available.");
if (!isTvDeviceEnabled()) {
Slog.w(TAG, "TV device is not enabled.");
return;
}
tv().stopOneTouchRecord(recorderAddress);
@@ -1449,8 +1449,8 @@ public final class HdmiControlService extends SystemService {
runOnServiceThread(new Runnable() {
@Override
public void run() {
if (!isTvDevice()) {
Slog.w(TAG, "No TV is available.");
if (!isTvDeviceEnabled()) {
Slog.w(TAG, "TV device is not enabled.");
return;
}
tv().startTimerRecording(recorderAddress, sourceType, recordSource);
@@ -1465,8 +1465,8 @@ public final class HdmiControlService extends SystemService {
runOnServiceThread(new Runnable() {
@Override
public void run() {
if (!isTvDevice()) {
Slog.w(TAG, "No TV is available.");
if (!isTvDeviceEnabled()) {
Slog.w(TAG, "TV device is not enabled.");
return;
}
tv().clearTimerRecording(recorderAddress, sourceType, recordSource);
@@ -1769,6 +1769,10 @@ public final class HdmiControlService extends SystemService {
return mLocalDevices.contains(HdmiDeviceInfo.DEVICE_TV);
}
boolean isTvDeviceEnabled() {
return isTvDevice() && tv() != null;
}
private HdmiCecLocalDevicePlayback playback() {
return (HdmiCecLocalDevicePlayback)
mCecController.getLocalDevice(HdmiDeviceInfo.DEVICE_PLAYBACK);
@@ -1876,7 +1880,7 @@ public final class HdmiControlService extends SystemService {
assertRunOnServiceThread();
mLanguage = language;
if (isTvDevice()) {
if (isTvDeviceEnabled()) {
tv().broadcastMenuLanguage(language);
}
}
@@ -2100,6 +2104,7 @@ public final class HdmiControlService extends SystemService {
@ServiceThreadOnly
void changeInputForMhl(int portId, boolean contentOn) {
assertRunOnServiceThread();
if (tv() == null) return;
final int lastInput = contentOn ? tv().getActivePortId() : Constants.INVALID_PORT_ID;
tv().doManualPortSwitching(portId, new IHdmiControlCallback.Stub() {
@Override