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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user