diff --git a/res/layout/bluetooth_find_broadcast_password_dialog.xml b/res/layout/bluetooth_find_broadcast_password_dialog.xml
index 938f1033b6a..d758f6150c3 100644
--- a/res/layout/bluetooth_find_broadcast_password_dialog.xml
+++ b/res/layout/bluetooth_find_broadcast_password_dialog.xml
@@ -26,7 +26,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
- android:textAlignment="viewStart"/>
+ android:textAlignment="viewStart"
+ android:textColor="?android:attr/textColorPrimary"/>
-
\ No newline at end of file
diff --git a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreference.java b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreference.java
index 071cf57c715..175e0377bea 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreference.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreference.java
@@ -43,23 +43,12 @@ class AudioStreamPreference extends TwoTargetPreference {
* Update preference UI based on connection status
*
* @param isConnected Is this stream connected
- * @param summary Summary text
- * @param onPreferenceClickListener Click listener for the preference
*/
- void setIsConnected(
- boolean isConnected,
- String summary,
- @Nullable OnPreferenceClickListener onPreferenceClickListener) {
- if (mIsConnected == isConnected
- && getSummary() == summary
- && getOnPreferenceClickListener() == onPreferenceClickListener) {
- // Nothing to update.
- return;
+ void setIsConnected(boolean isConnected) {
+ if (mIsConnected != isConnected) {
+ mIsConnected = isConnected;
+ notifyChanged();
}
- mIsConnected = isConnected;
- setSummary(summary);
- setOnPreferenceClickListener(onPreferenceClickListener);
- notifyChanged();
}
@VisibleForTesting
diff --git a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandler.java b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandler.java
index 4bb84751b36..758984fe432 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandler.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandler.java
@@ -16,8 +16,12 @@
package com.android.settings.connecteddevice.audiosharing.audiostreams;
+import static android.text.Spanned.SPAN_EXCLUSIVE_INCLUSIVE;
+
import android.os.Handler;
import android.os.Looper;
+import android.text.SpannableString;
+import android.text.style.ForegroundColorSpan;
import android.util.Log;
import androidx.annotation.Nullable;
@@ -26,6 +30,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.Utils;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.ThreadUtils;
@@ -68,15 +73,31 @@ class AudioStreamStateHandler {
// Update UI
ThreadUtils.postOnMainThread(
- () ->
- preference.setIsConnected(
- newState
- == AudioStreamsProgressCategoryController.AudioStreamState
- .SOURCE_ADDED,
- getSummary() != EMPTY_STRING_RES
- ? preference.getContext().getString(getSummary())
- : "",
- getOnClickListener(controller)));
+ () -> {
+ String summary =
+ getSummary() != EMPTY_STRING_RES
+ ? preference.getContext().getString(getSummary())
+ : "";
+ if (newState
+ == AudioStreamsProgressCategoryController.AudioStreamState
+ .ADD_SOURCE_BAD_CODE) {
+ SpannableString summarySpan = new SpannableString(summary);
+ int colorError = Utils.getColorErrorDefaultColor(preference.getContext());
+ summarySpan.setSpan(
+ new ForegroundColorSpan(colorError),
+ 0,
+ summary.length(),
+ SPAN_EXCLUSIVE_INCLUSIVE);
+ preference.setSummary(summarySpan);
+ } else {
+ preference.setSummary(summary);
+ }
+ preference.setIsConnected(
+ newState
+ == AudioStreamsProgressCategoryController.AudioStreamState
+ .SOURCE_ADDED);
+ preference.setOnPreferenceClickListener(getOnClickListener(controller));
+ });
}
/**
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreferenceTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreferenceTest.java
index c8f93588c78..2515668e39a 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamPreferenceTest.java
@@ -28,7 +28,6 @@ import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
-import androidx.preference.Preference.OnPreferenceClickListener;
import androidx.preference.PreferenceViewHolder;
import androidx.test.core.app.ApplicationProvider;
@@ -93,17 +92,6 @@ public class AudioStreamPreferenceTest {
assertThat(divider.getVisibility()).isEqualTo(View.GONE);
}
- @Test
- public void setConnected_shouldUpdatePreferenceUI() {
- String summary = "Connected";
- OnPreferenceClickListener listener = mock(OnPreferenceClickListener.class);
- mPreference.setIsConnected(true, summary, listener);
-
- assertThat(mPreference.getSummary()).isNotNull();
- assertThat(mPreference.getSummary().toString()).isEqualTo(summary);
- assertThat(mPreference.getOnPreferenceClickListener()).isEqualTo(listener);
- }
-
@Test
public void setAudioStreamMetadata_shouldUpdateMetadata() {
AudioStreamPreference p =
@@ -147,7 +135,7 @@ public class AudioStreamPreferenceTest {
@Test
public void shouldHideSecondTarget_connected() {
- mPreference.setIsConnected(true, "", null);
+ mPreference.setIsConnected(true);
assertThat(mPreference.shouldHideSecondTarget()).isTrue();
}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandlerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandlerTest.java
index adc77a183f6..e44dee90e70 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandlerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamStateHandlerTest.java
@@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -31,6 +30,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.text.SpannableString;
import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
@@ -39,6 +39,7 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@@ -75,7 +76,9 @@ public class AudioStreamStateHandlerTest {
verify(mPreference, never()).setAudioStreamState(any());
verify(mHandler, never()).performAction(any(), any(), any());
- verify(mPreference, never()).setIsConnected(anyBoolean(), anyString(), any());
+ verify(mPreference, never()).setIsConnected(anyBoolean());
+ verify(mPreference, never()).setSummary(any());
+ verify(mPreference, never()).setOnPreferenceClickListener(any());
}
@Test
@@ -93,7 +96,9 @@ public class AudioStreamStateHandlerTest {
.setAudioStreamState(
AudioStreamsProgressCategoryController.AudioStreamState.SOURCE_ADDED);
verify(mHandler).performAction(any(), any(), any());
- verify(mPreference).setIsConnected(eq(true), eq(""), eq(null));
+ verify(mPreference).setIsConnected(eq(true));
+ verify(mPreference).setSummary(eq(""));
+ verify(mPreference).setOnPreferenceClickListener(eq(null));
}
@Test
@@ -119,7 +124,13 @@ public class AudioStreamStateHandlerTest {
AudioStreamsProgressCategoryController.AudioStreamState
.ADD_SOURCE_BAD_CODE);
verify(mHandler).performAction(any(), any(), any());
- verify(mPreference).setIsConnected(eq(false), eq(SUMMARY), eq(listener));
+ verify(mPreference).setIsConnected(eq(false));
+ ArgumentCaptor argumentCaptor =
+ ArgumentCaptor.forClass(SpannableString.class);
+ verify(mPreference).setSummary(argumentCaptor.capture());
+ assertThat(argumentCaptor.getValue()).isNotNull();
+ assertThat(argumentCaptor.getValue().toString()).isEqualTo(SUMMARY);
+ verify(mPreference).setOnPreferenceClickListener(eq(listener));
}
@Test