[Audiosharing] When user enters a bad code, apply error color on summary.

Bug: 356071392
Flag: com.android.settingslib.flags.enable_le_audio_sharing
Test: atest
Change-Id: I427e08a3cce8d0e85f29f821d9b779acc95217b1
This commit is contained in:
chelseahao
2024-07-31 14:18:43 +08:00
committed by Chelsea Hao
parent 12469371b4
commit e85e1c823a
4 changed files with 50 additions and 41 deletions

View File

@@ -43,24 +43,13 @@ 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;
setSummary(summary);
setOnPreferenceClickListener(onPreferenceClickListener);
notifyChanged();
}
}
@VisibleForTesting
AudioStreamPreference(Context context, @Nullable AttributeSet attrs) {

View File

@@ -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(
() ->
() -> {
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,
getSummary() != EMPTY_STRING_RES
? preference.getContext().getString(getSummary())
: "",
getOnClickListener(controller)));
.SOURCE_ADDED);
preference.setOnPreferenceClickListener(getOnClickListener(controller));
});
}
/**

View File

@@ -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();
}

View File

@@ -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<SpannableString> 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