diff --git a/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java
index a21c024..57a2962 100644
--- a/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationEnablePreferenceController.java
@@ -20,9 +20,6 @@
 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 f73ca01..6883644 100644
--- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
@@ -54,6 +54,7 @@
             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 952f820..9813bde 100644
--- a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
@@ -59,6 +59,7 @@
                     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 db3a8eb..ff5bc78 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -80,6 +80,7 @@
     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 @@
 
     @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 @@
                 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 @@
     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 5c6e6bb..037f584 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -40,10 +40,12 @@
 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 @@
 
     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 @@
 
     @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 c70d841..e4041fb 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -173,6 +173,13 @@
     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 boolean onPreferenceTreeClick(Preference preference) {
         final Collection<List<AbstractPreferenceController>> controllers =
                 mPreferenceControllers.values();
-        // Give all controllers a chance to handle click.
-        preference.getExtras().putInt(CATEGORY, getMetricsCategory());
         for (List<AbstractPreferenceController> 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 3543832..f00a327 100644
--- a/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BrandedAccountPreferenceController.java
@@ -20,6 +20,7 @@
 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 @@
         }
 
         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 b2e2980..4af5d79 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.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.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 a5db93b..fb0581f 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 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 @@
         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 8120821..bea623e 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 @@
  */
 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 @@
                 ? 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 56a23bd..04a9250 100644
--- a/src/com/android/settings/location/LocationServicePreferenceController.java
+++ b/src/com/android/settings/location/LocationServicePreferenceController.java
@@ -58,7 +58,7 @@
     @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 755d158..5beacdd 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -311,8 +311,9 @@
 
         @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 650b1e3..d678d86 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.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.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 @@
 
     protected final int mUserId = UserHandle.myUserId();
     protected final int mProfileChallengeUserId;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     protected RestrictedPreference mPreference;
 
@@ -64,6 +67,7 @@
                 .getLockPatternUtils(context);
         mHost = host;
         mProfileChallengeUserId = Utils.getManagedProfileId(mUm, mUserId);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     @Override
@@ -104,6 +108,8 @@
     @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())
