Skip lifecycle if controller is not available

Fixes: 129076378
Test: RunSettingsRoboTests
Change-Id: If1e49785c2378ec2cf0f7d2837bc7d4c0ff915a0
This commit is contained in:
jackqdyulei
2019-03-22 14:43:19 -07:00
parent 8edea74eda
commit 281cf17d89
2 changed files with 39 additions and 2 deletions

View File

@@ -62,6 +62,7 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
@VisibleForTesting @VisibleForTesting
final Map<String, Bitmap> mIconCache; final Map<String, Bitmap> mIconCache;
private CachedBluetoothDevice mCachedDevice; private CachedBluetoothDevice mCachedDevice;
private BluetoothDevice mBluetoothDevice;
@VisibleForTesting @VisibleForTesting
BluetoothAdapter mBluetoothAdapter; BluetoothAdapter mBluetoothAdapter;
@VisibleForTesting @VisibleForTesting
@@ -102,6 +103,9 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
@Override @Override
public void onStart() { public void onStart() {
if (!isAvailable()) {
return;
}
mCachedDevice.registerCallback(this::onDeviceAttributesChanged); mCachedDevice.registerCallback(this::onDeviceAttributesChanged);
mBluetoothAdapter.registerMetadataListener(mCachedDevice.getDevice(), mMetadataListener, mBluetoothAdapter.registerMetadataListener(mCachedDevice.getDevice(), mMetadataListener,
mHandler); mHandler);
@@ -109,6 +113,9 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
@Override @Override
public void onStop() { public void onStop() {
if (!isAvailable()) {
return;
}
mCachedDevice.unregisterCallback(this::onDeviceAttributesChanged); mCachedDevice.unregisterCallback(this::onDeviceAttributesChanged);
mBluetoothAdapter.unregisterMetadataListener(mCachedDevice.getDevice()); mBluetoothAdapter.unregisterMetadataListener(mCachedDevice.getDevice());
@@ -123,6 +130,7 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
public void init(CachedBluetoothDevice cachedBluetoothDevice) { public void init(CachedBluetoothDevice cachedBluetoothDevice) {
mCachedDevice = cachedBluetoothDevice; mCachedDevice = cachedBluetoothDevice;
mBluetoothDevice = mCachedDevice.getDevice();
} }
@VisibleForTesting @VisibleForTesting

View File

@@ -18,6 +18,7 @@ package com.android.settings.bluetooth;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -78,6 +79,7 @@ public class AdvancedBluetoothDetailsHeaderControllerTest{
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mController = new AdvancedBluetoothDetailsHeaderController(mContext, "pref_Key"); mController = new AdvancedBluetoothDetailsHeaderController(mContext, "pref_Key");
when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
mController.init(mCachedDevice); mController.init(mCachedDevice);
mLayoutPreference = new LayoutPreference(mContext, mLayoutPreference = new LayoutPreference(mContext,
LayoutInflater.from(mContext).inflate(R.layout.advanced_bt_entity_header, null)); LayoutInflater.from(mContext).inflate(R.layout.advanced_bt_entity_header, null));
@@ -166,7 +168,10 @@ public class AdvancedBluetoothDetailsHeaderControllerTest{
} }
@Test @Test
public void onStart_registerCallback() { public void onStart_isAvailable_registerCallback() {
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
.thenReturn("true");
mController.onStart(); mController.onStart();
verify(mBluetoothAdapter).registerMetadataListener(mBluetoothDevice, verify(mBluetoothAdapter).registerMetadataListener(mBluetoothDevice,
@@ -174,12 +179,36 @@ public class AdvancedBluetoothDetailsHeaderControllerTest{
} }
@Test @Test
public void onStop_unregisterCallback() { public void onStop_isAvailable_unregisterCallback() {
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
.thenReturn("true");
mController.onStop(); mController.onStop();
verify(mBluetoothAdapter).unregisterMetadataListener(mBluetoothDevice); verify(mBluetoothAdapter).unregisterMetadataListener(mBluetoothDevice);
} }
@Test
public void onStart_notAvailable_registerCallback() {
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
.thenReturn("false");
mController.onStart();
verify(mBluetoothAdapter, never()).registerMetadataListener(mBluetoothDevice,
mController.mMetadataListener, mController.mHandler);
}
@Test
public void onStop_notAvailable_unregisterCallback() {
when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET))
.thenReturn("false");
mController.onStop();
verify(mBluetoothAdapter, never()).unregisterMetadataListener(mBluetoothDevice);
}
private void assertBatteryLevel(LinearLayout linearLayout, int batteryLevel) { private void assertBatteryLevel(LinearLayout linearLayout, int batteryLevel) {
final TextView textView = linearLayout.findViewById(R.id.bt_battery_summary); final TextView textView = linearLayout.findViewById(R.id.bt_battery_summary);
assertThat(textView.getText().toString()).isEqualTo( assertThat(textView.getText().toString()).isEqualTo(