diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java index fffb7849bbc..0b23e07f4c0 100644 --- a/src/com/android/settings/notification/SoundSettings.java +++ b/src/com/android/settings/notification/SoundSettings.java @@ -46,6 +46,7 @@ import com.android.settings.widget.UpdatableListPreferenceDialogFragment; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.preference.UtilsKt; import com.android.settingslib.search.SearchIndexable; import java.util.ArrayList; @@ -113,14 +114,12 @@ public class SoundSettings extends DashboardFragment implements OnActivityResult if (phoneRingTonePreference != null && openPhoneRingtonePicker) { onPreferenceTreeClick(phoneRingTonePreference); } - if (isCatalystEnabled()) { - for (String key : getPreferenceKeysInHierarchy()) { - Preference preference = findPreference(key); - if (preference instanceof VolumeSeekBarPreference) { - ((VolumeSeekBarPreference) preference).setCallback(mVolumeCallback); - } + UtilsKt.forEachRecursively(getPreferenceScreen(), preference -> { + if (preference instanceof VolumeSeekBarPreference) { + ((VolumeSeekBarPreference) preference).setCallback(mVolumeCallback); } - } + return null; + }); } @Override @@ -203,22 +202,11 @@ public class SoundSettings extends DashboardFragment implements OnActivityResult @Override public void onAttach(Context context) { super.onAttach(context); - ArrayList volumeControllers = new ArrayList<>(); - volumeControllers.add(use(AlarmVolumePreferenceController.class)); - volumeControllers.add(use(MediaVolumePreferenceController.class)); - volumeControllers.add(use(SeparateRingVolumePreferenceController.class)); - volumeControllers.add(use(NotificationVolumePreferenceController.class)); - volumeControllers.add(use(CallVolumePreferenceController.class)); use(HandsFreeProfileOutputPreferenceController.class).setCallback(listPreference -> onPreferenceDataChanged(listPreference)); mHfpOutputControllerKey = use(HandsFreeProfileOutputPreferenceController.class).getPreferenceKey(); - - for (VolumeSeekBarPreferenceController controller : volumeControllers) { - controller.setCallback(mVolumeCallback); - getSettingsLifecycle().addObserver(controller); - } } // === Volumes === diff --git a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java index 285e8ddbeb9..9ce3b955425 100644 --- a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java +++ b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java @@ -24,7 +24,6 @@ import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.PreferenceScreen; import com.android.settings.R; -import com.android.settings.notification.VolumeSeekBarPreference.Callback; import com.android.settingslib.core.lifecycle.Lifecycle; /** @@ -34,7 +33,6 @@ public abstract class VolumeSeekBarPreferenceController extends AdjustVolumeRestrictedPreferenceController implements LifecycleObserver { protected VolumeSeekBarPreference mPreference; - protected VolumeSeekBarPreference.Callback mVolumePreferenceCallback; protected AudioHelper mHelper; protected VolumeSeekBarPreference.Listener mVolumePreferenceListener; @@ -48,10 +46,6 @@ public abstract class VolumeSeekBarPreferenceController extends mHelper = helper; } - public void setCallback(Callback callback) { - mVolumePreferenceCallback = callback; - } - @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); @@ -62,7 +56,6 @@ public abstract class VolumeSeekBarPreferenceController extends protected void setupVolPreference(PreferenceScreen screen) { mPreference = screen.findPreference(getPreferenceKey()); - mPreference.setCallback(mVolumePreferenceCallback); mPreference.setListener(mVolumePreferenceListener); mPreference.setStream(getAudioStream()); mPreference.setMuteIcon(getMuteIcon()); diff --git a/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java index f7e32a2c9d9..24918dc5fae 100644 --- a/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/VolumeSeekBarPreferenceControllerTest.java @@ -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); @@ -152,19 +152,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; }