Refresh ANC UI if metadata is changed

Test: I didn't find any existed unit test for ANC, I manually tested in phone.
Bug: 341000840
Change-Id: If09abae5835225f3d9190a05d8308dbaa9e9b63d
This commit is contained in:
Haijie Hong
2024-05-24 14:12:32 +08:00
parent c479a3084b
commit 99a7e76561

View File

@@ -66,6 +66,7 @@ import java.util.List;
public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment { public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment {
public static final String KEY_DEVICE_ADDRESS = "device_address"; public static final String KEY_DEVICE_ADDRESS = "device_address";
private static final String TAG = "BTDeviceDetailsFrg"; private static final String TAG = "BTDeviceDetailsFrg";
private static final int METADATA_FAST_PAIR_CUSTOMIZED_FIELDS = 25;
@VisibleForTesting @VisibleForTesting
static int EDIT_DEVICE_NAME_ITEM_ID = Menu.FIRST; static int EDIT_DEVICE_NAME_ITEM_ID = Menu.FIRST;
@@ -95,11 +96,14 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
LocalBluetoothManager mManager; LocalBluetoothManager mManager;
@VisibleForTesting @VisibleForTesting
CachedBluetoothDevice mCachedDevice; CachedBluetoothDevice mCachedDevice;
BluetoothAdapter mBluetoothAdapter;
@Nullable @Nullable
InputDevice mInputDevice; InputDevice mInputDevice;
private UserManager mUserManager; private UserManager mUserManager;
int mExtraControlViewWidth = 0;
boolean mExtraControlUriLoaded = false;
private final BluetoothCallback mBluetoothCallback = private final BluetoothCallback mBluetoothCallback =
new BluetoothCallback() { new BluetoothCallback() {
@@ -115,6 +119,16 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
} }
}; };
private final BluetoothAdapter.OnMetadataChangedListener mExtraControlMetadataListener =
(device, key, value) -> {
if (key == METADATA_FAST_PAIR_CUSTOMIZED_FIELDS
&& mExtraControlViewWidth > 0
&& !mExtraControlUriLoaded) {
Log.i(TAG, "Update extra control UI because of metadata change.");
updateExtraControlUri(mExtraControlViewWidth);
}
};
public BluetoothDeviceDetailsFragment() { public BluetoothDeviceDetailsFragment() {
super(DISALLOW_CONFIG_BLUETOOTH); super(DISALLOW_CONFIG_BLUETOOTH);
} }
@@ -173,6 +187,7 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
public void onAttach(Context context) { public void onAttach(Context context) {
mDeviceAddress = getArguments().getString(KEY_DEVICE_ADDRESS); mDeviceAddress = getArguments().getString(KEY_DEVICE_ADDRESS);
mManager = getLocalBluetoothManager(context); mManager = getLocalBluetoothManager(context);
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mCachedDevice = getCachedDevice(mDeviceAddress); mCachedDevice = getCachedDevice(mDeviceAddress);
mUserManager = getUserManager(); mUserManager = getUserManager();
@@ -202,12 +217,18 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
: null); : null);
mManager.getEventManager().registerCallback(mBluetoothCallback); mManager.getEventManager().registerCallback(mBluetoothCallback);
mBluetoothAdapter.addOnMetadataChangedListener(
mCachedDevice.getDevice(),
context.getMainExecutor(),
mExtraControlMetadataListener);
} }
@Override @Override
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
mManager.getEventManager().unregisterCallback(mBluetoothCallback); mManager.getEventManager().unregisterCallback(mBluetoothCallback);
mBluetoothAdapter.removeOnMetadataChangedListener(
mCachedDevice.getDevice(), mExtraControlMetadataListener);
} }
private void updateExtraControlUri(int viewWidth) { private void updateExtraControlUri(int viewWidth) {
@@ -222,9 +243,9 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
controlUri = Uri.parse(uri + viewWidth); controlUri = Uri.parse(uri + viewWidth);
} catch (NullPointerException exception) { } catch (NullPointerException exception) {
Log.d(TAG, "unable to parse uri"); Log.d(TAG, "unable to parse uri");
controlUri = null;
} }
} }
mExtraControlUriLoaded |= controlUri != null;
final SlicePreferenceController slicePreferenceController = use( final SlicePreferenceController slicePreferenceController = use(
SlicePreferenceController.class); SlicePreferenceController.class);
slicePreferenceController.setSliceUri(sliceEnabled ? controlUri : null); slicePreferenceController.setSliceUri(sliceEnabled ? controlUri : null);
@@ -253,7 +274,8 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
if (view.getWidth() <= 0) { if (view.getWidth() <= 0) {
return; return;
} }
updateExtraControlUri(view.getWidth() - getPaddingSize()); mExtraControlViewWidth = view.getWidth() - getPaddingSize();
updateExtraControlUri(mExtraControlViewWidth);
view.getViewTreeObserver().removeOnGlobalLayoutListener( view.getViewTreeObserver().removeOnGlobalLayoutListener(
mOnGlobalLayoutListener); mOnGlobalLayoutListener);
} }