Merge "Add API setProhibitMode in HdmiControlService"

This commit is contained in:
Jinsuk Kim
2014-07-04 03:58:09 +00:00
committed by Android (Google) Code Review
6 changed files with 39 additions and 26 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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