Merge "The UI does not remove the preference" into udc-dev am: 2821342259

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23199828

Change-Id: I6e3a673682128ed250e4d2daec9b8e39c5ef8cbe
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
SongFerng Wang
2023-05-12 14:02:45 +00:00
committed by Automerger Merge Worker

View File

@@ -35,8 +35,10 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager; import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@@ -125,7 +127,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
update(cachedBluetoothDevice); update(cachedBluetoothDevice);
} }
} else { } else {
removeAllDevicesFromPreference(); removeAllDevicesFromPreference();
} }
} }
@@ -252,7 +254,7 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
btPreference.setOnGearClickListener(mDeviceProfilesListener); btPreference.setOnGearClickListener(mDeviceProfilesListener);
if (this instanceof Preference.OnPreferenceClickListener) { if (this instanceof Preference.OnPreferenceClickListener) {
btPreference.setOnPreferenceClickListener( btPreference.setOnPreferenceClickListener(
(Preference.OnPreferenceClickListener)this); (Preference.OnPreferenceClickListener) this);
} }
mPreferenceMap.put(device, btPreference); mPreferenceMap.put(device, btPreference);
mDevicePreferenceCallback.onDeviceAdded(btPreference); mDevicePreferenceCallback.onDeviceAdded(btPreference);
@@ -266,17 +268,20 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
final BluetoothDevice device = cachedDevice.getDevice(); final BluetoothDevice device = cachedDevice.getDevice();
final CachedBluetoothDevice subCachedDevice = cachedDevice.getSubDevice(); final CachedBluetoothDevice subCachedDevice = cachedDevice.getSubDevice();
if (mPreferenceMap.containsKey(device)) { if (mPreferenceMap.containsKey(device)) {
mDevicePreferenceCallback.onDeviceRemoved(mPreferenceMap.get(device)); removePreference(device);
mPreferenceMap.remove(device);
} else if (subCachedDevice != null) { } else if (subCachedDevice != null) {
// When doing remove, to check if preference maps to sub device. // When doing remove, to check if preference maps to sub device.
// This would happen when connection state is changed in detail page that there is no // This would happen when connection state is changed in detail page that there is no
// callback from SettingsLib. // callback from SettingsLib.
final BluetoothDevice subDevice = subCachedDevice.getDevice(); final BluetoothDevice subDevice = subCachedDevice.getDevice();
if (mPreferenceMap.containsKey(subDevice)) { removePreference(subDevice);
mDevicePreferenceCallback.onDeviceRemoved(mPreferenceMap.get(subDevice)); }
mPreferenceMap.remove(subDevice); }
}
private void removePreference(BluetoothDevice device) {
if (mPreferenceMap.containsKey(device)) {
mDevicePreferenceCallback.onDeviceRemoved(mPreferenceMap.get(device));
mPreferenceMap.remove(device);
} }
} }
@@ -324,14 +329,38 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
* Update the attributes of {@link Preference}. * Update the attributes of {@link Preference}.
*/ */
public void refreshPreference() { public void refreshPreference() {
for (Preference preference : mPreferenceMap.values()) { List<BluetoothDevice> removeList = new ArrayList<>();
((BluetoothDevicePreference) preference).onPreferenceAttributesChanged(); mPreferenceMap.forEach((key, preference) -> {
if (isDeviceOfMapInCachedDevicesList(key)) {
((BluetoothDevicePreference) preference).onPreferenceAttributesChanged();
} else {
// If the BluetoothDevice of preference is not in the CachedDevices List, then
// remove this preference.
removeList.add(key);
}
});
for (BluetoothDevice bluetoothDevice : removeList) {
Log.d(getLogTag(), "removePreference key: " + bluetoothDevice.getAnonymizedAddress());
removePreference(bluetoothDevice);
} }
} }
protected boolean isDeviceInCachedDevicesList(CachedBluetoothDevice cachedDevice){ protected boolean isDeviceInCachedDevicesList(CachedBluetoothDevice cachedDevice) {
return mLocalManager.getCachedDeviceManager().getCachedDevicesCopy().contains(cachedDevice); return mLocalManager.getCachedDeviceManager().getCachedDevicesCopy().contains(cachedDevice);
} }
private boolean isDeviceOfMapInCachedDevicesList(BluetoothDevice inputBluetoothDevice) {
Collection<CachedBluetoothDevice> cachedDevices =
mLocalManager.getCachedDeviceManager().getCachedDevicesCopy();
if (cachedDevices == null || cachedDevices.isEmpty()) {
return false;
}
return cachedDevices.stream()
.anyMatch(cachedBluetoothDevice -> cachedBluetoothDevice.getDevice() != null
&& cachedBluetoothDevice.getDevice().equals(inputBluetoothDevice));
}
protected String getLogTag() { protected String getLogTag() {
return TAG; return TAG;
} }