diff --git a/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java index a21c024fccc..57a29621b39 100644 --- a/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java +++ b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java @@ -20,9 +20,6 @@ import android.content.Context; import android.os.UserHandle; import android.provider.Settings; -import androidx.preference.Preference; -import androidx.preference.SwitchPreference; - import com.android.settings.core.TogglePreferenceController; /** Controller that shows the magnification enable mode summary. */ diff --git a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java index f73ca01fe83..68836449463 100644 --- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java +++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java @@ -54,6 +54,7 @@ public class MagnificationGesturesPreferenceController extends TogglePreferenceC populateMagnificationGesturesPreferenceExtras(extras, mContext); extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, isChecked()); extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mIsFromSUW); + return true; } return false; } diff --git a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java index 952f820d7a2..9813bde5b22 100644 --- a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java +++ b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java @@ -59,6 +59,7 @@ public class MagnificationNavbarPreferenceController extends TogglePreferenceCon mContext.getText(R.string.accessibility_screen_magnification_navbar_summary)); extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, isChecked()); extras.putBoolean(AccessibilitySettings.EXTRA_LAUNCHED_FROM_SUW, mIsFromSUW); + return true; } return false; } diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java index db3a8eb9e28..ff5bc780910 100644 --- a/src/com/android/settings/accounts/AccountPreferenceController.java +++ b/src/com/android/settings/accounts/AccountPreferenceController.java @@ -80,6 +80,7 @@ public class AccountPreferenceController extends AbstractPreferenceController private static final int ORDER_NEXT_TO_LAST = 1001; private static final int ORDER_NEXT_TO_NEXT_TO_LAST = 1000; + private static final String PREF_KEY_ADD_ACCOUNT = "add_account"; private static final String PREF_KEY_REMOVE_PROFILE = "remove_profile"; private static final String PREF_KEY_WORK_PROFILE_SETTING = "work_profile_setting"; @@ -225,11 +226,13 @@ public class AccountPreferenceController extends AbstractPreferenceController @Override public boolean onPreferenceClick(Preference preference) { + final int metricsCategory = mFragment.getMetricsCategory(); // Check the preference final int count = mProfiles.size(); for (int i = 0; i < count; i++) { ProfileData profileData = mProfiles.valueAt(i); if (preference == profileData.addAccountPreference) { + mMetricsFeatureProvider.logClickedPreference(preference, metricsCategory); Intent intent = new Intent(ACTION_ADD_ACCOUNT); intent.putExtra(EXTRA_USER, profileData.userInfo.getUserHandle()); intent.putExtra(EXTRA_AUTHORITIES, mAuthorities); @@ -237,16 +240,18 @@ public class AccountPreferenceController extends AbstractPreferenceController return true; } if (preference == profileData.removeWorkProfilePreference) { + mMetricsFeatureProvider.logClickedPreference(preference, metricsCategory); final int userId = profileData.userInfo.id; RemoveUserFragment.newInstance(userId).show(mFragment.getFragmentManager(), "removeUser"); return true; } if (preference == profileData.managedProfilePreference) { + mMetricsFeatureProvider.logClickedPreference(preference, metricsCategory); Bundle arguments = new Bundle(); arguments.putParcelable(Intent.EXTRA_USER, profileData.userInfo.getUserHandle()); new SubSettingLauncher(mContext) - .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .setSourceMetricsCategory(metricsCategory) .setDestination(ManagedProfileSettings.class.getName()) .setTitleRes(R.string.managed_profile_settings_title) .setArguments(arguments) @@ -360,6 +365,7 @@ public class AccountPreferenceController extends AbstractPreferenceController private RestrictedPreference newAddAccountPreference() { RestrictedPreference preference = new RestrictedPreference(mFragment.getPreferenceManager().getContext()); + preference.setKey(PREF_KEY_ADD_ACCOUNT); preference.setTitle(R.string.add_account_label); preference.setIcon(R.drawable.ic_add_24dp); preference.setOnPreferenceClickListener(this); diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java index 5c6e6bb4e72..037f5846a88 100644 --- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java +++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java @@ -40,10 +40,12 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.LayoutPreference; import java.io.IOException; @@ -53,20 +55,23 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl private static final String KEY_REMOVE_ACCOUNT = "remove_account"; + private final MetricsFeatureProvider mMetricsFeatureProvider; private Account mAccount; private Fragment mParentFragment; private UserHandle mUserHandle; + private LayoutPreference mRemoveAccountPreference; public RemoveAccountPreferenceController(Context context, Fragment parent) { super(context); mParentFragment = parent; + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - final LayoutPreference removeAccountPreference = screen.findPreference(KEY_REMOVE_ACCOUNT); - Button removeAccountButton = (Button) removeAccountPreference.findViewById(R.id.button); + mRemoveAccountPreference = screen.findPreference(KEY_REMOVE_ACCOUNT); + final Button removeAccountButton = mRemoveAccountPreference.findViewById(R.id.button); removeAccountButton.setOnClickListener(this); } @@ -82,6 +87,8 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl @Override public void onClick(View v) { + mMetricsFeatureProvider.logClickedPreference(mRemoveAccountPreference, + mMetricsFeatureProvider.getMetricsCategory(mParentFragment)); if (mUserHandle != null) { final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced( mContext, UserManager.DISALLOW_MODIFY_ACCOUNTS, mUserHandle.getIdentifier()); diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index c70d8419974..e4041fbac55 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -173,6 +173,13 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { checkUiBlocker(mControllers); refreshAllPreferences(getLogTag()); + mControllers.stream() + .map(controller -> (Preference) findPreference(controller.getPreferenceKey())) + .filter(Objects::nonNull) + .forEach(preference -> { + // Give all controllers a chance to handle click. + preference.getExtras().putInt(CATEGORY, getMetricsCategory()); + }); } @Override @@ -211,8 +218,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment public boolean onPreferenceTreeClick(Preference preference) { final Collection> controllers = mPreferenceControllers.values(); - // Give all controllers a chance to handle click. - preference.getExtras().putInt(CATEGORY, getMetricsCategory()); for (List controllerList : controllers) { for (AbstractPreferenceController controller : controllerList) { if (controller.handlePreferenceTreeClick(preference)) { diff --git a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java index 3543832c3da..f00a32703c8 100644 --- a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java +++ b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java @@ -20,6 +20,7 @@ import android.accounts.Account; import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Bundle; +import android.text.TextUtils; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; @@ -63,23 +64,29 @@ public class BrandedAccountPreferenceController extends BasePreferenceController } accountPreference.setSummary(mAccounts[0].name); - accountPreference.setOnPreferenceClickListener(preference -> { - final Bundle args = new Bundle(); - args.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT, - mAccounts[0]); - args.putParcelable(AccountDetailDashboardFragment.KEY_USER_HANDLE, - android.os.Process.myUserHandle()); - args.putString(AccountDetailDashboardFragment.KEY_ACCOUNT_TYPE, - mAccountFeatureProvider.getAccountType()); + } - new SubSettingLauncher(mContext) - .setDestination(AccountDetailDashboardFragment.class.getName()) - .setTitleRes(R.string.account_sync_title) - .setArguments(args) - .setSourceMetricsCategory(SettingsEnums.DEVICEINFO) - .launch(); - return true; - }); + @Override + public boolean handlePreferenceTreeClick(Preference preference) { + if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { + return false; + } + + final Bundle args = new Bundle(); + args.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT, + mAccounts[0]); + args.putParcelable(AccountDetailDashboardFragment.KEY_USER_HANDLE, + android.os.Process.myUserHandle()); + args.putString(AccountDetailDashboardFragment.KEY_ACCOUNT_TYPE, + mAccountFeatureProvider.getAccountType()); + + new SubSettingLauncher(mContext) + .setDestination(AccountDetailDashboardFragment.class.getName()) + .setTitleRes(R.string.account_sync_title) + .setArguments(args) + .setSourceMetricsCategory(SettingsEnums.DEVICEINFO) + .launch(); + return true; } @Override diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java index b2e298068d8..4af5d79c37f 100644 --- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java +++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java @@ -23,7 +23,6 @@ import android.content.Intent; import android.content.pm.UserInfo; import android.os.Bundle; import android.os.UserManager; -import android.provider.SearchIndexableResource; import android.view.View; import com.android.settings.R; @@ -50,7 +49,6 @@ import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.widget.LayoutPreference; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; @SearchIndexable diff --git a/src/com/android/settings/dream/StartNowPreferenceController.java b/src/com/android/settings/dream/StartNowPreferenceController.java index a5db93b3385..fb0581f343a 100644 --- a/src/com/android/settings/dream/StartNowPreferenceController.java +++ b/src/com/android/settings/dream/StartNowPreferenceController.java @@ -16,7 +16,6 @@ package com.android.settings.dream; -import android.app.settings.SettingsEnums; import android.content.Context; import android.widget.Button; @@ -25,6 +24,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.dashboard.DashboardFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; @@ -62,7 +62,8 @@ public class StartNowPreferenceController extends AbstractPreferenceController i LayoutPreference pref = screen.findPreference(getPreferenceKey()); Button startButton = pref.findViewById(R.id.dream_start_now_button); startButton.setOnClickListener(v -> { - mMetricsFeatureProvider.logClickedPreference(pref, SettingsEnums.DREAM); + mMetricsFeatureProvider.logClickedPreference(pref, + pref.getExtras().getInt(DashboardFragment.CATEGORY)); mBackend.startDreaming(); }); } diff --git a/src/com/android/settings/location/AppSettingsInjector.java b/src/com/android/settings/location/AppSettingsInjector.java index 812082122ac..bea623e0af2 100644 --- a/src/com/android/settings/location/AppSettingsInjector.java +++ b/src/com/android/settings/location/AppSettingsInjector.java @@ -17,11 +17,14 @@ package com.android.settings.location; import android.content.Context; +import android.content.Intent; import android.text.TextUtils; import androidx.preference.Preference; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.RestrictedAppPreference; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.location.InjectedSetting; import com.android.settingslib.location.SettingsInjector; import com.android.settingslib.widget.apppreference.AppPreference; @@ -31,8 +34,13 @@ import com.android.settingslib.widget.apppreference.AppPreference; */ public class AppSettingsInjector extends SettingsInjector { - public AppSettingsInjector(Context context) { + private final MetricsFeatureProvider mMetricsFeatureProvider; + private final int mMetricsCategory; + + public AppSettingsInjector(Context context, int metricsCategory) { super(context); + mMetricsCategory = metricsCategory; + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -41,4 +49,9 @@ public class AppSettingsInjector extends SettingsInjector { ? new AppPreference(prefContext) : new RestrictedAppPreference(prefContext, setting.userRestriction); } + + @Override + protected void logPreferenceClick(Intent intent) { + mMetricsFeatureProvider.logStartedIntent(intent, mMetricsCategory); + } } diff --git a/src/com/android/settings/location/LocationServicePreferenceController.java b/src/com/android/settings/location/LocationServicePreferenceController.java index 56a23bdacb3..04a925072d7 100644 --- a/src/com/android/settings/location/LocationServicePreferenceController.java +++ b/src/com/android/settings/location/LocationServicePreferenceController.java @@ -58,7 +58,7 @@ public class LocationServicePreferenceController extends LocationBasePreferenceC @Override public void init(DashboardFragment fragment) { super.init(fragment); - mInjector = new AppSettingsInjector(mContext); + mInjector = new AppSettingsInjector(mContext, getMetricsCategory()); } @Override diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java index 755d1586b8a..5beacdd595c 100644 --- a/src/com/android/settings/password/ChooseLockGeneric.java +++ b/src/com/android/settings/password/ChooseLockGeneric.java @@ -311,8 +311,9 @@ public class ChooseLockGeneric extends SettingsActivity { @Override public boolean onPreferenceTreeClick(Preference preference) { - final String key = preference.getKey(); + writePreferenceClickMetric(preference); + final String key = preference.getKey(); if (!isUnlockMethodSecure(key) && mLockPatternUtils.isSecure(mUserId)) { // Show the disabling FRP warning only when the user is switching from a secure // unlock method to an insecure one diff --git a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java index 650b1e39e2b..d678d86654a 100644 --- a/src/com/android/settings/security/ChangeScreenLockPreferenceController.java +++ b/src/com/android/settings/security/ChangeScreenLockPreferenceController.java @@ -31,6 +31,7 @@ import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.SubSettingLauncher; +import com.android.settings.dashboard.DashboardFragment; import com.android.settings.overlay.FeatureFactory; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.security.screenlock.ScreenLockSettings; @@ -39,6 +40,7 @@ import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; public class ChangeScreenLockPreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin, GearPreference.OnGearClickListener { @@ -52,6 +54,7 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont protected final int mUserId = UserHandle.myUserId(); protected final int mProfileChallengeUserId; + private final MetricsFeatureProvider mMetricsFeatureProvider; protected RestrictedPreference mPreference; @@ -64,6 +67,7 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont .getLockPatternUtils(context); mHost = host; mProfileChallengeUserId = Utils.getManagedProfileId(mUm, mUserId); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -104,6 +108,8 @@ public class ChangeScreenLockPreferenceController extends AbstractPreferenceCont @Override public void onGearClick(GearPreference p) { if (TextUtils.equals(p.getKey(), getPreferenceKey())) { + mMetricsFeatureProvider.logClickedPreference(p, + p.getExtras().getInt(DashboardFragment.CATEGORY)); new SubSettingLauncher(mContext) .setDestination(ScreenLockSettings.class.getName()) .setSourceMetricsCategory(mHost.getMetricsCategory())