diff --git a/src/com/android/settings/bluetooth/BluetoothFilesPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothFilesPreferenceController.java index 6fbb84a45ce..1ecfed42515 100644 --- a/src/com/android/settings/bluetooth/BluetoothFilesPreferenceController.java +++ b/src/com/android/settings/bluetooth/BluetoothFilesPreferenceController.java @@ -16,14 +16,12 @@ package com.android.settings.bluetooth; -import android.content.pm.PackageManager; import android.content.Context; import android.content.Intent; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.AbstractPreferenceController; @@ -32,7 +30,7 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Controller that shows received files */ -public class BluetoothFilesPreferenceController extends BasePreferenceController +public class BluetoothFilesPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin { private static final String TAG = "BluetoothFilesPrefCtrl"; @@ -49,15 +47,13 @@ public class BluetoothFilesPreferenceController extends BasePreferenceController private MetricsFeatureProvider mMetricsFeatureProvider; public BluetoothFilesPreferenceController(Context context) { - super(context, KEY_RECEIVED_FILES); + super(context); mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override - public int getAvailabilityStatus() { - return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) - ? AVAILABLE - : DISABLED_UNSUPPORTED; + public boolean isAvailable() { + return true; } @Override diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java index 1a64f262684..0e556c43d7a 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java @@ -23,7 +23,6 @@ import android.bluetooth.BluetoothDevice; import android.content.Context; import android.os.Bundle; import android.support.annotation.VisibleForTesting; -import android.util.Log; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; @@ -72,10 +71,7 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme @Override public void onStart() { super.onStart(); - if (mLocalManager == null){ - Log.e(TAG, "Bluetooth is not supported on this device"); - return; - } + updateBluetooth(); mAvailableDevicesCategory.setProgress(mLocalAdapter.isDiscovering()); } @@ -93,10 +89,7 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme @Override public void 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. mAlwaysDiscoverable.stop(); disableScanning(); diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java index c77a7358d60..3d5d0e58e8f 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java @@ -15,18 +15,15 @@ */ package com.android.settings.connecteddevice; -import android.content.pm.PackageManager; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; import com.android.settings.connecteddevice.usb.ConnectedUsbDeviceUpdater; -import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.bluetooth.BluetoothDeviceUpdater; import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater; -import com.android.settings.search.ResultPayload; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; @@ -38,7 +35,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; * Controller to maintain the {@link android.support.v7.preference.PreferenceGroup} for all * connected devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference} */ -public class ConnectedDeviceGroupController extends BasePreferenceController +public class ConnectedDeviceGroupController extends AbstractPreferenceController implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback { @@ -50,7 +47,7 @@ public class ConnectedDeviceGroupController extends BasePreferenceController private ConnectedUsbDeviceUpdater mConnectedUsbDeviceUpdater; public ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) { - super(fragment.getContext(), KEY); + super(fragment.getContext()); init(lifecycle, new ConnectedBluetoothDeviceUpdater(fragment, this), new ConnectedUsbDeviceUpdater(fragment, this)); } @@ -59,7 +56,7 @@ public class ConnectedDeviceGroupController extends BasePreferenceController ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater, ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) { - super(fragment.getContext(), KEY); + super(fragment.getContext()); init(lifecycle, bluetoothDeviceUpdater, connectedUsbDeviceUpdater); } @@ -78,21 +75,17 @@ public class ConnectedDeviceGroupController extends BasePreferenceController @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - if (isAvailable()) { - mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY); - mPreferenceGroup.setVisible(false); + mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY); + mPreferenceGroup.setVisible(false); - mBluetoothDeviceUpdater.setPrefContext(screen.getContext()); - mBluetoothDeviceUpdater.forceUpdate(); - mConnectedUsbDeviceUpdater.initUsbPreference(screen.getContext()); - } + mBluetoothDeviceUpdater.setPrefContext(screen.getContext()); + mBluetoothDeviceUpdater.forceUpdate(); + mConnectedUsbDeviceUpdater.initUsbPreference(screen.getContext()); } @Override - public int getAvailabilityStatus() { - return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) - ? AVAILABLE - : DISABLED_UNSUPPORTED; + public boolean isAvailable() { + return true; } @Override @@ -118,7 +111,7 @@ public class ConnectedDeviceGroupController extends BasePreferenceController private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater, ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater) { - if (lifecycle != null && isAvailable()) { + if (lifecycle != null) { lifecycle.addObserver(this); } mBluetoothDeviceUpdater = bluetoothDeviceUpdater; diff --git a/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java b/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java index da38d9fddbc..74450477dd5 100644 --- a/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java +++ b/src/com/android/settings/connecteddevice/SavedDeviceGroupController.java @@ -15,7 +15,6 @@ */ package com.android.settings.connecteddevice; -import android.content.pm.PackageManager; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; @@ -23,7 +22,6 @@ import android.support.v7.preference.PreferenceScreen; import com.android.settings.bluetooth.BluetoothDeviceUpdater; import com.android.settings.bluetooth.SavedBluetoothDeviceUpdater; -import com.android.settings.core.BasePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.core.AbstractPreferenceController; @@ -36,7 +34,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; * Controller to maintain the {@link PreferenceGroup} for all * saved devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference} */ -public class SavedDeviceGroupController extends BasePreferenceController +public class SavedDeviceGroupController extends AbstractPreferenceController implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback { @@ -47,14 +45,14 @@ public class SavedDeviceGroupController extends BasePreferenceController private BluetoothDeviceUpdater mBluetoothDeviceUpdater; public SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) { - super(fragment.getContext(), KEY); + super(fragment.getContext()); init(lifecycle, new SavedBluetoothDeviceUpdater(fragment, SavedDeviceGroupController.this)); } @VisibleForTesting SavedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater) { - super(fragment.getContext(), KEY); + super(fragment.getContext()); init(lifecycle, bluetoothDeviceUpdater); } @@ -70,19 +68,15 @@ public class SavedDeviceGroupController extends BasePreferenceController @Override public void displayPreference(PreferenceScreen screen) { - if (isAvailable()) { - mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY); - mPreferenceGroup.setVisible(false); - mBluetoothDeviceUpdater.setPrefContext(screen.getContext()); - mBluetoothDeviceUpdater.forceUpdate(); - } + mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY); + mPreferenceGroup.setVisible(false); + mBluetoothDeviceUpdater.setPrefContext(screen.getContext()); + mBluetoothDeviceUpdater.forceUpdate(); } @Override - public int getAvailabilityStatus() { - return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) - ? AVAILABLE - : DISABLED_UNSUPPORTED; + public boolean isAvailable() { + return true; } @Override @@ -107,7 +101,7 @@ public class SavedDeviceGroupController extends BasePreferenceController } private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater) { - if (lifecycle != null && isAvailable()) { + if (lifecycle != null) { lifecycle.addObserver(this); } mBluetoothDeviceUpdater = bluetoothDeviceUpdater; diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java index 4335f0570a2..2c1e46d8b54 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java @@ -18,10 +18,6 @@ package com.android.settings.bluetooth; 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.Intent; import android.os.Bundle; @@ -32,7 +28,6 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.shadows.ShadowApplication; @@ -43,18 +38,15 @@ public class BluetoothFilesPreferenceControllerTest { private Context mContext; private BluetoothFilesPreferenceController mController; private Preference mPreference; - @Mock - private PackageManager mPackageManager; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); + + mContext = RuntimeEnvironment.application; mController = new BluetoothFilesPreferenceController(mContext); mPreference = new Preference(mContext); mPreference.setKey(BluetoothFilesPreferenceController.KEY_RECEIVED_FILES); - doReturn(mPackageManager).when(mContext).getPackageManager(); - doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); } @Test diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java index 373c255236c..3656b38f3c6 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java @@ -15,8 +15,6 @@ */ package com.android.settings.connecteddevice; -import static com.android.settings.core.BasePreferenceController.DISABLED_UNSUPPORTED; - import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; @@ -26,7 +24,6 @@ import static org.mockito.Mockito.when; 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; @@ -61,8 +58,6 @@ public class ConnectedDeviceGroupControllerTest { private PreferenceScreen mPreferenceScreen; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private PreferenceManager mPreferenceManager; - @Mock - private PackageManager mPackageManager; private PreferenceGroup mPreferenceGroup; private Context mContext; @@ -75,7 +70,7 @@ public class ConnectedDeviceGroupControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); + mContext = RuntimeEnvironment.application; mPreference = new Preference(mContext); mPreference.setKey(PREFERENCE_KEY_1); mLifecycleOwner = () -> mLifecycle; @@ -83,8 +78,6 @@ public class ConnectedDeviceGroupControllerTest { mPreferenceGroup = spy(new PreferenceScreen(mContext, null)); when(mPreferenceGroup.getPreferenceManager()).thenReturn(mPreferenceManager); doReturn(mContext).when(mDashboardFragment).getContext(); - doReturn(mPackageManager).when(mContext).getPackageManager(); - doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); mConnectedDeviceGroupController = new ConnectedDeviceGroupController(mDashboardFragment, mLifecycle, mConnectedBluetoothDeviceUpdater, mConnectedUsbDeviceUpdater); @@ -141,12 +134,4 @@ public class ConnectedDeviceGroupControllerTest { verify(mConnectedBluetoothDeviceUpdater).unregisterCallback(); verify(mConnectedUsbDeviceUpdater).unregisterCallback(); } - - @Test - public void testGetAvailabilityStatus_noBluetoothFeature_returnUnSupported() { - doReturn(false).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); - - assertThat(mConnectedDeviceGroupController.getAvailabilityStatus()).isEqualTo( - DISABLED_UNSUPPORTED); - } } diff --git a/tests/robotests/src/com/android/settings/connecteddevice/SavedDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/SavedDeviceGroupControllerTest.java deleted file mode 100644 index 723b304c565..00000000000 --- a/tests/robotests/src/com/android/settings/connecteddevice/SavedDeviceGroupControllerTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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.TestConfig; -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) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -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(); - } -}