OSDN Git Service

Skip lifecycle if controller is not available
authorjackqdyulei <jackqdyulei@google.com>
Fri, 22 Mar 2019 21:43:19 +0000 (14:43 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Wed, 27 Mar 2019 00:00:36 +0000 (17:00 -0700)
Fixes: 129076378
Test: RunSettingsRoboTests
Change-Id: If1e49785c2378ec2cf0f7d2837bc7d4c0ff915a0

src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderController.java
tests/robotests/src/com/android/settings/bluetooth/AdvancedBluetoothDetailsHeaderControllerTest.java

index 2c4db1f..1d2d793 100644 (file)
@@ -62,6 +62,7 @@ public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceCont
     @VisibleForTesting
     final Map<String, Bitmap> 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
index 5538155..b961669 100644 (file)
@@ -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(