Merge "Add preference click metric logs for some special cases"
diff --git a/res/xml/wifi_settings.xml b/res/xml/wifi_settings.xml
index 5fac85a..a7f5a20 100644
--- a/res/xml/wifi_settings.xml
+++ b/res/xml/wifi_settings.xml
@@ -34,7 +34,7 @@
         settings:searchable="false"/>
 
     <Preference
-        android:key="configure_settings"
+        android:key="configure_wifi_settings"
         android:title="@string/wifi_configure_settings_preference_title"
         settings:allowDividerAbove="true"
         android:fragment="com.android.settings.wifi.ConfigureWifiSettings"/>
diff --git a/res/xml/wifi_settings2.xml b/res/xml/wifi_settings2.xml
index 8cd3857..2bf39dbe 100644
--- a/res/xml/wifi_settings2.xml
+++ b/res/xml/wifi_settings2.xml
@@ -32,7 +32,7 @@
         android:layout="@layout/preference_category_no_label"/>
 
     <Preference
-        android:key="configure_settings"
+        android:key="configure_wifi_settings"
         android:title="@string/wifi_configure_settings_preference_title"
         settings:allowDividerAbove="true"
         android:fragment="com.android.settings.wifi.ConfigureWifiSettings"/>
diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java
index 4f5ec01..7e02065 100644
--- a/src/com/android/settings/applications/RecentAppsPreferenceController.java
+++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java
@@ -23,7 +23,6 @@
 import android.icu.text.RelativeDateTimeFormatter;
 import android.os.UserHandle;
 import android.util.IconDrawableFactory;
-import android.util.Log;
 import android.view.View;
 
 import androidx.annotation.NonNull;
@@ -37,7 +36,9 @@
 import com.android.settings.applications.manageapplications.ManageApplications;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.utils.StringUtil;
 import com.android.settingslib.widget.AppEntitiesHeaderController;
 import com.android.settingslib.widget.AppEntityInfo;
@@ -65,6 +66,7 @@
     private final ApplicationsState mApplicationsState;
     private final int mUserId;
     private final IconDrawableFactory mIconDrawableFactory;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     private Fragment mHost;
     private List<UsageStats> mRecentApps;
@@ -75,6 +77,7 @@
                 (Application) mContext.getApplicationContext());
         mUserId = UserHandle.myUserId();
         mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
     }
 
     public void setFragment(Fragment fragment) {
@@ -96,6 +99,8 @@
         mAppEntitiesController = AppEntitiesHeaderController.newInstance(mContext, view)
                 .setHeaderTitleRes(R.string.recent_app_category_title)
                 .setHeaderDetailsClickListener((View v) -> {
+                    mMetricsFeatureProvider.logClickedPreference(mRecentAppsPreference,
+                            SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY);
                     new SubSettingLauncher(mContext)
                             .setDestination(ManageApplications.class.getName())
                             .setArguments(null /* arguments */)
@@ -161,11 +166,14 @@
                 .setSummary(StringUtil.formatRelativeTime(mContext,
                         System.currentTimeMillis() - stat.getLastTimeUsed(), false,
                         RelativeDateTimeFormatter.Style.SHORT))
-                .setOnClickListener(v ->
-                        AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
-                                R.string.application_info_label, pkgName, appEntry.info.uid,
-                                mHost, 1001 /*RequestCode*/,
-                                SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY))
+                .setOnClickListener(v -> {
+                    mMetricsFeatureProvider.logClickedPreference(mRecentAppsPreference,
+                            SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY);
+                    AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
+                            R.string.application_info_label, pkgName, appEntry.info.uid,
+                            mHost, 1001 /*RequestCode*/,
+                            SettingsEnums.SETTINGS_APP_NOTIF_CATEGORY);
+                })
                 .build();
     }
 }
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java
index 73acc12..0f8849d 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminListPreferenceController.java
@@ -46,6 +46,9 @@
 import androidx.preference.SwitchPreference;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.dashboard.DashboardFragment;
