Fix battery level of earbuds bt devices is inconsistent

Before this CL, bluetooth settings update the battery level of earbuds
when receiving first pair status callback. But sometimes the callback
will not send immediately cause the battery level is inconsistent.

This CL will update the earbuds battery level when onResum() to refresh
battery level immediately.

Bug: 174929347
Bug: 159544311
Test: make -j42 RunSettingsRoboTests
Change-Id: I8505f8fed4ec821b9fa2d88bc437bddd7a30f0e2
This commit is contained in:
Hugh Chen
2021-03-08 15:21:33 +08:00
parent 6d513a2c67
commit bbbae9af8a
11 changed files with 35 additions and 1 deletions

View File

@@ -175,7 +175,7 @@ public final class BluetoothDevicePreference extends GearPreference {
mHideSecondTarget = hideSecondTarget; mHideSecondTarget = hideSecondTarget;
} }
private void onPreferenceAttributesChanged() { void onPreferenceAttributesChanged() {
ThreadUtils.postOnBackgroundThread(() -> { ThreadUtils.postOnBackgroundThread(() -> {
final Pair<Drawable, String> pair = final Pair<Drawable, String> pair =
BluetoothUtils.getBtRainbowDrawableWithDescription(getContext(), mCachedDevice); BluetoothUtils.getBtRainbowDrawableWithDescription(getContext(), mCachedDevice);

View File

@@ -317,4 +317,13 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
} }
return device.getBondState() == BluetoothDevice.BOND_BONDED && device.isConnected(); return device.getBondState() == BluetoothDevice.BOND_BONDED && device.isConnected();
} }
/**
* Update the attributes of {@link Preference}.
*/
public void refreshPreference() {
for (Preference preference : mPreferenceMap.values()) {
((BluetoothDevicePreference) preference).onPreferenceAttributesChanged();
}
}
} }

View File

@@ -68,6 +68,7 @@ public class AvailableMediaDeviceGroupController extends BasePreferenceControlle
} }
mBluetoothDeviceUpdater.registerCallback(); mBluetoothDeviceUpdater.registerCallback();
mLocalBluetoothManager.getEventManager().registerCallback(this); mLocalBluetoothManager.getEventManager().registerCallback(this);
mBluetoothDeviceUpdater.refreshPreference();
} }
@Override @Override

View File

@@ -61,6 +61,7 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
mBluetoothDeviceUpdater.registerCallback(); mBluetoothDeviceUpdater.registerCallback();
mConnectedUsbDeviceUpdater.registerCallback(); mConnectedUsbDeviceUpdater.registerCallback();
mConnectedDockUpdater.registerCallback(); mConnectedDockUpdater.registerCallback();
mBluetoothDeviceUpdater.refreshPreference();
} }
@Override @Override

View File

@@ -111,6 +111,7 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
mBluetoothDeviceUpdater.registerCallback(); mBluetoothDeviceUpdater.registerCallback();
mSavedDockUpdater.registerCallback(); mSavedDockUpdater.registerCallback();
mContext.registerReceiver(mReceiver, mIntentFilter); mContext.registerReceiver(mReceiver, mIntentFilter);
mBluetoothDeviceUpdater.refreshPreference();
} }
@Override @Override

View File

@@ -63,6 +63,7 @@ public class SavedDeviceGroupController extends BasePreferenceController
public void onStart() { public void onStart() {
mBluetoothDeviceUpdater.registerCallback(); mBluetoothDeviceUpdater.registerCallback();
mSavedDockUpdater.registerCallback(); mSavedDockUpdater.registerCallback();
mBluetoothDeviceUpdater.refreshPreference();
} }
@Override @Override

View File

@@ -58,6 +58,7 @@ public class BluetoothDeviceUpdaterTest {
private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C"; private static final String MAC_ADDRESS = "04:52:C7:0B:D8:3C";
private static final String SUB_MAC_ADDRESS = "05:52:C7:0B:D8:3C"; private static final String SUB_MAC_ADDRESS = "05:52:C7:0B:D8:3C";
private static final String TEST_NAME = "test_name";
@Mock @Mock
private DashboardFragment mDashboardFragment; private DashboardFragment mDashboardFragment;
@@ -256,4 +257,15 @@ public class BluetoothDeviceUpdaterTest {
verify(mDevicePreferenceCallback).onDeviceRemoved(mPreference); verify(mDevicePreferenceCallback).onDeviceRemoved(mPreference);
assertThat(mBluetoothDeviceUpdater.mPreferenceMap.containsKey(mBluetoothDevice)).isFalse(); assertThat(mBluetoothDeviceUpdater.mPreferenceMap.containsKey(mBluetoothDevice)).isFalse();
} }
@Test
public void havePreference_refreshPreference() {
mBluetoothDeviceUpdater.mPreferenceMap.put(mBluetoothDevice, mPreference);
mPreference.setTitle("fake_name");
when(mCachedBluetoothDevice.getName()).thenReturn(TEST_NAME);
mBluetoothDeviceUpdater.refreshPreference();
assertThat(mPreference.getTitle()).isEqualTo(TEST_NAME);
}
} }

