Merge "Add API setProhibitMode in HdmiControlService"
diff --git a/core/java/android/hardware/hdmi/IHdmiControlService.aidl b/core/java/android/hardware/hdmi/IHdmiControlService.aidl
index 0e231cc..3f0f2ae 100644
--- a/core/java/android/hardware/hdmi/IHdmiControlService.aidl
+++ b/core/java/android/hardware/hdmi/IHdmiControlService.aidl
@@ -52,6 +52,7 @@
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);
diff --git a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
index 45fde45..dcf43a3 100644
--- a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
+++ b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
@@ -72,7 +72,7 @@
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));
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
index 795404f..d6d6006 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java
@@ -53,12 +53,6 @@
@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 @@
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 @@
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 @@
}
}
- 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();
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 7ecbdd6..eb80b20 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -272,7 +272,7 @@
if (getActiveSource() != message.getSource()) {
return true;
}
- if (isInPresetInstallationMode()) {
+ if (isProhibitMode()) {
return true;
}
int portId = getPrevPortId();
@@ -1061,4 +1061,8 @@
}
return false;
}
+
+ boolean isProhibitMode() {
+ return mService.isProhibitMode();
+ }
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index a6936c0..6dd3250 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -151,6 +151,12 @@
@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 @@
// 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 @@
@Override
public void setOption(final int key, final int value) {
+ enforceAccessPermission();
if (!isTvDevice()) {
return;
}
@@ -898,6 +907,15 @@
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 @@
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;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java b/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
index f44c014..ef7e837 100644
--- a/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
+++ b/services/core/java/com/android/server/hdmi/SystemAudioActionFromAvr.java
@@ -51,7 +51,7 @@
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));