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:
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user