Loading core/java/android/hardware/hdmi/IHdmiVendorCommandListener.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ package android.hardware.hdmi; * * @hide */ oneway interface IHdmiVendorCommandListener { interface IHdmiVendorCommandListener { void onReceived(int logicalAddress, int destAddress, in byte[] operands, boolean hasVendorId); void onControlStateChanged(boolean enabled, int reason); } services/core/java/com/android/server/hdmi/HdmiCecController.java +15 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ final class HdmiCecController { } private void init(long nativePtr) { mIoHandler = new Handler(mService.getServiceLooper()); mIoHandler = new Handler(mService.getIoLooper()); mControlHandler = new Handler(mService.getServiceLooper()); mNativePtr = nativePtr; } Loading Loading @@ -324,6 +324,7 @@ final class HdmiCecController { @ServiceThreadOnly void setOption(int flag, int value) { assertRunOnServiceThread(); HdmiLogger.debug("setOption: [flag:%d, value:%d]", flag, value); nativeSetOption(mNativePtr, flag, value); } Loading Loading @@ -501,6 +502,19 @@ final class HdmiCecController { mControlHandler.post(runnable); } @ServiceThreadOnly void flush(final Runnable runnable) { assertRunOnServiceThread(); runOnIoThread(new Runnable() { @Override public void run() { // This ensures the runnable for cleanup is performed after all the pending // commands are processed by IO thread. runOnServiceThread(runnable); } }); } private boolean isAcceptableAddress(int address) { // Can access command targeting devices available in local device or broadcast command. if (address == Constants.ADDR_BROADCAST) { Loading services/core/java/com/android/server/hdmi/HdmiControlService.java +40 −18 Original line number Diff line number Diff line Loading @@ -2021,30 +2021,52 @@ public final class HdmiControlService extends SystemService { void setControlEnabled(boolean enabled) { assertRunOnServiceThread(); if (!enabled) { synchronized (mLock) { mHdmiControlEnabled = enabled; } if (enabled) { enableHdmiControlService(); return; } // Call the vendor handler before the service is disabled. invokeVendorCommandListenersOnControlStateChanged(false, HdmiControlManager.CONTROL_STATE_CHANGED_REASON_SETTING); // Post the remained tasks in the service thread again to give the vendor-issued-tasks // a chance to run. runOnServiceThread(new Runnable() { @Override public void run() { disableHdmiControlService(); } int value = toInt(enabled); mCecController.setOption(OPTION_CEC_ENABLE, value); mMhlController.setOption(OPTION_MHL_ENABLE, value); synchronized (mLock) { mHdmiControlEnabled = enabled; }); return; } if (enabled) { @ServiceThreadOnly private void enableHdmiControlService() { mCecController.setOption(OPTION_CEC_ENABLE, ENABLED); mMhlController.setOption(OPTION_MHL_ENABLE, ENABLED); initializeCec(INITIATED_BY_ENABLE_CEC); } else { } @ServiceThreadOnly private void disableHdmiControlService() { disableDevices(new PendingActionClearedCallback() { @Override public void onCleared(HdmiCecLocalDevice device) { assertRunOnServiceThread(); mCecController.flush(new Runnable() { @Override public void run() { mCecController.setOption(OPTION_CEC_ENABLE, DISABLED); mMhlController.setOption(OPTION_MHL_ENABLE, DISABLED); clearLocalDevices(); } }); } }); } @ServiceThreadOnly Loading Loading
core/java/android/hardware/hdmi/IHdmiVendorCommandListener.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ package android.hardware.hdmi; * * @hide */ oneway interface IHdmiVendorCommandListener { interface IHdmiVendorCommandListener { void onReceived(int logicalAddress, int destAddress, in byte[] operands, boolean hasVendorId); void onControlStateChanged(boolean enabled, int reason); }
services/core/java/com/android/server/hdmi/HdmiCecController.java +15 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ final class HdmiCecController { } private void init(long nativePtr) { mIoHandler = new Handler(mService.getServiceLooper()); mIoHandler = new Handler(mService.getIoLooper()); mControlHandler = new Handler(mService.getServiceLooper()); mNativePtr = nativePtr; } Loading Loading @@ -324,6 +324,7 @@ final class HdmiCecController { @ServiceThreadOnly void setOption(int flag, int value) { assertRunOnServiceThread(); HdmiLogger.debug("setOption: [flag:%d, value:%d]", flag, value); nativeSetOption(mNativePtr, flag, value); } Loading Loading @@ -501,6 +502,19 @@ final class HdmiCecController { mControlHandler.post(runnable); } @ServiceThreadOnly void flush(final Runnable runnable) { assertRunOnServiceThread(); runOnIoThread(new Runnable() { @Override public void run() { // This ensures the runnable for cleanup is performed after all the pending // commands are processed by IO thread. runOnServiceThread(runnable); } }); } private boolean isAcceptableAddress(int address) { // Can access command targeting devices available in local device or broadcast command. if (address == Constants.ADDR_BROADCAST) { Loading
services/core/java/com/android/server/hdmi/HdmiControlService.java +40 −18 Original line number Diff line number Diff line Loading @@ -2021,30 +2021,52 @@ public final class HdmiControlService extends SystemService { void setControlEnabled(boolean enabled) { assertRunOnServiceThread(); if (!enabled) { synchronized (mLock) { mHdmiControlEnabled = enabled; } if (enabled) { enableHdmiControlService(); return; } // Call the vendor handler before the service is disabled. invokeVendorCommandListenersOnControlStateChanged(false, HdmiControlManager.CONTROL_STATE_CHANGED_REASON_SETTING); // Post the remained tasks in the service thread again to give the vendor-issued-tasks // a chance to run. runOnServiceThread(new Runnable() { @Override public void run() { disableHdmiControlService(); } int value = toInt(enabled); mCecController.setOption(OPTION_CEC_ENABLE, value); mMhlController.setOption(OPTION_MHL_ENABLE, value); synchronized (mLock) { mHdmiControlEnabled = enabled; }); return; } if (enabled) { @ServiceThreadOnly private void enableHdmiControlService() { mCecController.setOption(OPTION_CEC_ENABLE, ENABLED); mMhlController.setOption(OPTION_MHL_ENABLE, ENABLED); initializeCec(INITIATED_BY_ENABLE_CEC); } else { } @ServiceThreadOnly private void disableHdmiControlService() { disableDevices(new PendingActionClearedCallback() { @Override public void onCleared(HdmiCecLocalDevice device) { assertRunOnServiceThread(); mCecController.flush(new Runnable() { @Override public void run() { mCecController.setOption(OPTION_CEC_ENABLE, DISABLED); mMhlController.setOption(OPTION_MHL_ENABLE, DISABLED); clearLocalDevices(); } }); } }); } @ServiceThreadOnly Loading