Merge "Add API setProhibitMode in HdmiControlService"
This commit is contained in:
@@ -52,6 +52,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);
|
||||
void setInputChangeListener(IHdmiInputChangeListener listener);
|
||||
|
||||
@@ -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;
|
||||
@@ -546,19 +537,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();
|
||||
|
||||
@@ -272,7 +272,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
||||
if (getActiveSource() != message.getSource()) {
|
||||
return true;
|
||||
}
|
||||
if (isInPresetInstallationMode()) {
|
||||
if (isProhibitMode()) {
|
||||
return true;
|
||||
}
|
||||
int portId = getPrevPortId();
|
||||
@@ -1061,4 +1061,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean isProhibitMode() {
|
||||
return mService.isProhibitMode();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,6 +151,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>
|
||||
@@ -217,6 +223,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
|
||||
@@ -875,6 +883,7 @@ public final class HdmiControlService extends SystemService {
|
||||
|
||||
@Override
|
||||
public void setOption(final int key, final int value) {
|
||||
enforceAccessPermission();
|
||||
if (!isTvDevice()) {
|
||||
return;
|
||||
}
|
||||
@@ -898,6 +907,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
|
||||
@@ -1176,4 +1194,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