Add API setProhibitMode in HdmiControlService
setProhibitMode sets a flag inside the service that indicates if input switch request will be processed or not. Sets to true when TV is doing something for which TV display should be fixed, like channel scan, software update - collectively called 'prohibit mode'. Change-Id: I8ac623023210b58b684b9af3ac475a5fe0d09435
This commit is contained in:
@@ -51,6 +51,7 @@ interface IHdmiControlService {
|
||||
void setControlEnabled(boolean enabled);
|
||||
void setArcMode(boolean enabled);
|
||||
void setOption(int option, int value);
|
||||
void setProhibitMode(boolean enabled);
|
||||
oneway void setSystemAudioVolume(int oldIndex, int newIndex, int maxIndex);
|
||||
oneway void setSystemAudioMute(boolean mute);
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ final class ActiveSourceHandler {
|
||||
|
||||
int currentActive = tv.getActiveSource();
|
||||
int currentPath = tv.getActivePath();
|
||||
if (!tv.isInPresetInstallationMode()) {
|
||||
if (!tv.isProhibitMode()) {
|
||||
tv.updateActiveSource(activeAddress, activePath);
|
||||
if (currentActive != activeAddress && currentPath != activePath) {
|
||||
tv.updateActivePortId(mService.pathToPortId(activePath));
|
||||
|
||||
@@ -53,12 +53,6 @@ abstract class HdmiCecLocalDevice {
|
||||
@GuardedBy("mLock")
|
||||
private int mActiveRoutingPath;
|
||||
|
||||
// Set to true while the service is in normal mode. While set to false, no input change is
|
||||
// allowed. Used for situations where input change can confuse users such as channel auto-scan,
|
||||
// system upgrade, etc., a.k.a. "prohibit mode".
|
||||
@GuardedBy("mLock")
|
||||
private boolean mInputChangeEnabled;
|
||||
|
||||
protected final HdmiCecMessageCache mCecMessageCache = new HdmiCecMessageCache();
|
||||
protected final Object mLock;
|
||||
|
||||
@@ -71,9 +65,6 @@ abstract class HdmiCecLocalDevice {
|
||||
mDeviceType = deviceType;
|
||||
mAddress = HdmiCec.ADDR_UNREGISTERED;
|
||||
mLock = service.getServiceLock();
|
||||
|
||||
// TODO: Get control flag from persistent storage
|
||||
mInputChangeEnabled = true;
|
||||
}
|
||||
|
||||
// Factory method that returns HdmiCecLocalDevice of corresponding type.
|
||||
@@ -291,7 +282,7 @@ abstract class HdmiCecLocalDevice {
|
||||
protected boolean handleStandby(HdmiCecMessage message) {
|
||||
assertRunOnServiceThread();
|
||||
// Seq #12
|
||||
if (mService.isControlEnabled() && !isInPresetInstallationMode()
|
||||
if (mService.isControlEnabled() && !mService.isProhibitMode()
|
||||
&& mService.isPowerOnOrTransient()) {
|
||||
mService.standby();
|
||||
return true;
|
||||
@@ -548,19 +539,6 @@ abstract class HdmiCecLocalDevice {
|
||||
}
|
||||
}
|
||||
|
||||
void setInputChangeEnabled(boolean enabled) {
|
||||
synchronized (mLock) {
|
||||
mInputChangeEnabled = enabled;
|
||||
}
|
||||
}
|
||||
|
||||
boolean isInPresetInstallationMode() {
|
||||
// TODO: Change this to check the right flag.
|
||||
synchronized (mLock) {
|
||||
return !mInputChangeEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
@ServiceThreadOnly
|
||||
HdmiCecMessageCache getCecMessageCache() {
|
||||
assertRunOnServiceThread();
|
||||
|
||||
@@ -270,7 +270,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
||||
if (getActiveSource() != message.getSource()) {
|
||||
return true;
|
||||
}
|
||||
if (isInPresetInstallationMode()) {
|
||||
if (isProhibitMode()) {
|
||||
return true;
|
||||
}
|
||||
int portId = getPrevPortId();
|
||||
@@ -1043,4 +1043,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean isProhibitMode() {
|
||||
return mService.isProhibitMode();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,6 +144,12 @@ public final class HdmiControlService extends SystemService {
|
||||
@GuardedBy("mLock")
|
||||
private boolean mHdmiControlEnabled;
|
||||
|
||||
// Set to true while the service is in normal mode. While set to false, no input change is
|
||||
// allowed. Used for situations where input change can confuse users such as channel auto-scan,
|
||||
// system upgrade, etc., a.k.a. "prohibit mode".
|
||||
@GuardedBy("mLock")
|
||||
private boolean mProhibitMode;
|
||||
|
||||
// List of listeners registered by callers that want to get notified of
|
||||
// system audio mode changes.
|
||||
private final ArrayList<IHdmiSystemAudioModeChangeListener>
|
||||
@@ -210,6 +216,8 @@ public final class HdmiControlService extends SystemService {
|
||||
// TODO: Read the preference for SystemAudioMode and initialize mSystemAudioMode and
|
||||
// start to monitor the preference value and invoke SystemAudioActionFromTv if needed.
|
||||
mHdmiControlEnabled = true;
|
||||
// TODO: Get control flag from persistent storage
|
||||
mProhibitMode = false;
|
||||
}
|
||||
|
||||
@ServiceThreadOnly
|
||||
@@ -850,6 +858,7 @@ public final class HdmiControlService extends SystemService {
|
||||
|
||||
@Override
|
||||
public void setOption(final int key, final int value) {
|
||||
enforceAccessPermission();
|
||||
if (!isTvDevice()) {
|
||||
return;
|
||||
}
|
||||
@@ -873,6 +882,15 @@ public final class HdmiControlService extends SystemService {
|
||||
private boolean isTvDevice() {
|
||||
return tv() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProhibitMode(final boolean enabled) {
|
||||
enforceAccessPermission();
|
||||
if (!isTvDevice()) {
|
||||
return;
|
||||
}
|
||||
HdmiControlService.this.setProhibitMode(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
@ServiceThreadOnly
|
||||
@@ -1116,4 +1134,16 @@ public final class HdmiControlService extends SystemService {
|
||||
mStandbyMessageReceived = false;
|
||||
mCecController.setOption(HdmiCec.OPTION_CEC_SERVICE_CONTROL, HdmiCec.DISABLED);
|
||||
}
|
||||
|
||||
boolean isProhibitMode() {
|
||||
synchronized (mLock) {
|
||||
return mProhibitMode;
|
||||
}
|
||||
}
|
||||
|
||||
void setProhibitMode(boolean enabled) {
|
||||
synchronized (mLock) {
|
||||
mProhibitMode = enabled;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ final class SystemAudioActionFromAvr extends SystemAudioAction {
|
||||
finishWithCallback(HdmiCec.RESULT_SUCCESS);
|
||||
return;
|
||||
}
|
||||
if (tv().isInPresetInstallationMode()) {
|
||||
if (tv().isProhibitMode()) {
|
||||
sendCommand(HdmiCecMessageBuilder.buildFeatureAbortCommand(
|
||||
getSourceAddress(), mAvrLogicalAddress,
|
||||
HdmiCec.MESSAGE_SET_SYSTEM_AUDIO_MODE, HdmiConstants.ABORT_REFUSED));
|
||||
|
||||
Reference in New Issue
Block a user