+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;
@@ -71,6 +74,7 @@
     private final UserManager mUm;
     private final PackageManager mPackageManager;
     private final IPackageManager mIPackageManager;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
     /**
      * Internal collection of device admin info objects for all profiles associated with the current
      * user.
@@ -102,6 +106,7 @@
         mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
         mPackageManager = mContext.getPackageManager();
         mIPackageManager = AppGlobals.getPackageManager();
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     @Override
@@ -197,6 +202,8 @@
         pref.setSummary(item.getDescription());
         pref.setEnabled(item.isEnabled());
         pref.setOnPreferenceClickListener(preference -> {
+            mMetricsFeatureProvider.logClickedPreference(preference,
+                    pref.getExtras().getInt(DashboardFragment.CATEGORY));
             final UserHandle user = item.getUser();
             mContext.startActivityAsUser(item.getLaunchIntent(mContext), user);
             return true;
diff --git a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java
index 45ac7f7..aa4f869 100644
--- a/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdater.java
@@ -35,6 +35,8 @@
     private static final String TAG = "AvailableMediaBluetoothDeviceUpdater";
     private static final boolean DBG = false;
 
+    private static final String PREF_KEY = "available_media_bt";
+
     private final AudioManager mAudioManager;
 
     public AvailableMediaBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
@@ -97,9 +99,14 @@
 
     @Override
     public boolean onPreferenceClick(Preference preference) {
+        mMetricsFeatureProvider.logClickedPreference(preference, mFragment.getMetricsCategory());
         final CachedBluetoothDevice device = ((BluetoothDevicePreference) preference)
                 .getBluetoothDevice();
         return device.setActive();
     }
-}
 
+    @Override
+    protected String getPreferenceKey() {
+        return PREF_KEY;
+    }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
index 7cf7fd5..e2715d3 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
@@ -28,12 +28,14 @@
 import com.android.settings.connecteddevice.DevicePreferenceCallback;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.GearPreference;
 import com.android.settingslib.bluetooth.BluetoothCallback;
 import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -52,6 +54,7 @@
     private static final String TAG = "BluetoothDeviceUpdater";
     private static final boolean DBG = false;
 
+    protected final MetricsFeatureProvider mMetricsFeatureProvider;
     protected final DevicePreferenceCallback mDevicePreferenceCallback;
     protected final Map<BluetoothDevice, Preference> mPreferenceMap;
     protected Context mPrefContext;
@@ -76,6 +79,8 @@
         mDevicePreferenceCallback = devicePreferenceCallback;
         mPreferenceMap = new HashMap<>();
         mLocalManager = localManager;
+        mMetricsFeatureProvider = FeatureFactory.getFactory(mFragment.getContext())
+                .getMetricsFeatureProvider();
     }
 
     /**
@@ -207,6 +212,11 @@
     public abstract boolean isFilterMatched(CachedBluetoothDevice cachedBluetoothDevice);
 
     /**
+     * Return a preference key for logging
+     */
+    protected abstract String getPreferenceKey();
+
+    /**
      * Update whether to show {@link CachedBluetoothDevice} in the list.
      */
     protected void update(CachedBluetoothDevice cachedBluetoothDevice) {
@@ -228,6 +238,7 @@
                     new BluetoothDevicePreference(mPrefContext, cachedDevice,
                             true /* showDeviceWithoutNames */,
                             BluetoothDevicePreference.SortType.TYPE_DEFAULT);
+            btPreference.setKey(getPreferenceKey());
             btPreference.setOnGearClickListener(mDeviceProfilesListener);
             if (this instanceof Preference.OnPreferenceClickListener) {
                 btPreference.setOnPreferenceClickListener(
@@ -264,6 +275,7 @@
      * {@link SubSettingLauncher} to launch {@link BluetoothDeviceDetailsFragment}
      */
     protected void launchDeviceDetails(Preference preference) {
+        mMetricsFeatureProvider.logClickedPreference(preference, mFragment.getMetricsCategory());
         final CachedBluetoothDevice device =
                 ((BluetoothDevicePreference) preference).getBluetoothDevice();
         if (device == null) {
diff --git a/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java
index 3ae081c..c7cae7f 100644
--- a/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java
@@ -35,6 +35,8 @@
     private static final String TAG = "ConnBluetoothDeviceUpdater";
     private static final boolean DBG = false;
 
+    private static final String PREF_KEY = "connected_bt";
+
     private final AudioManager mAudioManager;
 
     public ConnectedBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
@@ -111,4 +113,9 @@
             });
         }
     }
+
+    @Override
+    protected String getPreferenceKey() {
+        return PREF_KEY;
+    }
 }
