diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceController.java b/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceController.java index 85be84cbc5a..61bed17fe42 100644 --- a/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceController.java +++ b/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceController.java @@ -46,7 +46,7 @@ public class BluetoothDeviceNamePreferenceController extends BasePreferenceContr @VisibleForTesting Preference mPreference; private LocalBluetoothManager mLocalManager; - private LocalBluetoothAdapter mLocalAdapter; + protected LocalBluetoothAdapter mLocalAdapter; /** * Constructor exclusively used for Slice. @@ -77,8 +77,10 @@ public class BluetoothDeviceNamePreferenceController extends BasePreferenceContr @Override public void onStart() { - mContext.registerReceiver(mReceiver, - new IntentFilter(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED)); + final IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED); + intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); + mContext.registerReceiver(mReceiver, intentFilter); } @Override @@ -93,7 +95,7 @@ public class BluetoothDeviceNamePreferenceController extends BasePreferenceContr @Override public void updateState(Preference preference) { - updateDeviceName(preference); + updatePreferenceState(preference); } @Override @@ -129,7 +131,7 @@ public class BluetoothDeviceNamePreferenceController extends BasePreferenceContr * * @param preference to set the summary for */ - protected void updateDeviceName(final Preference preference) { + protected void updatePreferenceState(final Preference preference) { preference.setSelectable(false); preference.setSummary(getSummary()); } @@ -150,8 +152,10 @@ public class BluetoothDeviceNamePreferenceController extends BasePreferenceContr if (TextUtils.equals(action, BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED)) { if (mPreference != null && mLocalAdapter != null && mLocalAdapter.isEnabled()) { - updateDeviceName(mPreference); + updatePreferenceState(mPreference); } + } else if (TextUtils.equals(action, BluetoothAdapter.ACTION_STATE_CHANGED)) { + updatePreferenceState(mPreference); } } }; diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java index 933145ec332..3b07bd3cd20 100644 --- a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java +++ b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java @@ -58,8 +58,9 @@ public class BluetoothDeviceRenamePreferenceController extends } @Override - protected void updateDeviceName(final Preference preference) { + protected void updatePreferenceState(final Preference preference) { preference.setSummary(getSummary()); + preference.setVisible(mLocalAdapter != null && mLocalAdapter.isEnabled()); } @Override diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java index ecbd82627ce..a15d26cc34d 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java @@ -70,7 +70,7 @@ public class BluetoothDeviceNamePreferenceControllerTest { @Test public void testUpdateDeviceName_showSummaryWithDeviceName() { - mController.updateDeviceName(mPreference); + mController.updatePreferenceState(mPreference); final CharSequence summary = mPreference.getSummary(); diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceControllerTest.java index 63c83b4222d..3ce585ab83c 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceControllerTest.java @@ -71,11 +71,13 @@ public class BluetoothDeviceRenamePreferenceControllerTest { PREF_KEY)); mController.setFragment(mFragment); doReturn(DEVICE_NAME).when(mController).getDeviceName(); + when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); + mController.displayPreference(mScreen); } @Test public void testUpdateDeviceName_showSummaryWithDeviceName() { - mController.updateDeviceName(mPreference); + mController.updatePreferenceState(mPreference); final CharSequence summary = mPreference.getSummary(); @@ -94,10 +96,24 @@ public class BluetoothDeviceRenamePreferenceControllerTest { @Test public void displayPreference_shouldFindPreferenceWithMatchingPrefKey() { - when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); - - mController.displayPreference(mScreen); - assertThat(mController.mPreference.getKey()).isEqualTo(mController.getPreferenceKey()); } + + @Test + public void updatePreferenceState_whenBTisOnPreferenceShouldBeVisible() { + when(mLocalAdapter.isEnabled()).thenReturn(true); + + mController.updatePreferenceState(mPreference); + + assertThat(mPreference.isVisible()).isTrue(); + } + + @Test + public void updatePreferenceState_whenBTisOffPreferenceShouldBeHide() { + when(mLocalAdapter.isEnabled()).thenReturn(false); + + mController.updatePreferenceState(mPreference); + + assertThat(mPreference.isVisible()).isFalse(); + } }