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
This commit is contained in:
Matthew DeVore
2025-02-21 17:27:20 +00:00
parent bdd9cca602
commit a6925f2936
2 changed files with 6 additions and 4 deletions

View File

@@ -93,6 +93,7 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
public void onStart() { public void onStart() {
if (mExternalDisplayUpdater != null) { if (mExternalDisplayUpdater != null) {
mExternalDisplayUpdater.registerCallback(); mExternalDisplayUpdater.registerCallback();
mExternalDisplayUpdater.refreshPreference();
} }
if (mBluetoothDeviceUpdater != null) { if (mBluetoothDeviceUpdater != null) {

View File

@@ -55,7 +55,7 @@ public class ExternalDisplayUpdater {
private final DisplayListener mListener = new DisplayListener() { private final DisplayListener mListener = new DisplayListener() {
@Override @Override
public void update(int displayId) { public void update(int displayId) {
scheduleUpdate(); refreshPreference();
} }
}; };
@@ -91,8 +91,6 @@ public class ExternalDisplayUpdater {
.launch(); .launch();
return true; return true;
}); });
scheduleUpdate();
} }
/** /**
@@ -151,7 +149,10 @@ public class ExternalDisplayUpdater {
return null; return null;
} }
private void scheduleUpdate() { /**
* Updates preference, possibly removing it entirely.
*/
public void refreshPreference() {
if (mInjector == null) { if (mInjector == null) {
return; return;
} }