diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index 2a1341ee7c7..d709726b6ee 100644 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -428,10 +428,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem }); } getPreferenceScreen().removeAll(); - Spannable boldSpan = (Spannable) emptyView.getText(); - boldSpan.setSpan( - new TextAppearanceSpan(getActivity(), android.R.style.TextAppearance_Medium), 0, - briefText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + setTextSpan(emptyView.getText(), briefText); } @Override @@ -461,6 +458,16 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem updateContent(mLocalAdapter.getBluetoothState()); } + @VisibleForTesting + void setTextSpan(CharSequence text, CharSequence briefText) { + if (text instanceof Spannable) { + Spannable boldSpan = (Spannable) text; + boldSpan.setSpan( + new TextAppearanceSpan(getActivity(), android.R.style.TextAppearance_Medium), 0, + briefText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + private final View.OnClickListener mDeviceProfilesListener = new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsTest.java new file mode 100644 index 00000000000..9e90fdf37a0 --- /dev/null +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsTest.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2017 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.bluetooth; + +import com.android.settings.SettingsRobolectricTestRunner; +import com.android.settings.TestConfig; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class BluetoothSettingsTest { + + @Test + public void setTextSpan_notSpannable_shouldNotCrash() { + final String str = "test"; + final BluetoothSettings settings = new BluetoothSettings(); + settings.setTextSpan(str, "hello"); + } + +}