diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index 7acdc79793e..a210ea5fc1b 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -67,4 +67,11 @@
settings:allowDividerAbove="true"
settings:controller="com.android.settings.connecteddevice.AdvancedConnectedDeviceController"/>
+
+
+
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index cbabb06eb61..7df260322e6 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -28,11 +28,8 @@ import com.android.settings.core.SettingsUIDeviceConfig;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.slices.SlicePreferenceController;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -66,25 +63,6 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment {
return R.xml.connected_devices;
}
- @Override
- protected List createPreferenceControllers(Context context) {
- return buildPreferenceControllers(context, getSettingsLifecycle());
- }
-
- private static List buildPreferenceControllers(Context context,
- Lifecycle lifecycle) {
- final List controllers = new ArrayList<>();
- final DiscoverableFooterPreferenceController discoverableFooterPreferenceController =
- new DiscoverableFooterPreferenceController(context);
- controllers.add(discoverableFooterPreferenceController);
-
- if (lifecycle != null) {
- lifecycle.addObserver(discoverableFooterPreferenceController);
- }
-
- return controllers;
- }
-
@Override
public void onAttach(Context context) {
super.onAttach(context);
@@ -93,7 +71,6 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment {
use(AvailableMediaDeviceGroupController.class).init(this);
use(ConnectedDeviceGroupController.class).init(this);
use(PreviouslyConnectedDevicePreferenceController.class).init(this);
- use(DiscoverableFooterPreferenceController.class).init(this);
use(SlicePreferenceController.class).setSliceUri(nearbyEnabled
? Uri.parse(getString(R.string.config_nearby_devices_slice_uri))
: null);
@@ -111,11 +88,5 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment {
sir.xmlResId = R.xml.connected_devices;
return Arrays.asList(sir);
}
-
- @Override
- public List createPreferenceControllers(Context
- context) {
- return buildPreferenceControllers(context, null /* lifecycle */);
- }
};
}
diff --git a/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java b/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java
index ead33070ee0..91368bf2a81 100644
--- a/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java
+++ b/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java
@@ -32,32 +32,29 @@ import com.android.settings.R;
import com.android.settings.bluetooth.AlwaysDiscoverable;
import com.android.settings.bluetooth.Utils;
import com.android.settings.core.BasePreferenceController;
-import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnPause;
-import com.android.settingslib.core.lifecycle.events.OnResume;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.FooterPreference;
-import com.android.settingslib.widget.FooterPreferenceMixinCompat;
/**
* Controller that shows and updates the bluetooth device name
*/
public class DiscoverableFooterPreferenceController extends BasePreferenceController
- implements LifecycleObserver, OnResume, OnPause {
+ implements LifecycleObserver, OnStart, OnStop {
private static final String KEY = "discoverable_footer_preference";
@VisibleForTesting
BroadcastReceiver mBluetoothChangedReceiver;
@VisibleForTesting
LocalBluetoothManager mLocalManager;
- private FooterPreferenceMixinCompat mFooterPreferenceMixin;
- private FooterPreference mPreference;
private BluetoothAdapter mBluetoothAdapter;
private AlwaysDiscoverable mAlwaysDiscoverable;
+ private FooterPreference mPreference;
- public DiscoverableFooterPreferenceController(Context context) {
- super(context, KEY);
+ public DiscoverableFooterPreferenceController(Context context, String key) {
+ super(context, key);
mLocalManager = Utils.getLocalBtManager(context);
if (mLocalManager == null) {
return;
@@ -67,53 +64,21 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
initReceiver();
}
- private void initReceiver() {
- mBluetoothChangedReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
- final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
- BluetoothAdapter.ERROR);
- updateFooterPreferenceTitle(state);
- }
- }
- };
- }
-
- public void init(DashboardFragment fragment) {
- mFooterPreferenceMixin = new FooterPreferenceMixinCompat(fragment,
- fragment.getSettingsLifecycle());
- }
-
- @VisibleForTesting
- void init(FooterPreferenceMixinCompat footerPreferenceMixin, FooterPreference preference,
- AlwaysDiscoverable alwaysDiscoverable) {
- mFooterPreferenceMixin = footerPreferenceMixin;
- mPreference = preference;
- mAlwaysDiscoverable = alwaysDiscoverable;
- }
-
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- addFooterPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
}
@Override
public int getAvailabilityStatus() {
return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
- ? AVAILABLE
+ ? AVAILABLE_UNSEARCHABLE
: UNSUPPORTED_ON_DEVICE;
}
- private void addFooterPreference(PreferenceScreen screen) {
- mPreference = mFooterPreferenceMixin.createFooterPreference();
- mPreference.setKey(KEY);
- screen.addPreference(mPreference);
- }
-
@Override
- public void onResume() {
+ public void onStart() {
if (mLocalManager == null) {
return;
}
@@ -124,7 +89,7 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
}
@Override
- public void onPause() {
+ public void onStop() {
if (mLocalManager == null) {
return;
}
@@ -132,7 +97,7 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
mAlwaysDiscoverable.stop();
}
- private void updateFooterPreferenceTitle (int bluetoothState) {
+ private void updateFooterPreferenceTitle(int bluetoothState) {
if (bluetoothState == BluetoothAdapter.STATE_ON) {
mPreference.setTitle(getPreferenceTitle());
} else {
@@ -150,4 +115,17 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro
mContext.getText(R.string.bluetooth_device_name_summary),
BidiFormatter.getInstance().unicodeWrap(deviceName));
}
+
+ private void initReceiver() {
+ mBluetoothChangedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
+ final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
+ BluetoothAdapter.ERROR);
+ updateFooterPreferenceTitle(state);
+ }
+ }
+ };
+ }
}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
index 232837539e6..778bb79c5b2 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
@@ -51,6 +51,7 @@ import java.util.List;
ShadowConnectivityManager.class, ShadowBluetoothAdapter.class})
public class ConnectedDeviceDashboardFragmentTest {
private static final String KEY_NEARBY_DEVICES = "bt_nearby_slice";
+ private static final String KEY_DISCOVERABLE_FOOTER = "discoverable_footer";
@Mock
private PackageManager mPackageManager;
@@ -81,7 +82,7 @@ public class ConnectedDeviceDashboardFragmentTest {
.getNonIndexableKeys(mContext);
assertThat(niks).containsExactly(KEY_CONNECTED_DEVICES, KEY_AVAILABLE_DEVICES,
- KEY_NEARBY_DEVICES);
+ KEY_NEARBY_DEVICES, KEY_DISCOVERABLE_FOOTER);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java
index 3cc125b4d25..065b924138c 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java
@@ -30,14 +30,11 @@ import android.content.pm.PackageManager;
import android.text.BidiFormatter;
import android.text.TextUtils;
-import androidx.preference.PreferenceScreen;
-
import com.android.settings.R;
import com.android.settings.bluetooth.AlwaysDiscoverable;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settingslib.widget.FooterPreference;
-import com.android.settingslib.widget.FooterPreferenceMixinCompat;
import org.junit.Before;
import org.junit.Test;
@@ -49,6 +46,7 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList;
import java.util.List;
@@ -56,16 +54,12 @@ import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowBluetoothAdapter.class)
public class DiscoverableFooterPreferenceControllerTest {
+
private static final String DEVICE_NAME = "device name";
- private static final String KEY = "discoverable_footer_preference";
@Mock
private PackageManager mPackageManager;
@Mock
- private PreferenceScreen mScreen;
- @Mock
- private FooterPreferenceMixinCompat mFooterPreferenceMixin;
- @Mock
private AlwaysDiscoverable mAlwaysDiscoverable;
private Context mContext;
@@ -82,10 +76,13 @@ public class DiscoverableFooterPreferenceControllerTest {
doReturn(mPackageManager).when(mContext).getPackageManager();
mDiscoverableFooterPreferenceController =
- new DiscoverableFooterPreferenceController(mContext);
- mPreference = spy(new FooterPreference(mContext));
- mDiscoverableFooterPreferenceController.init(mFooterPreferenceMixin, mPreference,
- mAlwaysDiscoverable);
+ new DiscoverableFooterPreferenceController(mContext, "key");
+ mPreference = new FooterPreference(mContext);
+ ReflectionHelpers
+ .setField(mDiscoverableFooterPreferenceController, "mPreference", mPreference);
+ ReflectionHelpers
+ .setField(mDiscoverableFooterPreferenceController,
+ "mAlwaysDiscoverable", mAlwaysDiscoverable);
mBluetoothChangedReceiver = mDiscoverableFooterPreferenceController
.mBluetoothChangedReceiver;
}
@@ -99,33 +96,25 @@ public class DiscoverableFooterPreferenceControllerTest {
}
@Test
- public void getAvailabilityStatus_BluetoothFeature_returnAvailable() {
+ public void getAvailabilityStatus_BluetoothFeature_returnAvailableUnsearchable() {
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)).thenReturn(true);
assertThat(mDiscoverableFooterPreferenceController.getAvailabilityStatus()).isEqualTo(
- BasePreferenceController.AVAILABLE);
+ BasePreferenceController.AVAILABLE_UNSEARCHABLE);
}
@Test
- public void displayPreference() {
- when(mFooterPreferenceMixin.createFooterPreference()).thenReturn(mPreference);
- mDiscoverableFooterPreferenceController.displayPreference(mScreen);
+ public void onStart_shouldRegisterBluetoothChanged() {
+ mDiscoverableFooterPreferenceController.onStart();
- verify(mPreference).setKey(KEY);
- verify(mScreen).addPreference(mPreference);
- }
-
- @Test
- public void onResume() {
- mDiscoverableFooterPreferenceController.onResume();
assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver);
verify(mAlwaysDiscoverable).start();
}
@Test
- public void onPause() {
- mDiscoverableFooterPreferenceController.onResume();
- mDiscoverableFooterPreferenceController.onPause();
+ public void onStop_shouldUnregisterBluetoothChanged() {
+ mDiscoverableFooterPreferenceController.onStart();
+ mDiscoverableFooterPreferenceController.onStop();
assertThat(getRegisteredBroadcastReceivers()).doesNotContain(mBluetoothChangedReceiver);
verify(mAlwaysDiscoverable).stop();
@@ -147,6 +136,22 @@ public class DiscoverableFooterPreferenceControllerTest {
assertThat(mPreference.getTitle()).isEqualTo(generateTitle(null));
}
+ @Test
+ public void onStart_localBluetoothManagerNull_shouldNotCrash() {
+ mDiscoverableFooterPreferenceController.mLocalManager = null;
+
+ // Shouldn't crash
+ mDiscoverableFooterPreferenceController.onStart();
+ }
+
+ @Test
+ public void onStop_localBluetoothManagerNull_shouldNotCrash() {
+ mDiscoverableFooterPreferenceController.mLocalManager = null;
+
+ // Shouldn't crash
+ mDiscoverableFooterPreferenceController.onStop();
+ }
+
private CharSequence generateTitle(String deviceName) {
if (deviceName == null) {
return mContext.getString(R.string.bluetooth_off_footer);
@@ -176,22 +181,4 @@ public class DiscoverableFooterPreferenceControllerTest {
}
return registeredBroadcastReceivers;
}
-
- @Test
- public void onResume_localBluetoothManagerNull_shouldNotCrash() {
- mDiscoverableFooterPreferenceController.mLocalManager = null;
- mDiscoverableFooterPreferenceController.init(mFooterPreferenceMixin, mPreference, null);
-
- // Shouldn't crash
- mDiscoverableFooterPreferenceController.onResume();
- }
-
- @Test
- public void onPause_localBluetoothManagerNull_shouldNotCrash() {
- mDiscoverableFooterPreferenceController.mLocalManager = null;
- mDiscoverableFooterPreferenceController.init(mFooterPreferenceMixin, mPreference, null);
-
- // Shouldn't crash
- mDiscoverableFooterPreferenceController.onPause();
- }
}
\ No newline at end of file