[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:
@@ -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) {
|
||||
|
@@ -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));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user