Add content description to volume title in settings.
Adds content description that is announced by talkback when a11y focus is on volume preference. This improves talkback announcement when view changes. Fixes: 285529113 Bug: 285455826 Fixes: 285487766 Test: atest VolumeSeekBarPreferenceControllerTest Test: atest VolumeSeekBarPreferenceTest Change-Id: Ibe80b4b1d489dc058df1cc79c96b034d5ddc6e56
This commit is contained in:
@@ -49,6 +49,8 @@ public class VolumeSeekBarPreferenceControllerTest {
|
||||
@Mock
|
||||
private VolumeSeekBarPreference.Callback mCallback;
|
||||
@Mock
|
||||
private VolumeSeekBarPreference.Listener mListener;
|
||||
@Mock
|
||||
private AudioHelper mHelper;
|
||||
|
||||
private VolumeSeekBarPreferenceControllerTestable mController;
|
||||
@@ -59,7 +61,7 @@ public class VolumeSeekBarPreferenceControllerTest {
|
||||
when(mScreen.findPreference(nullable(String.class))).thenReturn(mPreference);
|
||||
when(mPreference.getKey()).thenReturn("key");
|
||||
mController = new VolumeSeekBarPreferenceControllerTestable(mContext, mCallback, true,
|
||||
mPreference.getKey());
|
||||
mPreference.getKey(), mListener);
|
||||
mController.setAudioHelper(mHelper);
|
||||
}
|
||||
|
||||
@@ -70,18 +72,20 @@ public class VolumeSeekBarPreferenceControllerTest {
|
||||
verify(mPreference).setCallback(mCallback);
|
||||
verify(mPreference).setStream(VolumeSeekBarPreferenceControllerTestable.AUDIO_STREAM);
|
||||
verify(mPreference).setMuteIcon(VolumeSeekBarPreferenceControllerTestable.MUTE_ICON);
|
||||
verify(mPreference).setListener(mListener);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void displayPreference_notAvailable_shouldNotUpdatePreference() {
|
||||
mController = new VolumeSeekBarPreferenceControllerTestable(mContext, mCallback, false,
|
||||
mPreference.getKey());
|
||||
mPreference.getKey(), mListener);
|
||||
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
verify(mPreference, never()).setCallback(any(VolumeSeekBarPreference.Callback.class));
|
||||
verify(mPreference, never()).setStream(anyInt());
|
||||
verify(mPreference, never()).setMuteIcon(anyInt());
|
||||
verify(mPreference, never()).setListener(mListener);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -157,10 +161,12 @@ public class VolumeSeekBarPreferenceControllerTest {
|
||||
private boolean mAvailable;
|
||||
|
||||
VolumeSeekBarPreferenceControllerTestable(Context context,
|
||||
VolumeSeekBarPreference.Callback callback, boolean available, String key) {
|
||||
VolumeSeekBarPreference.Callback callback, boolean available, String key,
|
||||
VolumeSeekBarPreference.Listener listener) {
|
||||
super(context, key);
|
||||
setCallback(callback);
|
||||
mAvailable = available;
|
||||
mVolumePreferenceListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -18,11 +18,14 @@ package com.android.settings.notification;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.doCallRealMethod;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.AudioManager;
|
||||
import android.preference.SeekBarVolumizer;
|
||||
import android.widget.SeekBar;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -34,18 +37,28 @@ import org.robolectric.RobolectricTestRunner;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class VolumeSeekBarPreferenceTest {
|
||||
|
||||
private static final CharSequence CONTENT_DESCRIPTION = "TEST";
|
||||
@Mock
|
||||
private AudioManager mAudioManager;
|
||||
@Mock
|
||||
private VolumeSeekBarPreference mPreference;
|
||||
@Mock
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private SeekBar mSeekBar;
|
||||
@Mock
|
||||
private SeekBarVolumizer mVolumizer;
|
||||
private VolumeSeekBarPreference.Listener mListener;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
when(mContext.getSystemService(Context.AUDIO_SERVICE)).thenReturn(mAudioManager);
|
||||
doCallRealMethod().when(mPreference).updateContentDescription(CONTENT_DESCRIPTION);
|
||||
mPreference.mSeekBar = mSeekBar;
|
||||
mPreference.mAudioManager = mAudioManager;
|
||||
mPreference.mVolumizer = mVolumizer;
|
||||
mListener = () -> mPreference.updateContentDescription(CONTENT_DESCRIPTION);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -65,4 +78,24 @@ public class VolumeSeekBarPreferenceTest {
|
||||
verify(mPreference).setMin(min);
|
||||
verify(mPreference).setProgress(progress);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void init_listenerIsCalled() {
|
||||
doCallRealMethod().when(mPreference).setListener(mListener);
|
||||
doCallRealMethod().when(mPreference).init();
|
||||
|
||||
mPreference.setListener(mListener);
|
||||
mPreference.init();
|
||||
|
||||
verify(mPreference).updateContentDescription(CONTENT_DESCRIPTION);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void init_listenerNotSet_noException() {
|
||||
doCallRealMethod().when(mPreference).init();
|
||||
|
||||
mPreference.init();
|
||||
|
||||
verify(mPreference, never()).updateContentDescription(CONTENT_DESCRIPTION);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user