Merge changes from topic "sound" into main

* changes:
  Fix IntentReceiver leaked on Sound & vibration
  Get rid of VolumeSeekBarPreferenceController.setCallback
This commit is contained in:
Jacky Wang
2025-02-04 00:53:31 -08:00
committed by Android (Google) Code Review
9 changed files with 81 additions and 146 deletions

View File

@@ -31,14 +31,18 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class VolumeSeekBarPreferenceControllerTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock
private Context mContext;
@@ -47,8 +51,6 @@ public class VolumeSeekBarPreferenceControllerTest {
@Mock
private VolumeSeekBarPreference mPreference;
@Mock
private VolumeSeekBarPreference.Callback mCallback;
@Mock
private VolumeSeekBarPreference.Listener mListener;
@Mock
private AudioHelper mHelper;
@@ -57,10 +59,9 @@ public class VolumeSeekBarPreferenceControllerTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mScreen.findPreference(nullable(String.class))).thenReturn(mPreference);
when(mPreference.getKey()).thenReturn("key");
mController = new VolumeSeekBarPreferenceControllerTestable(mContext, mCallback, true,
mController = new VolumeSeekBarPreferenceControllerTestable(mContext, true,
mPreference.getKey(), mListener);
mController.setAudioHelper(mHelper);
}
@@ -69,7 +70,6 @@ public class VolumeSeekBarPreferenceControllerTest {
public void displayPreference_available_shouldUpdatePreference() {
mController.displayPreference(mScreen);
verify(mPreference).setCallback(mCallback);
verify(mPreference).setStream(VolumeSeekBarPreferenceControllerTestable.AUDIO_STREAM);
verify(mPreference).setMuteIcon(VolumeSeekBarPreferenceControllerTestable.MUTE_ICON);
verify(mPreference).setListener(mListener);
@@ -77,7 +77,7 @@ public class VolumeSeekBarPreferenceControllerTest {
@Test
public void displayPreference_notAvailable_shouldNotUpdatePreference() {
mController = new VolumeSeekBarPreferenceControllerTestable(mContext, mCallback, false,
mController = new VolumeSeekBarPreferenceControllerTestable(mContext, false,
mPreference.getKey(), mListener);
mController.displayPreference(mScreen);
@@ -88,24 +88,6 @@ public class VolumeSeekBarPreferenceControllerTest {
verify(mPreference, never()).setListener(mListener);
}
@Test
public void onResume_shouldResumePreference() {
mController.displayPreference(mScreen);
mController.onResume();
verify(mPreference).onActivityResume();
}
@Test
public void onPause_shouldPausePreference() {
mController.displayPreference(mScreen);
mController.onPause();
verify(mPreference).onActivityPause();
}
@Test
public void sliderMethods_handleNullPreference() {
when(mHelper.getStreamVolume(mController.getAudioStream())).thenReturn(4);
@@ -152,19 +134,17 @@ public class VolumeSeekBarPreferenceControllerTest {
assertThat(mController.getSliderPosition()).isEqualTo(7);
}
private class VolumeSeekBarPreferenceControllerTestable
extends VolumeSeekBarPreferenceController {
private static class VolumeSeekBarPreferenceControllerTestable extends
VolumeSeekBarPreferenceController {
private final static int AUDIO_STREAM = 1;
private final static int MUTE_ICON = 2;
private static final int AUDIO_STREAM = 1;
private static final int MUTE_ICON = 2;
private boolean mAvailable;
private final boolean mAvailable;
VolumeSeekBarPreferenceControllerTestable(Context context,
VolumeSeekBarPreference.Callback callback, boolean available, String key,
VolumeSeekBarPreferenceControllerTestable(Context context, boolean available, String key,
VolumeSeekBarPreference.Listener listener) {
super(context, key);
setCallback(callback);
mAvailable = available;
mVolumePreferenceListener = listener;
}

View File

@@ -32,12 +32,14 @@ import android.preference.SeekBarVolumizer;
import android.widget.SeekBar;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
import java.util.Locale;
@@ -47,6 +49,10 @@ public class VolumeSeekBarPreferenceTest {
private static final CharSequence CONTENT_DESCRIPTION = "TEST";
private static final int STREAM = 5;
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock
private AudioManager mAudioManager;
@Mock
@@ -70,10 +76,10 @@ public class VolumeSeekBarPreferenceTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.AUDIO_SERVICE)).thenReturn(mAudioManager);
when(mSeekBarVolumizerFactory.create(eq(STREAM), eq(null), mSbvc.capture()))
.thenReturn(mVolumizer);
doCallRealMethod().when(mPreference).createSeekBarVolumizer();
doCallRealMethod().when(mPreference).setStream(anyInt());
doCallRealMethod().when(mPreference).updateContentDescription(CONTENT_DESCRIPTION);
mPreference.mSeekBar = mSeekBar;
@@ -99,50 +105,50 @@ public class VolumeSeekBarPreferenceTest {
}
@Test
public void init_listenerIsCalled() {
public void onBindViewHolder_listenerIsCalled() {
when(mPreference.isEnabled()).thenReturn(true);
doCallRealMethod().when(mPreference).setListener(mListener);
doCallRealMethod().when(mPreference).init();
doCallRealMethod().when(mPreference).onBindViewHolder();
mPreference.setStream(STREAM);
mPreference.setListener(mListener);
mPreference.init();
mPreference.onBindViewHolder();
verify(mPreference).updateContentDescription(CONTENT_DESCRIPTION);
}
@Test
public void init_listenerNotSet_noException() {
public void onBindViewHolder_listenerNotSet_noException() {
when(mPreference.isEnabled()).thenReturn(true);
doCallRealMethod().when(mPreference).init();
doCallRealMethod().when(mPreference).onBindViewHolder();
mPreference.setStream(STREAM);
mPreference.init();
mPreference.onBindViewHolder();
verify(mPreference, never()).updateContentDescription(CONTENT_DESCRIPTION);
}
@Test
public void init_preferenceIsDisabled_shouldNotInvokeListener() {
public void onBindViewHolder_preferenceIsDisabled_shouldNotInvokeListener() {
when(mPreference.isEnabled()).thenReturn(false);
doCallRealMethod().when(mPreference).setListener(mListener);
doCallRealMethod().when(mPreference).init();
doCallRealMethod().when(mPreference).onBindViewHolder();
mPreference.setStream(STREAM);
mPreference.init();
mPreference.onBindViewHolder();
verify(mPreference, never()).updateContentDescription(CONTENT_DESCRIPTION);
}
@Test
public void init_changeProgress_overrideStateDescriptionCalled() {
public void onBindViewHolder_changeProgress_overrideStateDescriptionCalled() {
final int progress = 4;
when(mPreference.isEnabled()).thenReturn(true);
when(mPreference.formatStateDescription(progress)).thenReturn(CONTENT_DESCRIPTION);
doCallRealMethod().when(mPreference).init();
doCallRealMethod().when(mPreference).onBindViewHolder();
mPreference.setStream(STREAM);
mPreference.init();
mPreference.onBindViewHolder();
verify(mSeekBarVolumizerFactory).create(eq(STREAM), eq(null), mSbvc.capture());
@@ -166,10 +172,10 @@ public class VolumeSeekBarPreferenceTest {
when(mContext.getResources()).thenReturn(mRes);
when(mRes.getConfiguration()).thenReturn(mConfig);
when(mConfig.getLocales()).thenReturn(new LocaleList(Locale.US));
doCallRealMethod().when(mPreference).init();
doCallRealMethod().when(mPreference).onBindViewHolder();
mPreference.setStream(STREAM);
mPreference.init();
mPreference.onBindViewHolder();
verify(mSeekBarVolumizerFactory).create(eq(STREAM), eq(null), mSbvc.capture());