diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml index 29b82ef3e98..966034ec482 100644 --- a/res/xml/battery_saver_settings.xml +++ b/res/xml/battery_saver_settings.xml @@ -34,7 +34,7 @@ settings:controller="com.android.settings.fuelgauge.batterysaver.BatterySaverStickyPreferenceController"/> { mMetricsFeatureProvider.logClickedPreference(preference, - pref.getExtras().getInt(DashboardFragment.CATEGORY)); + preference.getExtras().getInt(DashboardFragment.CATEGORY)); final UserHandle user = item.getUser(); mContext.startActivityAsUser(item.getLaunchIntent(mContext), user); return true; diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index a2233fc9a26..76400791a9c 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -406,12 +406,13 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory); activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0)); } else { + mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory); final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER); if (userHandle != null && tile.userHandle.contains(userHandle)) { - mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory); activity.startActivityForResultAsUser(intent, 0, userHandle); } else { - ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile); + ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile, + sourceMetricCategory); } } } diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java index 7e38d6ac19b..36cdd422508 100644 --- a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java +++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java @@ -30,6 +30,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; +import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.drawer.Tile; import java.util.List; @@ -38,14 +39,23 @@ public class ProfileSelectDialog extends DialogFragment implements OnClickListen private static final String TAG = "ProfileSelectDialog"; private static final String ARG_SELECTED_TILE = "selectedTile"; + private static final String ARG_SOURCE_METRIC_CATEGORY = "sourceMetricCategory"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); + private int mSourceMetricCategory; private Tile mSelectedTile; - public static void show(FragmentManager manager, Tile tile) { - ProfileSelectDialog dialog = new ProfileSelectDialog(); - Bundle args = new Bundle(); + /** + * Display the profile select dialog, adding the fragment to the given FragmentManager. + * @param manager The FragmentManager this fragment will be added to. + * @param tile The tile for this fragment. + * @param sourceMetricCategory The source metric category. + */ + public static void show(FragmentManager manager, Tile tile, int sourceMetricCategory) { + final ProfileSelectDialog dialog = new ProfileSelectDialog(); + final Bundle args = new Bundle(); args.putParcelable(ARG_SELECTED_TILE, tile); + args.putInt(ARG_SOURCE_METRIC_CATEGORY, sourceMetricCategory); dialog.setArguments(args); dialog.show(manager, "select_profile"); } @@ -54,13 +64,14 @@ public class ProfileSelectDialog extends DialogFragment implements OnClickListen public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSelectedTile = getArguments().getParcelable(ARG_SELECTED_TILE); + mSourceMetricCategory = getArguments().getInt(ARG_SOURCE_METRIC_CATEGORY); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - Context context = getActivity(); - AlertDialog.Builder builder = new AlertDialog.Builder(context); - UserAdapter adapter = UserAdapter.createUserAdapter(UserManager.get(context), context, + final Context context = getActivity(); + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + final UserAdapter adapter = UserAdapter.createUserAdapter(UserManager.get(context), context, mSelectedTile.userHandle); builder.setTitle(com.android.settingslib.R.string.choose_profile) .setAdapter(adapter, this); @@ -70,15 +81,18 @@ public class ProfileSelectDialog extends DialogFragment implements OnClickListen @Override public void onClick(DialogInterface dialog, int which) { - UserHandle user = mSelectedTile.userHandle.get(which); + final UserHandle user = mSelectedTile.userHandle.get(which); // Show menu on top level items. final Intent intent = mSelectedTile.getIntent(); + FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider() + .logStartedIntentWithProfile(intent, mSourceMetricCategory, + which == 1 /* isWorkProfile */); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); getActivity().startActivityAsUser(intent, user); } public static void updateUserHandlesIfNeeded(Context context, Tile tile) { - List userHandles = tile.userHandle; + final List userHandles = tile.userHandle; if (tile.userHandle == null || tile.userHandle.size() <= 1) { return; } diff --git a/src/com/android/settings/display/DarkUIPreferenceController.java b/src/com/android/settings/display/DarkUIPreferenceController.java index 98d9a69ea7c..c2da56aaa8f 100644 --- a/src/com/android/settings/display/DarkUIPreferenceController.java +++ b/src/com/android/settings/display/DarkUIPreferenceController.java @@ -17,6 +17,7 @@ package com.android.settings.display; import android.app.UiModeManager; +import android.app.settings.SettingsEnums; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -32,6 +33,8 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; @@ -46,6 +49,7 @@ public class DarkUIPreferenceController extends TogglePreferenceController imple @VisibleForTesting Preference mPreference; + private final MetricsFeatureProvider mMetricsFeatureProvider; private UiModeManager mUiModeManager; private PowerManager mPowerManager; private Context mContext; @@ -64,6 +68,7 @@ public class DarkUIPreferenceController extends TogglePreferenceController imple mContext = context; mUiModeManager = context.getSystemService(UiModeManager.class); mPowerManager = context.getSystemService(PowerManager.class); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -86,6 +91,7 @@ public class DarkUIPreferenceController extends TogglePreferenceController imple @Override public boolean setChecked(boolean isChecked) { + mMetricsFeatureProvider.logClickedPreference(mPreference, SettingsEnums.DISPLAY); final boolean dialogSeen = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.DARK_MODE_DIALOG_SEEN, 0) == DIALOG_SEEN; diff --git a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java index c1c477ebbee..533b49bd687 100644 --- a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java +++ b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java @@ -16,6 +16,7 @@ package com.android.settings.display; +import android.app.settings.SettingsEnums; import android.content.Context; import android.hardware.display.ColorDisplayManager; import android.text.TextUtils; @@ -28,19 +29,26 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.LayoutPreference; public class NightDisplayActivationPreferenceController extends TogglePreferenceController { + private final MetricsFeatureProvider mMetricsFeatureProvider; private ColorDisplayManager mColorDisplayManager; private NightDisplayTimeFormatter mTimeFormatter; + private LayoutPreference mPreference; private Button mTurnOffButton; private Button mTurnOnButton; private final OnClickListener mListener = new OnClickListener() { @Override public void onClick(View v) { - mColorDisplayManager.setNightDisplayActivated(!mColorDisplayManager.isNightDisplayActivated()); + mMetricsFeatureProvider.logClickedPreference(mPreference, + SettingsEnums.NIGHT_DISPLAY_SETTINGS); + mColorDisplayManager.setNightDisplayActivated( + !mColorDisplayManager.isNightDisplayActivated()); updateStateInternal(); } }; @@ -50,6 +58,7 @@ public class NightDisplayActivationPreferenceController extends TogglePreference mColorDisplayManager = context.getSystemService(ColorDisplayManager.class); mTimeFormatter = new NightDisplayTimeFormatter(context); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -72,10 +81,10 @@ public class NightDisplayActivationPreferenceController extends TogglePreference public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - final LayoutPreference preference = screen.findPreference(getPreferenceKey()); - mTurnOnButton = preference.findViewById(R.id.night_display_turn_on_button); + mPreference = screen.findPreference(getPreferenceKey()); + mTurnOnButton = mPreference.findViewById(R.id.night_display_turn_on_button); mTurnOnButton.setOnClickListener(mListener); - mTurnOffButton = preference.findViewById(R.id.night_display_turn_off_button); + mTurnOffButton = mPreference.findViewById(R.id.night_display_turn_off_button); mTurnOffButton.setOnClickListener(mListener); } diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java index 7f425774982..39750c9985c 100644 --- a/src/com/android/settings/display/NightDisplaySettings.java +++ b/src/com/android/settings/display/NightDisplaySettings.java @@ -76,9 +76,11 @@ public class NightDisplaySettings extends DashboardFragment @Override public boolean onPreferenceTreeClick(Preference preference) { if ("night_display_end_time".equals(preference.getKey())) { + writePreferenceClickMetric(preference); showDialog(DIALOG_END_TIME); return true; } else if ("night_display_start_time".equals(preference.getKey())) { + writePreferenceClickMetric(preference); showDialog(DIALOG_START_TIME); return true; } diff --git a/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java b/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java index 0175b95b24d..622f2e2cf45 100644 --- a/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java +++ b/src/com/android/settings/display/darkmode/DarkModeActivationPreferenceController.java @@ -16,15 +16,20 @@ package com.android.settings.display.darkmode; import android.app.UiModeManager; +import android.app.settings.SettingsEnums; import android.content.Context; import android.content.res.Configuration; import android.os.PowerManager; import android.view.View; import android.widget.Button; + import androidx.preference.Preference; import androidx.preference.PreferenceScreen; + import com.android.settings.R; import com.android.settings.core.BasePreferenceController; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.LayoutPreference; import java.time.LocalTime; @@ -33,22 +38,25 @@ import java.time.LocalTime; * Controller for activate/deactivate night mode button */ public class DarkModeActivationPreferenceController extends BasePreferenceController { + private final UiModeManager mUiModeManager; + private final MetricsFeatureProvider mMetricsFeatureProvider; private PowerManager mPowerManager; private Button mTurnOffButton; private Button mTurnOnButton; private TimeFormatter mFormat; + private LayoutPreference mPreference; - public DarkModeActivationPreferenceController(Context context, - String preferenceKey) { + public DarkModeActivationPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mPowerManager = context.getSystemService(PowerManager.class); mUiModeManager = context.getSystemService(UiModeManager.class); mFormat = new TimeFormatter(context); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } - public DarkModeActivationPreferenceController(Context context, - String preferenceKey, TimeFormatter f) { + public DarkModeActivationPreferenceController(Context context, String preferenceKey, + TimeFormatter f) { this(context, preferenceKey); mFormat = f; } @@ -128,6 +136,8 @@ public class DarkModeActivationPreferenceController extends BasePreferenceContro private final View.OnClickListener mListener = new View.OnClickListener() { @Override public void onClick(View v) { + mMetricsFeatureProvider.logClickedPreference(mPreference, + SettingsEnums.DARK_UI_SETTINGS); final boolean active = (mContext.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_YES) != 0; mUiModeManager.setNightModeActivated(!active); @@ -139,10 +149,10 @@ public class DarkModeActivationPreferenceController extends BasePreferenceContro public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - final LayoutPreference preference = screen.findPreference(getPreferenceKey()); - mTurnOnButton = preference.findViewById(R.id.dark_ui_turn_on_button); + mPreference = screen.findPreference(getPreferenceKey()); + mTurnOnButton = mPreference.findViewById(R.id.dark_ui_turn_on_button); mTurnOnButton.setOnClickListener(mListener); - mTurnOffButton = preference.findViewById(R.id.dark_ui_turn_off_button); + mTurnOffButton = mPreference.findViewById(R.id.dark_ui_turn_off_button); mTurnOffButton.setOnClickListener(mListener); } diff --git a/src/com/android/settings/dream/StartNowPreferenceController.java b/src/com/android/settings/dream/StartNowPreferenceController.java index 0541bca891c..a5db93b3385 100644 --- a/src/com/android/settings/dream/StartNowPreferenceController.java +++ b/src/com/android/settings/dream/StartNowPreferenceController.java @@ -16,6 +16,7 @@ package com.android.settings.dream; +import android.app.settings.SettingsEnums; import android.content.Context; import android.widget.Button; @@ -24,20 +25,24 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.dream.DreamBackend; import com.android.settingslib.widget.LayoutPreference; public class StartNowPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin { - private static final String TAG = "StartNowPreferenceController"; + private static final String PREF_KEY = "dream_start_now_button_container"; private final DreamBackend mBackend; + private final MetricsFeatureProvider mMetricsFeatureProvider; public StartNowPreferenceController(Context context) { super(context); mBackend = DreamBackend.getInstance(context); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -56,7 +61,10 @@ public class StartNowPreferenceController extends AbstractPreferenceController i LayoutPreference pref = screen.findPreference(getPreferenceKey()); Button startButton = pref.findViewById(R.id.dream_start_now_button); - startButton.setOnClickListener(v -> mBackend.startDreaming()); + startButton.setOnClickListener(v -> { + mMetricsFeatureProvider.logClickedPreference(pref, SettingsEnums.DREAM); + mBackend.startDreaming(); + }); } @Override diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java index 1f4690e087f..fff6523a395 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java @@ -16,6 +16,7 @@ package com.android.settings.fuelgauge.batterysaver; +import android.app.settings.SettingsEnums; import android.content.ContentResolver; import android.content.Context; import android.net.Uri; @@ -27,7 +28,9 @@ import androidx.preference.PreferenceScreen; import com.android.settings.core.TogglePreferenceController; import com.android.settings.fuelgauge.BatterySaverReceiver; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.TwoStateButtonPreference; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; @@ -41,13 +44,14 @@ public class BatterySaverButtonPreferenceController extends LifecycleObserver, OnStart, OnStop, BatterySaverReceiver.BatterySaverListener { private final BatterySaverReceiver mBatterySaverReceiver; - private final PowerManager mPowerManager; + private final MetricsFeatureProvider mMetricsFeatureProvider; private TwoStateButtonPreference mPreference; public BatterySaverButtonPreferenceController(Context context, String key) { super(context, key); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mBatterySaverReceiver = new BatterySaverReceiver(context); mBatterySaverReceiver.setBatterySaverListener(this); @@ -96,6 +100,8 @@ public class BatterySaverButtonPreferenceController extends @Override public boolean setChecked(boolean stateOn) { + mMetricsFeatureProvider.logClickedPreference(mPreference, + SettingsEnums.FUELGAUGE_BATTERY_SAVER); // This screen already shows a warning, so we don't need another warning. return BatterySaverUtils.setPowerSaveMode(mContext, stateOn, false /* needFirstTimeWarning */); diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java index ad11f559b05..746a2df8ab2 100644 --- a/src/com/android/settings/notification/SoundSettings.java +++ b/src/com/android/settings/notification/SoundSettings.java @@ -112,6 +112,7 @@ public class SoundSettings extends DashboardFragment implements OnActivityResult @Override public boolean onPreferenceTreeClick(Preference preference) { if (preference instanceof RingtonePreference) { + writePreferenceClickMetric(preference); mRequestPreference = (RingtonePreference) preference; mRequestPreference.onPrepareRingtonePickerIntent(mRequestPreference.getIntent()); getActivity().startActivityForResultAsUser( diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java index 29b114a3183..33529916379 100644 --- a/src/com/android/settings/security/LockscreenDashboardFragment.java +++ b/src/com/android/settings/security/LockscreenDashboardFragment.java @@ -107,8 +107,7 @@ public class LockscreenDashboardFragment extends DashboardFragment KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE); lifecycle.addObserver(notificationController); controllers.add(notificationController); - mOwnerInfoPreferenceController = - new OwnerInfoPreferenceController(context, this, lifecycle); + mOwnerInfoPreferenceController = new OwnerInfoPreferenceController(context, this); controllers.add(mOwnerInfoPreferenceController); return controllers; @@ -137,7 +136,7 @@ public class LockscreenDashboardFragment extends DashboardFragment final List controllers = new ArrayList<>(); controllers.add(new LockScreenNotificationPreferenceController(context)); controllers.add(new OwnerInfoPreferenceController( - context, null /* fragment */, null /* lifecycle */)); + context, null /* fragment */)); return controllers; } diff --git a/src/com/android/settings/security/OwnerInfoPreferenceController.java b/src/com/android/settings/security/OwnerInfoPreferenceController.java index 5276722f22b..248301671a0 100644 --- a/src/com/android/settings/security/OwnerInfoPreferenceController.java +++ b/src/com/android/settings/security/OwnerInfoPreferenceController.java @@ -17,11 +17,10 @@ package com.android.settings.security; import android.content.Context; import android.os.UserHandle; +import android.text.TextUtils; import androidx.annotation.VisibleForTesting; -import androidx.fragment.app.Fragment; import androidx.preference.Preference; -import androidx.preference.Preference.OnPreferenceClickListener; import androidx.preference.PreferenceScreen; import com.android.internal.widget.LockPatternUtils; @@ -31,18 +30,19 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; import com.android.settingslib.core.lifecycle.events.OnResume; public class OwnerInfoPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin, LifecycleObserver, OnResume { - private static final String KEY_OWNER_INFO = "owner_info_settings"; + @VisibleForTesting + static final String KEY_OWNER_INFO = "owner_info_settings"; private static final int MY_USER_ID = UserHandle.myUserId(); private final LockPatternUtils mLockPatternUtils; - private final Fragment mParent; + private final ObservablePreferenceFragment mParent; private RestrictedPreference mOwnerInfoPref; // Container fragment should implement this in order to show the correct summary @@ -50,12 +50,12 @@ public class OwnerInfoPreferenceController extends AbstractPreferenceController void onOwnerInfoUpdated(); } - public OwnerInfoPreferenceController(Context context, Fragment parent, Lifecycle lifecycle ) { + public OwnerInfoPreferenceController(Context context, ObservablePreferenceFragment parent) { super(context); mParent = parent; mLockPatternUtils = new LockPatternUtils(context); - if (lifecycle != null) { - lifecycle.addObserver(this); + if (parent != null) { + parent.getSettingsLifecycle().addObserver(this); } } @@ -80,6 +80,15 @@ public class OwnerInfoPreferenceController extends AbstractPreferenceController return KEY_OWNER_INFO; } + @Override + public boolean handlePreferenceTreeClick(Preference preference) { + if (TextUtils.equals(getPreferenceKey(), preference.getKey())) { + OwnerInfoSettings.show(mParent); + return true; + } + return false; + } + public void updateEnableState() { if (mOwnerInfoPref == null) { return; @@ -90,16 +99,6 @@ public class OwnerInfoPreferenceController extends AbstractPreferenceController } else { mOwnerInfoPref.setDisabledByAdmin(null); mOwnerInfoPref.setEnabled(!mLockPatternUtils.isLockScreenDisabled(MY_USER_ID)); - if (mOwnerInfoPref.isEnabled()) { - mOwnerInfoPref.setOnPreferenceClickListener( - new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - OwnerInfoSettings.show(mParent); - return true; - } - }); - } } } diff --git a/src/com/android/settings/security/screenlock/ScreenLockSettings.java b/src/com/android/settings/security/screenlock/ScreenLockSettings.java index c1a0f467615..082e3335989 100644 --- a/src/com/android/settings/security/screenlock/ScreenLockSettings.java +++ b/src/com/android/settings/security/screenlock/ScreenLockSettings.java @@ -20,15 +20,12 @@ import android.app.settings.SettingsEnums; import android.content.Context; import android.os.UserHandle; -import androidx.fragment.app.Fragment; - import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.security.OwnerInfoPreferenceController; import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.search.SearchIndexable; import java.util.ArrayList; @@ -61,8 +58,7 @@ public class ScreenLockSettings extends DashboardFragment @Override protected List createPreferenceControllers(Context context) { mLockPatternUtils = new LockPatternUtils(context); - return buildPreferenceControllers(context, this /* parent */, getSettingsLifecycle(), - mLockPatternUtils); + return buildPreferenceControllers(context, this /* parent */, mLockPatternUtils); } @Override @@ -71,7 +67,7 @@ public class ScreenLockSettings extends DashboardFragment } private static List buildPreferenceControllers(Context context, - Fragment parent, Lifecycle lifecycle, LockPatternUtils lockPatternUtils) { + DashboardFragment parent, LockPatternUtils lockPatternUtils) { final List controllers = new ArrayList<>(); controllers.add(new PatternVisiblePreferenceController( context, MY_USER_ID, lockPatternUtils)); @@ -79,11 +75,10 @@ public class ScreenLockSettings extends DashboardFragment context, MY_USER_ID, lockPatternUtils)); controllers.add(new LockAfterTimeoutPreferenceController( context, MY_USER_ID, lockPatternUtils)); - controllers.add(new OwnerInfoPreferenceController(context, parent, lifecycle)); + controllers.add(new OwnerInfoPreferenceController(context, parent)); return controllers; } - public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.screen_lock_settings) { @@ -91,7 +86,7 @@ public class ScreenLockSettings extends DashboardFragment public List createPreferenceControllers( Context context) { return buildPreferenceControllers(context, null /* parent */, - null /* lifecycle */, new LockPatternUtils(context)); + new LockPatternUtils(context)); } }; } diff --git a/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java index 0130aa1aeb3..bcf985884e0 100644 --- a/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/OwnerInfoPreferenceControllerTest.java @@ -15,6 +15,8 @@ */ package com.android.settings.security; +import static com.android.settings.security.OwnerInfoPreferenceController.KEY_OWNER_INFO; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -23,7 +25,6 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -31,7 +32,6 @@ import android.content.Context; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; @@ -39,6 +39,8 @@ import com.android.internal.widget.LockPatternUtils; import com.android.settings.users.OwnerInfoSettings; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedPreference; +import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; import org.junit.Before; import org.junit.Test; @@ -53,7 +55,7 @@ import org.robolectric.util.ReflectionHelpers; public class OwnerInfoPreferenceControllerTest { @Mock - private PreferenceFragmentCompat mFragment; + private ObservablePreferenceFragment mFragment; @Mock private PreferenceScreen mScreen; @Mock @@ -80,9 +82,10 @@ public class OwnerInfoPreferenceControllerTest { when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager); when(mPreference.getContext()).thenReturn(mContext); when(mFragment.getFragmentManager()).thenReturn(mFragmentManager); + when(mFragment.getSettingsLifecycle()).thenReturn(mock(Lifecycle.class)); when(mFragmentManager.beginTransaction()).thenReturn(mFragmentTransaction); - mController = spy(new OwnerInfoPreferenceController(mContext, mFragment, null)); + mController = spy(new OwnerInfoPreferenceController(mContext, mFragment)); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); ReflectionHelpers.setField(mController, "mLockPatternUtils", mLockPatternUtils); } @@ -177,15 +180,16 @@ public class OwnerInfoPreferenceControllerTest { } @Test - public void performClick_shouldLaunchOwnerInfoSettings() { + public void handlePreferenceTreeClick_shouldLaunchOwnerInfoSettings() { final RestrictedPreference preference = new RestrictedPreference(mContext); + preference.setKey(KEY_OWNER_INFO); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(preference); doReturn(false).when(mController).isDeviceOwnerInfoEnabled(); doReturn(false).when(mLockPatternUtils).isLockScreenDisabled(anyInt()); mController.displayPreference(mScreen); mController.updateEnableState(); - preference.performClick(); + mController.handlePreferenceTreeClick(preference); verify(mFragment.getFragmentManager().beginTransaction()) .add(any(OwnerInfoSettings.class), anyString());