CEC: Remove HdmiControlManager#mLocalPhysicalAddress variable
Remove the cached physical address variable and use physical address
returned by the service when HdmiControlManager is queried for physical
address.
Bug: 159806029
Test: atest CtsHdmiCecHostTestCases
Test: atest FrameworksServicesTests:com.android.server.hdmi
Change-Id: I6c51521ce39df8d1be3f9923c9430112c0cfc584
diff --git a/core/java/android/hardware/hdmi/HdmiControlManager.java b/core/java/android/hardware/hdmi/HdmiControlManager.java
index a3be415..dac1b49 100644
--- a/core/java/android/hardware/hdmi/HdmiControlManager.java
+++ b/core/java/android/hardware/hdmi/HdmiControlManager.java
@@ -36,12 +36,10 @@
import android.util.ArrayMap;
import android.util.Log;
-import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.ConcurrentUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -71,32 +69,6 @@
private static final int INVALID_PHYSICAL_ADDRESS = 0xFFFF;
/**
- * A cache of the current device's physical address. When device's HDMI out port
- * is not connected to any device, it is set to {@link #INVALID_PHYSICAL_ADDRESS}.
- *
- * <p>Otherwise it is updated by the {@link ClientHotplugEventListener} registered
- * with {@link com.android.server.hdmi.HdmiControlService} by the
- * {@link #addHotplugEventListener(HotplugEventListener)} and the address is from
- * {@link com.android.server.hdmi.HdmiControlService#getPortInfo()}
- */
- @GuardedBy("mLock")
- private int mLocalPhysicalAddress = INVALID_PHYSICAL_ADDRESS;
-
- private void setLocalPhysicalAddress(int physicalAddress) {
- synchronized (mLock) {
- mLocalPhysicalAddress = physicalAddress;
- }
- }
-
- private int getLocalPhysicalAddress() {
- synchronized (mLock) {
- return mLocalPhysicalAddress;
- }
- }
-
- private final Object mLock = new Object();
-
- /**
* Broadcast Action: Display OSD message.
* <p>Send when the service has a message to display on screen for events
* that need user's attention such as ARC status change.
@@ -972,37 +944,6 @@
mHasAudioSystemDevice = hasDeviceType(types, HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);
mHasSwitchDevice = hasDeviceType(types, HdmiDeviceInfo.DEVICE_PURE_CEC_SWITCH);
mIsSwitchDevice = HdmiProperties.is_switch().orElse(false);
- addHotplugEventListener(new ClientHotplugEventListener());
- }
-
- private final class ClientHotplugEventListener implements HotplugEventListener {
-
- @Override
- public void onReceived(HdmiHotplugEvent event) {
- List<HdmiPortInfo> ports = new ArrayList<>();
- try {
- ports = mService.getPortInfo();
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- if (ports.isEmpty()) {
- Log.e(TAG, "Can't find port info, not updating connected status. "
- + "Hotplug event:" + event);
- return;
- }
- // If the HDMI OUT port is plugged or unplugged, update the mLocalPhysicalAddress
- for (HdmiPortInfo port : ports) {
- if (port.getId() == event.getPort()) {
- if (port.getType() == HdmiPortInfo.PORT_OUTPUT) {
- setLocalPhysicalAddress(
- event.isConnected()
- ? port.getAddress()
- : INVALID_PHYSICAL_ADDRESS);
- }
- break;
- }
- }
- }
}
private static boolean hasDeviceType(int[] types, int type) {
@@ -1404,7 +1345,11 @@
*/
@SystemApi
public int getPhysicalAddress() {
- return getLocalPhysicalAddress();
+ try {
+ return mService.getPhysicalAddress();
+ } catch (RemoteException e) {
+ return INVALID_PHYSICAL_ADDRESS;
+ }
}
/**
@@ -1421,7 +1366,7 @@
@SystemApi
public boolean isDeviceConnected(@NonNull HdmiDeviceInfo targetDevice) {
Objects.requireNonNull(targetDevice);
- int physicalAddress = getLocalPhysicalAddress();
+ int physicalAddress = getPhysicalAddress();
if (physicalAddress == INVALID_PHYSICAL_ADDRESS) {
return false;
}
@@ -1442,7 +1387,7 @@
@SystemApi
public boolean isRemoteDeviceConnected(@NonNull HdmiDeviceInfo targetDevice) {
Objects.requireNonNull(targetDevice);
- int physicalAddress = getLocalPhysicalAddress();
+ int physicalAddress = getPhysicalAddress();
if (physicalAddress == INVALID_PHYSICAL_ADDRESS) {
return false;
}