View File

@@ -157,9 +157,11 @@ public class AvailableMediaDeviceGroupControllerTest {
public void testRegister() { public void testRegister() {
// register the callback in onStart() // register the callback in onStart()
mAvailableMediaDeviceGroupController.onStart(); mAvailableMediaDeviceGroupController.onStart();
verify(mAvailableMediaBluetoothDeviceUpdater).registerCallback(); verify(mAvailableMediaBluetoothDeviceUpdater).registerCallback();
verify(mLocalBluetoothManager.getEventManager()).registerCallback( verify(mLocalBluetoothManager.getEventManager()).registerCallback(
any(BluetoothCallback.class)); any(BluetoothCallback.class));
verify(mAvailableMediaBluetoothDeviceUpdater).refreshPreference();
} }
@Test @Test

View File

@@ -139,9 +139,11 @@ public class ConnectedDeviceGroupControllerTest {
public void onStart_shouldRegisterUpdaters() { public void onStart_shouldRegisterUpdaters() {
// register the callback in onStart() // register the callback in onStart()
mConnectedDeviceGroupController.onStart(); mConnectedDeviceGroupController.onStart();
verify(mConnectedBluetoothDeviceUpdater).registerCallback(); verify(mConnectedBluetoothDeviceUpdater).registerCallback();
verify(mConnectedUsbDeviceUpdater).registerCallback(); verify(mConnectedUsbDeviceUpdater).registerCallback();
verify(mConnectedDockUpdater).registerCallback(); verify(mConnectedDockUpdater).registerCallback();
verify(mConnectedBluetoothDeviceUpdater).refreshPreference();
} }
@Test @Test

View File

@@ -147,13 +147,16 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
public void callbackCanRegisterAndUnregister() { public void callbackCanRegisterAndUnregister() {
// register the callback in onStart() // register the callback in onStart()
mPreConnectedDeviceController.onStart(); mPreConnectedDeviceController.onStart();
verify(mBluetoothDeviceUpdater).registerCallback(); verify(mBluetoothDeviceUpdater).registerCallback();
verify(mDockUpdater).registerCallback(); verify(mDockUpdater).registerCallback();
verify(mContext).registerReceiver(mPreConnectedDeviceController.mReceiver, verify(mContext).registerReceiver(mPreConnectedDeviceController.mReceiver,
mPreConnectedDeviceController.mIntentFilter); mPreConnectedDeviceController.mIntentFilter);
verify(mBluetoothDeviceUpdater).refreshPreference();
// unregister the callback in onStop() // unregister the callback in onStop()
mPreConnectedDeviceController.onStop(); mPreConnectedDeviceController.onStop();
verify(mBluetoothDeviceUpdater).unregisterCallback(); verify(mBluetoothDeviceUpdater).unregisterCallback();
verify(mDockUpdater).unregisterCallback(); verify(mDockUpdater).unregisterCallback();
verify(mContext).unregisterReceiver(mPreConnectedDeviceController.mReceiver); verify(mContext).unregisterReceiver(mPreConnectedDeviceController.mReceiver);

View File

@@ -79,8 +79,10 @@ public class SavedDeviceGroupControllerTest {
public void testRegister() { public void testRegister() {
// register the callback in onStart() // register the callback in onStart()
mSavedDeviceGroupController.onStart(); mSavedDeviceGroupController.onStart();
verify(mBluetoothDeviceUpdater).registerCallback(); verify(mBluetoothDeviceUpdater).registerCallback();
verify(mSavedDockUpdater).registerCallback(); verify(mSavedDockUpdater).registerCallback();
verify(mBluetoothDeviceUpdater).refreshPreference();
} }
@Test @Test