diff --git a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
index 6381b84..8d91dfc 100644
--- a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
@@ -30,9 +30,12 @@
  */
 public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
         implements Preference.OnPreferenceClickListener {
+
     private static final String TAG = "SavedBluetoothDeviceUpdater";
     private static final boolean DBG = false;
 
+    private static final String PREF_KEY = "saved_bt";
+
     public SavedBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
             DevicePreferenceCallback devicePreferenceCallback) {
         super(context, fragment, devicePreferenceCallback);
@@ -51,9 +54,15 @@
 
     @Override
     public boolean onPreferenceClick(Preference preference) {
+        mMetricsFeatureProvider.logClickedPreference(preference, mFragment.getMetricsCategory());
         final CachedBluetoothDevice device = ((BluetoothDevicePreference) preference)
                 .getBluetoothDevice();
         device.connect(true);
         return true;
     }
+
+    @Override
+    protected String getPreferenceKey() {
+        return PREF_KEY;
+    }
 }
diff --git a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
index 0be1438..1078a21 100644
--- a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
+++ b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
@@ -29,11 +29,18 @@
 import com.android.settings.connecteddevice.DevicePreferenceCallback;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 /**
  * Controller to maintain connected usb device
  */
 public class ConnectedUsbDeviceUpdater {
+
+    private static final String PREF_KEY = "connected_usb";
+
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+
     private DashboardFragment mFragment;
     private UsbBackend mUsbBackend;
     private DevicePreferenceCallback mDevicePreferenceCallback;
@@ -67,6 +74,8 @@
         mUsbBackend = usbBackend;
         mUsbReceiver = new UsbConnectionBroadcastReceiver(context,
                 mUsbConnectionListener, mUsbBackend);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(mFragment.getContext())
+                .getMetricsFeatureProvider();
     }
 
     public void registerCallback() {
@@ -82,7 +91,9 @@
         mUsbPreference = new Preference(context, null /* AttributeSet */);
         mUsbPreference.setTitle(R.string.usb_pref);
         mUsbPreference.setIcon(R.drawable.ic_usb);
+        mUsbPreference.setKey(PREF_KEY);
         mUsbPreference.setOnPreferenceClickListener((Preference p) -> {
+            mMetricsFeatureProvider.logClickedPreference(p, mFragment.getMetricsCategory());
             // New version - uses a separate screen.
             new SubSettingLauncher(mFragment.getContext())
                     .setDestination(UsbDetailsFragment.class.getName())
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index f680bdd..5efd175 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -150,12 +150,15 @@
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         if (preference == mBillingCycle) {
+            writePreferenceClickMetric(preference);
             CycleEditorFragment.show(this);
             return true;
         } else if (preference == mDataWarning) {
+            writePreferenceClickMetric(preference);
             BytesEditorFragment.show(this, false);
             return true;
         } else if (preference == mDataLimit) {
+            writePreferenceClickMetric(preference);
             BytesEditorFragment.show(this, true);
             return true;
         }
diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java
index 861adf1..9e3f1e8 100644
--- a/src/com/android/settings/network/MobileNetworkSummaryController.java
+++ b/src/com/android/settings/network/MobileNetworkSummaryController.java
@@ -27,22 +27,25 @@
 import android.telephony.SubscriptionManager;
 import android.telephony.euicc.EuiccManager;
 
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.network.telephony.MobileNetworkActivity;
-import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.widget.AddPreference;
-import com.android.settingslib.Utils;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-import java.util.List;
-
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
 import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.Preference;
 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.network.telephony.MobileNetworkActivity;
+import com.android.settings.network.telephony.MobileNetworkUtils;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.widget.AddPreference;
+import com.android.settingslib.Utils;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
+import java.util.List;
+
 public class MobileNetworkSummaryController extends AbstractPreferenceController implements
         SubscriptionsChangeListener.SubscriptionsChangeListenerClient, LifecycleObserver,
         PreferenceControllerMixin {
@@ -50,6 +53,8 @@
 
     private static final String KEY = "mobile_network_list";
 
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+
     private SubscriptionManager mSubscriptionManager;
     private UserManager mUserManager;
     private SubscriptionsChangeListener mChangeListener;
@@ -72,6 +77,7 @@
      */
     public MobileNetworkSummaryController(Context context, Lifecycle lifecycle) {
         super(context);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
         mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
         mUserManager = context.getSystemService(UserManager.class);
         if (lifecycle != null) {
@@ -146,6 +152,8 @@
         if (subs.isEmpty()) {
             if (MobileNetworkUtils.showEuiccSettings(mContext)) {
                 mPreference.setOnPreferenceClickListener((Preference pref) -> {
+                    mMetricsFeatureProvider.logClickedPreference(pref,
+                            pref.getExtras().getInt(DashboardFragment.CATEGORY));
                     startAddSimFlow();
                     return true;
                 });
@@ -157,11 +165,17 @@
             // supported.
             if (MobileNetworkUtils.showEuiccSettings(mContext)) {
                 mPreference.setAddWidgetEnabled(!mChangeListener.isAirplaneModeOn());
-                mPreference.setOnAddClickListener(p -> startAddSimFlow());
+                mPreference.setOnAddClickListener(p -> {
+                    mMetricsFeatureProvider.logClickedPreference(p,
+                            p.getExtras().getInt(DashboardFragment.CATEGORY));
+                    startAddSimFlow();
+                });
             }
 
             if (subs.size() == 1) {
                 mPreference.setOnPreferenceClickListener((Preference pref) -> {
+                    mMetricsFeatureProvider.logClickedPreference(pref,
+                            pref.getExtras().getInt(DashboardFragment.CATEGORY));
                     final SubscriptionInfo info = subs.get(0);
                     final int subId = info.getSubscriptionId();
                     if (!info.isEmbedded() && !mSubscriptionManager.isActiveSubscriptionId(subId)
diff --git a/src/com/android/settings/network/MobilePlanPreferenceController.java b/src/com/android/settings/network/MobilePlanPreferenceController.java
index dc41708..255dfcd 100644
--- a/src/com/android/settings/network/MobilePlanPreferenceController.java
+++ b/src/com/android/settings/network/MobilePlanPreferenceController.java
@@ -85,6 +85,7 @@
         if (mHost != null && KEY_MANAGE_MOBILE_PLAN.equals(preference.getKey())) {
             mMobilePlanDialogMessage = null;
             onManageMobilePlanClick();
+            return true;
         }
         return false;
     }
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index abbd9a7..0a9a5b1 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -133,6 +133,7 @@
     @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/notification/zen/ZenModeButtonPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeButtonPreferenceController.java
index 270fb73..a53b4fa 100644
--- a/src/com/android/settings/notification/zen/ZenModeButtonPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeButtonPreferenceController.java
@@ -27,6 +27,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.notification.SettingsEnableZenModeDialog;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.widget.LayoutPreference;
@@ -65,23 +66,22 @@
             mZenButtonOn = ((LayoutPreference) preference)
                     .findViewById(R.id.zen_mode_settings_turn_on_button);
             mZenButtonOn.setFocusableInTouchMode(true);
-            updateZenButtonOnClickListener();
+            updateZenButtonOnClickListener(preference);
         }
 
         if (null == mZenButtonOff) {
             mZenButtonOff = ((LayoutPreference) preference)
                     .findViewById(R.id.zen_mode_settings_turn_off_button);
             mZenButtonOff.setOnClickListener(v -> {
-                mMetricsFeatureProvider.action(mContext,
-                        SettingsEnums.ACTION_ZEN_TOGGLE_DND_BUTTON, false);
+                writeMetrics(preference, false);
                 mBackend.setZenMode(Settings.Global.ZEN_MODE_OFF);
             });
         }
 
-        updateButtons();
+        updateButtons(preference);
     }
 
-    private void updateButtons() {
+    private void updateButtons(Preference preference) {
         switch (getZenMode()) {
             case Settings.Global.ZEN_MODE_ALARMS:
             case Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
@@ -93,35 +93,39 @@
             case Settings.Global.ZEN_MODE_OFF:
             default:
                 mZenButtonOff.setVisibility(View.GONE);
-                updateZenButtonOnClickListener();
+                updateZenButtonOnClickListener(preference);
                 mZenButtonOn.setVisibility(View.VISIBLE);
                 mZenButtonOn.requestFocus();
         }
     }
 
-    private void updateZenButtonOnClickListener() {
+    private void updateZenButtonOnClickListener(Preference preference) {
         int zenDuration = getZenDuration();
         switch (zenDuration) {
             case Settings.Secure.ZEN_DURATION_PROMPT:
                 mZenButtonOn.setOnClickListener(v -> {
-                    mMetricsFeatureProvider.action(mContext,
-                            SettingsEnums.ACTION_ZEN_TOGGLE_DND_BUTTON, false);
+                    writeMetrics(preference, true);
                     new SettingsEnableZenModeDialog().show(mFragment, TAG);
                 });
                 break;
             case Settings.Secure.ZEN_DURATION_FOREVER:
                 mZenButtonOn.setOnClickListener(v -> {
-                    mMetricsFeatureProvider.action(mContext,
-                            SettingsEnums.ACTION_ZEN_TOGGLE_DND_BUTTON, false);
+                    writeMetrics(preference, true);
                     mBackend.setZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
                 });
                 break;
             default:
                 mZenButtonOn.setOnClickListener(v -> {
-                    mMetricsFeatureProvider.action(mContext,
-                            SettingsEnums.ACTION_ZEN_TOGGLE_DND_BUTTON, false);
+                    writeMetrics(preference, true);
                     mBackend.setZenModeForDuration(zenDuration);
                 });
         }
     }
+
+    private void writeMetrics(Preference preference, boolean buttonOn) {
+        mMetricsFeatureProvider.logClickedPreference(preference,
+                preference.getExtras().getInt(DashboardFragment.CATEGORY));
+        mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_ZEN_TOGGLE_DND_BUTTON,
+                buttonOn);
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/settings/notification/zen/ZenModeStarredContactsPreferenceController.java b/src/com/android/settings/notification/zen/ZenModeStarredContactsPreferenceController.java
index 80fae97..64f2010 100644
--- a/src/com/android/settings/notification/zen/ZenModeStarredContactsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModeStarredContactsPreferenceController.java
@@ -28,6 +28,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.dashboard.DashboardFragment;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 public class ZenModeStarredContactsPreferenceController extends
@@ -89,6 +90,8 @@
 
     @Override
     public boolean onPreferenceClick(Preference preference) {
+        mMetricsFeatureProvider.logClickedPreference(preference,
+                 preference.getExtras().getInt(DashboardFragment.CATEGORY));
         if (mStarredContactsIntent.resolveActivity(mPackageManager) != null) {
             mContext.startActivity(mStarredContactsIntent);
         } else {
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 4310476..27b5c3b 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -118,7 +118,7 @@
     private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list";
     private static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point";
     private static final String PREF_KEY_ACCESS_POINTS = "access_points";
-    private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_settings";
+    private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_wifi_settings";
     private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks";
     private static final String PREF_KEY_STATUS_MESSAGE = "wifi_status_message";
     @VisibleForTesting
diff --git a/src/com/android/settings/wifi/WifiSettings2.java b/src/com/android/settings/wifi/WifiSettings2.java
index 58f903c..a1f1ad9 100644
--- a/src/com/android/settings/wifi/WifiSettings2.java
+++ b/src/com/android/settings/wifi/WifiSettings2.java
@@ -117,7 +117,7 @@
     // TODO(b/70983952): Rename these to use WifiEntry instead of AccessPoint.
     private static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point";
     private static final String PREF_KEY_ACCESS_POINTS = "access_points";
-    private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_settings";
+    private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_wifi_settings";
     private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks";
     private static final String PREF_KEY_STATUS_MESSAGE = "wifi_status_message";
     @VisibleForTesting
@@ -1096,7 +1096,7 @@
                 .launch();
     }
 
-    /** Helper method to return whether an WifiEntry is disabled due to a wrong password */
+    /** Helper method to return whether a WifiEntry is disabled due to a wrong password */
     private static boolean isDisabledByWrongPassword(WifiEntry wifiEntry) {
         WifiConfiguration config = wifiEntry.getWifiConfiguration();
         if (config == null) {
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
index 66bf959..260fc41 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
@@ -82,7 +82,7 @@
     private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
     private BluetoothDevicePreference mPreference;
     private ShadowBluetoothAdapter mShadowBluetoothAdapter;
-    private List<CachedBluetoothDevice> mCachedDevices = new ArrayList<CachedBluetoothDevice>();
+    private List<CachedBluetoothDevice> mCachedDevices = new ArrayList<>();
 
     @Before
     public void setUp() {
@@ -104,11 +104,16 @@
         mBluetoothDeviceUpdater =
             new BluetoothDeviceUpdater(mDashboardFragment, mDevicePreferenceCallback,
                     mLocalManager) {
-            @Override
-            public boolean isFilterMatched(CachedBluetoothDevice cachedBluetoothDevice) {
-                return true;
-            }
-        };
+                @Override
+                public boolean isFilterMatched(CachedBluetoothDevice cachedBluetoothDevice) {
+                    return true;
+                }
+
+                @Override
+                protected String getPreferenceKey() {
+                    return "test_bt";
+                }
+            };
         mBluetoothDeviceUpdater.setPrefContext(mContext);
     }