Merge "Add the jank detection to Settings toggles" into tm-dev am: a47f9bb17f
am: ca86110548
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/18212942 Change-Id: I940d194f592ab6f9b7ea43e4e078c0914078418c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -27,6 +27,7 @@ import android.util.Log;
|
||||
import androidx.annotation.XmlRes;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SwitchPreference;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.android.internal.jank.InteractionJankMonitor;
|
||||
@@ -34,6 +35,7 @@ import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.survey.SurveyMixin;
|
||||
import com.android.settingslib.core.instrumentation.Instrumentable;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.core.instrumentation.SettingsJankMonitor;
|
||||
import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
|
||||
import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment;
|
||||
|
||||
@@ -45,7 +47,6 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
|
||||
|
||||
private static final String TAG = "InstrumentedPrefFrag";
|
||||
|
||||
|
||||
protected MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
|
||||
// metrics placeholder value. Only use this for development.
|
||||
@@ -65,6 +66,19 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
|
||||
super.onAttach(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
// Override the OnPreferenceTreeClickListener in super.onStart() to inject jank detection.
|
||||
getPreferenceManager().setOnPreferenceTreeClickListener((preference) -> {
|
||||
if (preference instanceof SwitchPreference) {
|
||||
SettingsJankMonitor.detectSwitchPreferenceClickJank(
|
||||
getListView(), (SwitchPreference) preference);
|
||||
}
|
||||
return onPreferenceTreeClick(preference);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
mVisibilityLoggerMixin.setSourceMetricsCategory(getActivity());
|
||||
|
@@ -16,12 +16,15 @@ package com.android.settings.core;
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.TwoStatePreference;
|
||||
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.slices.SliceData;
|
||||
import com.android.settings.widget.TwoStateButtonPreference;
|
||||
import com.android.settingslib.PrimarySwitchPreference;
|
||||
import com.android.settingslib.core.instrumentation.SettingsJankMonitor;
|
||||
import com.android.settingslib.widget.MainSwitchPreference;
|
||||
|
||||
/**
|
||||
* Abstract class that consolidates logic for updating toggle controllers.
|
||||
@@ -50,6 +53,16 @@ public abstract class TogglePreferenceController extends BasePreferenceControlle
|
||||
*/
|
||||
public abstract boolean setChecked(boolean isChecked);
|
||||
|
||||
@Override
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
super.displayPreference(screen);
|
||||
Preference preference = screen.findPreference(getPreferenceKey());
|
||||
if (preference instanceof MainSwitchPreference) {
|
||||
((MainSwitchPreference) preference).addOnSwitchChangeListener((switchView, isChecked) ->
|
||||
SettingsJankMonitor.detectToggleJank(getPreferenceKey(), switchView));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
if (preference instanceof TwoStatePreference) {
|
||||
|
@@ -32,6 +32,7 @@ import androidx.preference.TwoStatePreference;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.widget.SettingsMainSwitchBar.OnBeforeCheckedChangeListener;
|
||||
import com.android.settingslib.RestrictedPreferenceHelper;
|
||||
import com.android.settingslib.core.instrumentation.SettingsJankMonitor;
|
||||
import com.android.settingslib.widget.OnMainSwitchChangeListener;
|
||||
|
||||
import com.google.android.setupdesign.util.LayoutStyler;
|
||||
@@ -153,6 +154,7 @@ public class SettingsMainSwitchPreference extends TwoStatePreference implements
|
||||
@Override
|
||||
public void onSwitchChanged(Switch switchView, boolean isChecked) {
|
||||
super.setChecked(isChecked);
|
||||
SettingsJankMonitor.detectToggleJank(getKey(), switchView);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -31,9 +31,11 @@ import static org.mockito.Mockito.when;
|
||||
import android.app.ActivityManager;
|
||||
import android.content.Context;
|
||||
import android.provider.Settings;
|
||||
import android.widget.Switch;
|
||||
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor;
|
||||
import com.android.settingslib.widget.MainSwitchPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -44,16 +46,21 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowActivityManager;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {ShadowInteractionJankMonitor.class})
|
||||
public class BubbleNotificationPreferenceControllerTest {
|
||||
|
||||
private Context mContext;
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private PreferenceScreen mScreen;
|
||||
|
||||
@Mock
|
||||
private Switch mSwitch;
|
||||
|
||||
private BubbleNotificationPreferenceController mController;
|
||||
private MainSwitchPreference mPreference;
|
||||
|
||||
@@ -102,7 +109,7 @@ public class BubbleNotificationPreferenceControllerTest {
|
||||
public void onSwitchChanged_true_settingIsOff_flagShouldOn() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, OFF);
|
||||
|
||||
mController.onSwitchChanged(null, true);
|
||||
mController.onSwitchChanged(mSwitch, true);
|
||||
|
||||
assertThat(Settings.Global.getInt(mContext.getContentResolver(),
|
||||
NOTIFICATION_BUBBLES, OFF)).isEqualTo(ON);
|
||||
@@ -112,7 +119,7 @@ public class BubbleNotificationPreferenceControllerTest {
|
||||
public void onSwitchChanged_false_settingIsOn_flagShouldOff() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(), NOTIFICATION_BUBBLES, ON);
|
||||
|
||||
mController.onSwitchChanged(null, false);
|
||||
mController.onSwitchChanged(mSwitch, false);
|
||||
|
||||
assertThat(Settings.Global.getInt(mContext.getContentResolver(),
|
||||
NOTIFICATION_BUBBLES, ON)).isEqualTo(OFF);
|
||||
|
@@ -17,7 +17,6 @@
|
||||
package com.android.settings.notification.app;
|
||||
|
||||
import static android.app.NotificationChannel.DEFAULT_CHANNEL_ID;
|
||||
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
|
||||
import static android.app.NotificationManager.IMPORTANCE_HIGH;
|
||||
import static android.app.NotificationManager.IMPORTANCE_LOW;
|
||||
import static android.app.NotificationManager.IMPORTANCE_NONE;
|
||||
@@ -49,6 +48,7 @@ import androidx.preference.PreferenceViewHolder;
|
||||
|
||||
import com.android.settings.notification.NotificationBackend;
|
||||
import com.android.settings.widget.SettingsMainSwitchPreference;
|
||||
import com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -57,11 +57,13 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.shadows.ShadowApplication;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {ShadowInteractionJankMonitor.class})
|
||||
public class BlockPreferenceControllerTest {
|
||||
|
||||
private Context mContext;
|
||||
|
@@ -23,6 +23,10 @@ import com.android.internal.jank.InteractionJankMonitor;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
|
||||
/**
|
||||
* @deprecated use {@link com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor}
|
||||
*/
|
||||
@Deprecated
|
||||
@Implements(InteractionJankMonitor.class)
|
||||
public class ShadowInteractionJankMonitor {
|
||||
|
||||
|
Reference in New Issue
Block a user