Disable bluetooth controller if unsupported

Only disable the controllers not the whole fragment because
user might need to have entry for other features.

Fixes: 73664409
Merged-In: I98ed248cf33d11715dd523e711cbc68ebf128ef8
Change-Id: I98ed248cf33d11715dd523e711cbc68ebf128ef8
Signed-off-by: Weilun Du <wdu@google.com>
(cherry picked from commit 68a195ae93)
This commit is contained in:
Weilun Du
2018-03-06 12:05:32 -08:00
parent 83d9047ef4
commit d4e1b94b58
7 changed files with 191 additions and 30 deletions

View File

@@ -16,12 +16,14 @@
package com.android.settings.bluetooth; package com.android.settings.bluetooth;
import android.content.pm.PackageManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -30,7 +32,7 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
/** /**
* Controller that shows received files * Controller that shows received files
*/ */
public class BluetoothFilesPreferenceController extends AbstractPreferenceController public class BluetoothFilesPreferenceController extends BasePreferenceController
implements PreferenceControllerMixin { implements PreferenceControllerMixin {
private static final String TAG = "BluetoothFilesPrefCtrl"; private static final String TAG = "BluetoothFilesPrefCtrl";
@@ -47,13 +49,15 @@ public class BluetoothFilesPreferenceController extends AbstractPreferenceContro
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
public BluetoothFilesPreferenceController(Context context) { public BluetoothFilesPreferenceController(Context context) {
super(context); super(context, KEY_RECEIVED_FILES);
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
} }
@Override @Override
public boolean isAvailable() { public int getAvailabilityStatus() {
return true; return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
? AVAILABLE
: DISABLED_UNSUPPORTED;
} }
@Override @Override

View File

@@ -23,6 +23,7 @@ import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
@@ -71,7 +72,10 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
if (mLocalManager == null){
Log.e(TAG, "Bluetooth is not supported on this device");
return;
}
updateBluetooth(); updateBluetooth();
mAvailableDevicesCategory.setProgress(mLocalAdapter.isDiscovering()); mAvailableDevicesCategory.setProgress(mLocalAdapter.isDiscovering());
} }
@@ -89,7 +93,10 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
@Override @Override
public void onStop() { public void onStop() {
super.onStop(); super.onStop();
if (mLocalManager == null){
Log.e(TAG, "Bluetooth is not supported on this device");
return;
}
// Make the device only visible to connected devices. // Make the device only visible to connected devices.
mAlwaysDiscoverable.stop(); mAlwaysDiscoverable.stop();
disableScanning(); disableScanning();

View File

@@ -15,15 +15,18 @@
*/ */
package com.android.settings.connecteddevice; package com.android.settings.connecteddevice;
import android.content.pm.PackageManager;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import com.android.settings.connecteddevice.usb.ConnectedUsbDeviceUpdater; import com.android.settings.connecteddevice.usb.ConnectedUsbDeviceUpdater;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.bluetooth.BluetoothDeviceUpdater; import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater; import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater;
import com.android.settings.search.ResultPayload;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -35,7 +38,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
* Controller to maintain the {@link android.support.v7.preference.PreferenceGroup} for all * Controller to maintain the {@link android.support.v7.preference.PreferenceGroup} for all
* connected devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference} * connected devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference}
*/ */
public class ConnectedDeviceGroupController extends AbstractPreferenceController public class ConnectedDeviceGroupController extends BasePreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop, implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
DevicePreferenceCallback { DevicePreferenceCallback {
@@ -47,7 +50,7 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
private ConnectedUsbDeviceUpdater mConnectedUsbDeviceUpdater; private ConnectedUsbDeviceUpdater mConnectedUsbDeviceUpdater;
public ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) { public ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) {
super(fragment.getContext()); super(fragment.getContext(), KEY);
init(lifecycle, new ConnectedBluetoothDeviceUpdater(fragment, this), init(lifecycle, new ConnectedBluetoothDeviceUpdater(fragment, this),
new ConnectedUsbDeviceUpdater(fragment, this)); new ConnectedUsbDeviceUpdater(fragment, this));
} }
@@ -56,7 +59,7 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle, ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle,
BluetoothDeviceUpdater bluetoothDeviceUpdater, BluetoothDeviceUpdater bluetoothDeviceUpdater,
ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) { ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) {
super(fragment.getContext()); super(fragment.getContext(), KEY);
init(lifecycle, bluetoothDeviceUpdater, connectedUsbDeviceUpdater); init(lifecycle, bluetoothDeviceUpdater, connectedUsbDeviceUpdater);
} }
@@ -75,17 +78,21 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY); if (isAvailable()) {
mPreferenceGroup.setVisible(false); mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
mPreferenceGroup.setVisible(false);
mBluetoothDeviceUpdater.setPrefContext(screen.getContext()); mBluetoothDeviceUpdater.setPrefContext(screen.getContext());
mBluetoothDeviceUpdater.forceUpdate(); mBluetoothDeviceUpdater.forceUpdate();
mConnectedUsbDeviceUpdater.initUsbPreference(screen.getContext()); mConnectedUsbDeviceUpdater.initUsbPreference(screen.getContext());
}
} }
@Override @Override
public boolean isAvailable() { public int getAvailabilityStatus() {
return true; return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
? AVAILABLE
: DISABLED_UNSUPPORTED;
} }
@Override @Override
@@ -111,7 +118,7 @@ public class ConnectedDeviceGroupController extends AbstractPreferenceController
private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater, private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater,
ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) { ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) {
if (lifecycle != null) { if (lifecycle != null && isAvailable()) {
lifecycle.addObserver(this); lifecycle.addObserver(this);
} }
mBluetoothDeviceUpdater = bluetoothDeviceUpdater; mBluetoothDeviceUpdater = bluetoothDeviceUpdater;

View File

@@ -15,6 +15,7 @@
*/ */
package com.android.settings.connecteddevice; package com.android.settings.connecteddevice;
import android.content.pm.PackageManager;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceGroup;
@@ -22,6 +23,7 @@ import android.support.v7.preference.PreferenceScreen;
import com.android.settings.bluetooth.BluetoothDeviceUpdater; import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater; import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -34,7 +36,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
* Controller to maintain the {@link PreferenceGroup} for all * Controller to maintain the {@link PreferenceGroup} for all
* saved devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference} * saved devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference}
*/ */
public class SavedDeviceGroupController extends AbstractPreferenceController public class SavedDeviceGroupController extends BasePreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop, implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
DevicePreferenceCallback { DevicePreferenceCallback {
@@ -45,14 +47,14 @@ public class SavedDeviceGroupController extends AbstractPreferenceController
private BluetoothDeviceUpdater mBluetoothDeviceUpdater; private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
public SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) { public SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) {
super(fragment.getContext()); super(fragment.getContext(), KEY);
init(lifecycle, new SavedBluetoothDeviceUpdater(fragment, SavedDeviceGroupController.this)); init(lifecycle, new SavedBluetoothDeviceUpdater(fragment, SavedDeviceGroupController.this));
} }
@VisibleForTesting @VisibleForTesting
SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle, SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle,
BluetoothDeviceUpdater bluetoothDeviceUpdater) { BluetoothDeviceUpdater bluetoothDeviceUpdater) {
super(fragment.getContext()); super(fragment.getContext(), KEY);
init(lifecycle, bluetoothDeviceUpdater); init(lifecycle, bluetoothDeviceUpdater);
} }
@@ -68,15 +70,19 @@ public class SavedDeviceGroupController extends AbstractPreferenceController
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY); if (isAvailable()) {
mPreferenceGroup.setVisible(false); mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
mBluetoothDeviceUpdater.setPrefContext(screen.getContext()); mPreferenceGroup.setVisible(false);
mBluetoothDeviceUpdater.forceUpdate(); mBluetoothDeviceUpdater.setPrefContext(screen.getContext());
mBluetoothDeviceUpdater.forceUpdate();
}
} }
@Override @Override
public boolean isAvailable() { public int getAvailabilityStatus() {
return true; return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
? AVAILABLE
: DISABLED_UNSUPPORTED;
} }
@Override @Override
@@ -101,7 +107,7 @@ public class SavedDeviceGroupController extends AbstractPreferenceController
} }
private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater) { private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater) {
if (lifecycle != null) { if (lifecycle != null && isAvailable()) {
lifecycle.addObserver(this); lifecycle.addObserver(this);
} }
mBluetoothDeviceUpdater = bluetoothDeviceUpdater; mBluetoothDeviceUpdater = bluetoothDeviceUpdater;

View File

@@ -18,6 +18,10 @@ 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.doReturn;
import static org.mockito.Mockito.spy;
import android.content.pm.PackageManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@@ -28,6 +32,7 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowApplication; import org.robolectric.shadows.ShadowApplication;
@@ -38,15 +43,18 @@ public class BluetoothFilesPreferenceControllerTest {
private Context mContext; private Context mContext;
private BluetoothFilesPreferenceController mController; private BluetoothFilesPreferenceController mController;
private Preference mPreference; private Preference mPreference;
@Mock
private PackageManager mPackageManager;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mContext = RuntimeEnvironment.application;
mController = new BluetoothFilesPreferenceController(mContext); mController = new BluetoothFilesPreferenceController(mContext);
mPreference = new Preference(mContext); mPreference = new Preference(mContext);
mPreference.setKey(BluetoothFilesPreferenceController.KEY_RECEIVED_FILES); mPreference.setKey(BluetoothFilesPreferenceController.KEY_RECEIVED_FILES);
doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
} }
@Test @Test

