From 281cf17d899f3353bece0b710d725d171b51861d Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Fri, 22 Mar 2019 14:43:19 -0700 Subject: [PATCH] Skip lifecycle if controller is not available Fixes: 129076378 Test: RunSettingsRoboTests Change-Id: If1e49785c2378ec2cf0f7d2837bc7d4c0ff915a0 --- ...ancedBluetoothDetailsHeaderController.java | 8 +++++ ...dBluetoothDetailsHeaderControllerTest.java | 33 +++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java index 2c4db1f486a..1d2d793496a 100644 --- a/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java +++ b/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java @@ -62,6 +62,7 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont @VisibleForTesting final Map mIconCache; private CachedBluetoothDevice mCachedDevice; + private BluetoothDevice mBluetoothDevice; @VisibleForTesting BluetoothAdapter mBluetoothAdapter; @VisibleForTesting @@ -102,6 +103,9 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont @Override public void onStart() { + if (!isAvailable()) { + return; + } mCachedDevice.registerCallback(this::onDeviceAttributesChanged); mBluetoothAdapter.registerMetadataListener(mCachedDevice.getDevice(), mMetadataListener, mHandler); @@ -109,6 +113,9 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont @Override public void onStop() { + if (!isAvailable()) { + return; + } mCachedDevice.unregisterCallback(this::onDeviceAttributesChanged); mBluetoothAdapter.unregisterMetadataListener(mCachedDevice.getDevice()); @@ -123,6 +130,7 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont public void init(CachedBluetoothDevice cachedBluetoothDevice) { mCachedDevice = cachedBluetoothDevice; + mBluetoothDevice = mCachedDevice.getDevice(); } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java index 55381556eee..b9616697099 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.bluetooth; 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.when; @@ -78,6 +79,7 @@ public class AdvancedBluetoothDetailsHeaderControllerTest{ mContext = RuntimeEnvironment.application; mController = new AdvancedBluetoothDetailsHeaderController(mContext, "pref_Key"); + when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice); mController.init(mCachedDevice); mLayoutPreference = new LayoutPreference(mContext, LayoutInflater.from(mContext).inflate(R.layout.advanced_bt_entity_header, null)); @@ -166,7 +168,10 @@ public class AdvancedBluetoothDetailsHeaderControllerTest{ } @Test - public void onStart_registerCallback() { + public void onStart_isAvailable_registerCallback() { + when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET)) + .thenReturn("true"); + mController.onStart(); verify(mBluetoothAdapter).registerMetadataListener(mBluetoothDevice, @@ -174,12 +179,36 @@ public class AdvancedBluetoothDetailsHeaderControllerTest{ } @Test - public void onStop_unregisterCallback() { + public void onStop_isAvailable_unregisterCallback() { + when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTHETHERED_HEADSET)) + .thenReturn("true"); + mController.onStop(); 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) { final TextView textView = linearLayout.findViewById(R.id.bt_battery_summary); assertThat(textView.getText().toString()).isEqualTo(