Add the jank detection to Settings sliders

- Currently most the sliders are implemented by
   com.android.settings.widget.SeekBarPreference.
 - Volume ones are implemented by VolumeSeekBarPreference, which resets
   the OnSeekBarChangeListener, so need special handling.
 - PointerSpeedPreference is standalone, added separately.

Bug: 230285829
Test: Verify trace via jank developer guideline.
Change-Id: Ia2978df196676ad6675d2834f6af6cb2aa9094cf
This commit is contained in:
Chaohui Wang
2022-04-26 20:04:39 +08:00
parent 8f463f5c88
commit f311566b85
19 changed files with 77 additions and 4 deletions

View File

@@ -18,6 +18,8 @@ package com.android.settings;
import static android.view.HapticFeedbackConstants.CLOCK_TICK; import static android.view.HapticFeedbackConstants.CLOCK_TICK;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.database.ContentObserver; import android.database.ContentObserver;
@@ -30,9 +32,12 @@ import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.widget.SeekBar; import android.widget.SeekBar;
import com.android.internal.jank.InteractionJankMonitor;
public class PointerSpeedPreference extends SeekBarDialogPreference implements public class PointerSpeedPreference extends SeekBarDialogPreference implements
SeekBar.OnSeekBarChangeListener { SeekBar.OnSeekBarChangeListener {
private final InputManager mIm; private final InputManager mIm;
private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
private SeekBar mSeekBar; private SeekBar mSeekBar;
private int mOldSpeed; private int mOldSpeed;
@@ -88,11 +93,15 @@ public class PointerSpeedPreference extends SeekBarDialogPreference implements
public void onStartTrackingTouch(SeekBar seekBar) { public void onStartTrackingTouch(SeekBar seekBar) {
mTouchInProgress = true; mTouchInProgress = true;
mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
.withView(CUJ_SETTINGS_SLIDER, seekBar)
.setTag(getKey()));
} }
public void onStopTrackingTouch(SeekBar seekBar) { public void onStopTrackingTouch(SeekBar seekBar) {
mTouchInProgress = false; mTouchInProgress = false;
mIm.tryPointerSpeed(seekBar.getProgress() + InputManager.MIN_POINTER_SPEED); mIm.tryPointerSpeed(seekBar.getProgress() + InputManager.MIN_POINTER_SPEED);
mJankMonitor.end(CUJ_SETTINGS_SLIDER);
} }
private void onSpeedChanged() { private void onSpeedChanged() {

View File

@@ -16,6 +16,8 @@
package com.android.settings.notification; package com.android.settings.notification;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.media.AudioManager; import android.media.AudioManager;
@@ -31,6 +33,7 @@ import android.widget.TextView;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
@@ -40,6 +43,8 @@ import java.util.Objects;
public class VolumeSeekBarPreference extends SeekBarPreference { public class VolumeSeekBarPreference extends SeekBarPreference {
private static final String TAG = "VolumeSeekBarPreference"; private static final String TAG = "VolumeSeekBarPreference";
private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
protected SeekBar mSeekBar; protected SeekBar mSeekBar;
private int mStream; private int mStream;
private SeekBarVolumizer mVolumizer; private SeekBarVolumizer mVolumizer;
@@ -143,6 +148,13 @@ public class VolumeSeekBarPreference extends SeekBarPreference {
if (mCallback != null) { if (mCallback != null) {
mCallback.onStartTrackingTouch(sbv); mCallback.onStartTrackingTouch(sbv);
} }
mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
.withView(CUJ_SETTINGS_SLIDER, mSeekBar)
.setTag(getKey()));
}
@Override
public void onStopTrackingTouch(SeekBarVolumizer sbv) {
mJankMonitor.end(CUJ_SETTINGS_SLIDER);
} }
}; };
final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null; final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;

View File

@@ -18,6 +18,8 @@ package com.android.settings.widget;
import static android.view.HapticFeedbackConstants.CLOCK_TICK; import static android.view.HapticFeedbackConstants.CLOCK_TICK;
import static com.android.internal.jank.InteractionJankMonitor.CUJ_SETTINGS_SLIDER;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.os.Parcel; import android.os.Parcel;
@@ -33,6 +35,7 @@ import android.widget.SeekBar.OnSeekBarChangeListener;
import androidx.core.content.res.TypedArrayUtils; import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import com.android.internal.jank.InteractionJankMonitor;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
/** /**
@@ -45,6 +48,7 @@ public class SeekBarPreference extends RestrictedPreference
public static final int HAPTIC_FEEDBACK_MODE_ON_TICKS = 1; public static final int HAPTIC_FEEDBACK_MODE_ON_TICKS = 1;
public static final int HAPTIC_FEEDBACK_MODE_ON_ENDS = 2; public static final int HAPTIC_FEEDBACK_MODE_ON_ENDS = 2;
private final InteractionJankMonitor mJankMonitor = InteractionJankMonitor.getInstance();
private int mProgress; private int mProgress;
private int mMax; private int mMax;
private int mMin; private int mMin;
@@ -312,6 +316,9 @@ public class SeekBarPreference extends RestrictedPreference
@Override @Override
public void onStartTrackingTouch(SeekBar seekBar) { public void onStartTrackingTouch(SeekBar seekBar) {
mTrackingTouch = true; mTrackingTouch = true;
mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
.withView(CUJ_SETTINGS_SLIDER, seekBar)
.setTag(getKey()));
} }
@Override @Override
@@ -320,6 +327,7 @@ public class SeekBarPreference extends RestrictedPreference
if (seekBar.getProgress() != mProgress) { if (seekBar.getProgress() != mProgress) {
syncProgress(seekBar); syncProgress(seekBar);
} }
mJankMonitor.end(CUJ_SETTINGS_SLIDER);
} }
/** /**

View File

@@ -27,13 +27,17 @@ import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.SeekBar; import android.widget.SeekBar;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class PointerSpeedPreferenceTest { public class PointerSpeedPreferenceTest {
private Context mContext; private Context mContext;

View File

@@ -31,6 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -40,8 +41,10 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class AlarmVibrationIntensityPreferenceControllerTest { public class AlarmVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key"; private static final String PREFERENCE_KEY = "preference_key";

View File

@@ -26,13 +26,17 @@ import android.widget.LinearLayout;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class BalanceSeekBarPreferenceTest { public class BalanceSeekBarPreferenceTest {
private static final int BALANCE_CENTER_VALUE = 100; private static final int BALANCE_CENTER_VALUE = 100;
private static final int BALANCE_MAX_VALUE = 200; private static final int BALANCE_MAX_VALUE = 200;

View File

@@ -38,6 +38,7 @@ import android.provider.Settings;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import org.junit.Before; import org.junit.Before;
@@ -49,9 +50,11 @@ import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule; import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
/** Tests for {@link FloatingMenuTransparencyPreferenceController}. */ /** Tests for {@link FloatingMenuTransparencyPreferenceController}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class FloatingMenuTransparencyPreferenceControllerTest { public class FloatingMenuTransparencyPreferenceControllerTest {
@Rule @Rule

View File

@@ -31,6 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -41,8 +42,10 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class HapticFeedbackIntensityPreferenceControllerTest { public class HapticFeedbackIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key"; private static final String PREFERENCE_KEY = "preference_key";

View File

@@ -31,6 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -40,9 +41,11 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
/** Test for {@link MediaVibrationIntensityPreferenceController}. */ /** Test for {@link MediaVibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class MediaVibrationIntensityPreferenceControllerTest { public class MediaVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key"; private static final String PREFERENCE_KEY = "preference_key";

View File

@@ -31,6 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -41,8 +42,10 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class NotificationVibrationIntensityPreferenceControllerTest { public class NotificationVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key"; private static final String PREFERENCE_KEY = "preference_key";

View File

@@ -28,6 +28,7 @@ import android.content.Context;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.LabeledSeekBarPreference; import com.android.settings.widget.LabeledSeekBarPreference;
import org.junit.Before; import org.junit.Before;
@@ -36,11 +37,13 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
/** /**
* Tests for {@link PreviewSizeSeekBarController}. * Tests for {@link PreviewSizeSeekBarController}.
*/ */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class PreviewSizeSeekBarControllerTest { public class PreviewSizeSeekBarControllerTest {
private static final String FONT_SIZE_KEY = "font_size"; private static final String FONT_SIZE_KEY = "font_size";
private final Context mContext = ApplicationProvider.getApplicationContext(); private final Context mContext = ApplicationProvider.getApplicationContext();

View File

@@ -31,6 +31,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -41,9 +42,11 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
/** Tests for {@link RingVibrationIntensityPreferenceController}. */ /** Tests for {@link RingVibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class RingVibrationIntensityPreferenceControllerTest { public class RingVibrationIntensityPreferenceControllerTest {
private static final String PREFERENCE_KEY = "preference_key"; private static final String PREFERENCE_KEY = "preference_key";

View File

@@ -27,6 +27,7 @@ import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.display.PreviewPagerAdapter; import com.android.settings.display.PreviewPagerAdapter;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.LabeledSeekBarPreference; import com.android.settings.widget.LabeledSeekBarPreference;
import org.junit.Before; import org.junit.Before;
@@ -45,7 +46,7 @@ import java.util.List;
* Tests for {@link TextReadingPreviewController}. * Tests for {@link TextReadingPreviewController}.
*/ */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowChoreographer.class) @Config(shadows = {ShadowChoreographer.class, ShadowInteractionJankMonitor.class})
public class TextReadingPreviewControllerTest { public class TextReadingPreviewControllerTest {
private static final String PREVIEW_KEY = "preview"; private static final String PREVIEW_KEY = "preview";
private static final String FONT_SIZE_KEY = "font_size"; private static final String FONT_SIZE_KEY = "font_size";

View File

@@ -28,6 +28,7 @@ import android.provider.Settings;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider; import androidx.test.core.app.ApplicationProvider;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -37,9 +38,11 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
/** Tests for {@link VibrationIntensityPreferenceController}. */ /** Tests for {@link VibrationIntensityPreferenceController}. */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class VibrationIntensityPreferenceControllerTest { public class VibrationIntensityPreferenceControllerTest {
private static final String SETTING_KEY = Settings.System.NOTIFICATION_VIBRATION_INTENSITY; private static final String SETTING_KEY = Settings.System.NOTIFICATION_VIBRATION_INTENSITY;

View File

@@ -15,6 +15,8 @@ import android.provider.Settings.Global;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -22,8 +24,10 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public class BatterySaverScheduleSeekBarControllerTest { public class BatterySaverScheduleSeekBarControllerTest {
private Context mContext; private Context mContext;

View File

@@ -10,6 +10,7 @@ import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before; import org.junit.Before;
@@ -17,8 +18,10 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowInteractionJankMonitor.class})
public final class BatterySaverScheduleSettingsTest { public final class BatterySaverScheduleSettingsTest {
private Context mContext; private Context mContext;

View File

@@ -37,6 +37,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.widget.LabeledSeekBarPreference; import com.android.settings.widget.LabeledSeekBarPreference;
@@ -56,7 +57,8 @@ import org.robolectric.annotation.Config;
*/ */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = { @Config(shadows = {
ShadowUserManager.class ShadowUserManager.class,
ShadowInteractionJankMonitor.class,
}) })
public class LabeledSeekBarPreferenceTest { public class LabeledSeekBarPreferenceTest {

View File

@@ -43,6 +43,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.widget.SeekBarPreference; import com.android.settings.widget.SeekBarPreference;
import com.android.settingslib.media.LocalMediaManager; import com.android.settingslib.media.LocalMediaManager;
@@ -61,7 +62,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowBluetoothAdapter.class}) @Config(shadows = {ShadowBluetoothAdapter.class, ShadowInteractionJankMonitor.class})
public class RemoteVolumeGroupControllerTest { public class RemoteVolumeGroupControllerTest {
private static final String KEY_REMOTE_VOLUME_GROUP = "remote_media_group"; private static final String KEY_REMOTE_VOLUME_GROUP = "remote_media_group";

View File

@@ -34,6 +34,7 @@ import android.widget.SeekBar;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import com.android.settings.testutils.shadow.ShadowInteractionJankMonitor;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal; import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
import org.junit.Before; import org.junit.Before;
@@ -46,7 +47,7 @@ import org.robolectric.annotation.Config;
import org.robolectric.shadows.androidx.fragment.FragmentController; import org.robolectric.shadows.androidx.fragment.FragmentController;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowRestrictedLockUtilsInternal.class) @Config(shadows = {ShadowRestrictedLockUtilsInternal.class, ShadowInteractionJankMonitor.class})
public class SeekBarPreferenceTest { public class SeekBarPreferenceTest {
private static final int MAX = 75; private static final int MAX = 75;