View File

@@ -15,6 +15,8 @@
*/ */
package com.android.settings.connecteddevice; package com.android.settings.connecteddevice;
import static com.android.settings.core.BasePreferenceController.DISABLED_UNSUPPORTED;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
@@ -24,6 +26,7 @@ import static org.mockito.Mockito.when;
import android.arch.lifecycle.LifecycleOwner; import android.arch.lifecycle.LifecycleOwner;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceManager;
@@ -58,6 +61,8 @@ public class ConnectedDeviceGroupControllerTest {
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceManager mPreferenceManager; private PreferenceManager mPreferenceManager;
@Mock
private PackageManager mPackageManager;
private PreferenceGroup mPreferenceGroup; private PreferenceGroup mPreferenceGroup;
private Context mContext; private Context mContext;
@@ -70,7 +75,7 @@ public class ConnectedDeviceGroupControllerTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = spy(RuntimeEnvironment.application);
mPreference = new Preference(mContext); mPreference = new Preference(mContext);
mPreference.setKey(PREFERENCE_KEY_1); mPreference.setKey(PREFERENCE_KEY_1);
mLifecycleOwner = () -> mLifecycle; mLifecycleOwner = () -> mLifecycle;
@@ -78,6 +83,8 @@ public class ConnectedDeviceGroupControllerTest {
mPreferenceGroup = spy(new PreferenceScreen(mContext, null)); mPreferenceGroup = spy(new PreferenceScreen(mContext, null));
when(mPreferenceGroup.getPreferenceManager()).thenReturn(mPreferenceManager); when(mPreferenceGroup.getPreferenceManager()).thenReturn(mPreferenceManager);
doReturn(mContext).when(mDashboardFragment).getContext(); doReturn(mContext).when(mDashboardFragment).getContext();
doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
mConnectedDeviceGroupController = new ConnectedDeviceGroupController(mDashboardFragment, mConnectedDeviceGroupController = new ConnectedDeviceGroupController(mDashboardFragment,
mLifecycle, mConnectedBluetoothDeviceUpdater, mConnectedUsbDeviceUpdater); mLifecycle, mConnectedBluetoothDeviceUpdater, mConnectedUsbDeviceUpdater);
@@ -134,4 +141,12 @@ public class ConnectedDeviceGroupControllerTest {
verify(mConnectedBluetoothDeviceUpdater).unregisterCallback(); verify(mConnectedBluetoothDeviceUpdater).unregisterCallback();
verify(mConnectedUsbDeviceUpdater).unregisterCallback(); verify(mConnectedUsbDeviceUpdater).unregisterCallback();
} }
@Test
public void testGetAvailabilityStatus_noBluetoothFeature_returnUnSupported() {
doReturn(false).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
assertThat(mConnectedDeviceGroupController.getAvailabilityStatus()).isEqualTo(
DISABLED_UNSUPPORTED);
}
} }

