From a6925f2936fc161566956f551fc2c4038541dbbe Mon Sep 17 00:00:00 2001 From: Matthew DeVore Date: Fri, 21 Feb 2025 17:27:20 +0000 Subject: [PATCH] Displays updater: force refresh on listener add Refresh the preference every time the listener is added, not only for the first callback registration. This is needed because when switching fragments, the callback is unregistered by ConnectedDeviceGroupController, so no updates are received in the child fragments. This is handled differently by other device updaters. UsbConnectionBroadcastReceiver invokes onReceive() in register() to force a refresh. BluetoothDeviceUpdater requires the caller to do a force refresh explicitly. This CL goes with the latter pattern. Flag: com.android.settings.flags.display_topology_pane_in_display_list Test: open CD settings fragment, remove all displays, then go back to CD entry fragment Bug: b/398042811 Change-Id: Id139f227b1d59bde0174538b29b46fdd21ec0d24 --- .../connecteddevice/ConnectedDeviceGroupController.java | 1 + .../connecteddevice/display/ExternalDisplayUpdater.java | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java index c4553123171..0ddc08ef1d9 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java @@ -93,6 +93,7 @@ public class ConnectedDeviceGroupController extends BasePreferenceController public void onStart() { if (mExternalDisplayUpdater != null) { mExternalDisplayUpdater.registerCallback(); + mExternalDisplayUpdater.refreshPreference(); } if (mBluetoothDeviceUpdater != null) { diff --git a/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java b/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java index 64dd7bb2fdf..01dc1daf370 100644 --- a/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java +++ b/src/com/android/settings/connecteddevice/display/ExternalDisplayUpdater.java @@ -55,7 +55,7 @@ public class ExternalDisplayUpdater { private final DisplayListener mListener = new DisplayListener() { @Override public void update(int displayId) { - scheduleUpdate(); + refreshPreference(); } }; @@ -91,8 +91,6 @@ public class ExternalDisplayUpdater { .launch(); return true; }); - - scheduleUpdate(); } /** @@ -151,7 +149,10 @@ public class ExternalDisplayUpdater { return null; } - private void scheduleUpdate() { + /** + * Updates preference, possibly removing it entirely. + */ + public void refreshPreference() { if (mInjector == null) { return; }