View File

@@ -0,0 +1,114 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.settings.connecteddevice;
import static android.arch.lifecycle.Lifecycle.Event.ON_START;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.DISABLED_UNSUPPORTED;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import android.arch.lifecycle.LifecycleOwner;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class)
public class SavedDeviceGroupControllerTest {
private static final String PREFERENCE_KEY_1 = "pref_key_1";
@Mock
private DashboardFragment mDashboardFragment;
@Mock
private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
@Mock
private PreferenceScreen mPreferenceScreen;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceManager mPreferenceManager;
@Mock
private PackageManager mPackageManager;
private PreferenceGroup mPreferenceGroup;
private Context mContext;
private Preference mPreference;
private SavedDeviceGroupController mConnectedDeviceGroupController;
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
doReturn(mContext).when(mDashboardFragment).getContext();
doReturn(mPackageManager).when(mContext).getPackageManager();
}
@Test
public void constructor_noBluetoothFeature_shouldNotRegisterCallback() {
doReturn(false).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
mConnectedDeviceGroupController = new SavedDeviceGroupController(mDashboardFragment,
mLifecycle, mBluetoothDeviceUpdater);
assertThat(mConnectedDeviceGroupController.getAvailabilityStatus()).isEqualTo(
DISABLED_UNSUPPORTED);
mLifecycle.handleLifecycleEvent(ON_START);
verify(mBluetoothDeviceUpdater, never()).registerCallback();
}
@Test
public void constructor_hasBluetoothFeature_shouldRegisterCallback() {
doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
mConnectedDeviceGroupController = new SavedDeviceGroupController(mDashboardFragment,
mLifecycle, mBluetoothDeviceUpdater);
assertThat(mConnectedDeviceGroupController.getAvailabilityStatus()).isEqualTo(
AVAILABLE);
mLifecycle.handleLifecycleEvent(ON_START);
verify(mBluetoothDeviceUpdater).registerCallback();
}
}