Use MetricsFeatureProvider for logging in Settings.

Bug: 31664539
Test: make RunSettingsRoboTests for regression
Test: adb logcat -b events | egrep "(sysui_|notification_)" for
      verifying log

Change-Id: Id944be7c4ff9911aebee481c2df485542f1318f0
diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java
index 950d52a..56a4ca0 100644
--- a/src/com/android/settings/AirplaneModeEnabler.java
+++ b/src/com/android/settings/AirplaneModeEnabler.java
@@ -27,21 +27,21 @@
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.telephony.PhoneStateIntentReceiver;
 import com.android.internal.telephony.TelephonyProperties;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.WirelessUtils;
 
 public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListener {
 
+    private static final int EVENT_SERVICE_STATE_CHANGED = 3;
+
     private final Context mContext;
+    private final SwitchPreference mSwitchPref;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     private PhoneStateIntentReceiver mPhoneStateReceiver;
-    
-    private final SwitchPreference mSwitchPref;
-
-    private static final int EVENT_SERVICE_STATE_CHANGED = 3;
 
     private Handler mHandler = new Handler() {
         @Override
@@ -61,19 +61,21 @@
         }
     };
 
-    public AirplaneModeEnabler(Context context, SwitchPreference airplaneModeSwitchPreference) {
-        
+    public AirplaneModeEnabler(Context context, SwitchPreference airplaneModeSwitchPreference,
+            MetricsFeatureProvider metricsFeatureProvider) {
+
         mContext = context;
         mSwitchPref = airplaneModeSwitchPreference;
+        mMetricsFeatureProvider = metricsFeatureProvider;
 
         airplaneModeSwitchPreference.setPersistent(false);
-    
+
         mPhoneStateReceiver = new PhoneStateIntentReceiver(mContext, mHandler);
         mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED);
     }
 
     public void resume() {
-        
+
         mSwitchPref.setChecked(WirelessUtils.isAirplaneModeOn(mContext));
 
         mPhoneStateReceiver.registerIntent();
@@ -82,7 +84,7 @@
                 Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true,
                 mAirplaneModeObserver);
     }
-    
+
     public void pause() {
         mPhoneStateReceiver.unregisterIntent();
         mSwitchPref.setOnPreferenceChangeListener(null);
@@ -91,11 +93,11 @@
 
     private void setAirplaneModeOn(boolean enabling) {
         // Change the system setting
-        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 
-                                enabling ? 1 : 0);
+        Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON,
+                enabling ? 1 : 0);
         // Update the UI to reflect system setting
         mSwitchPref.setChecked(enabling);
-        
+
         // Post the intent
         Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
         intent.putExtra("state", enabling);
@@ -113,17 +115,17 @@
     private void onAirplaneModeChanged() {
         mSwitchPref.setChecked(WirelessUtils.isAirplaneModeOn(mContext));
     }
-    
+
     /**
      * Called when someone clicks on the checkbox preference.
      */
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         if (Boolean.parseBoolean(
-                    SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
+                SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) {
             // In ECM mode, do not update database at this point
         } else {
             Boolean value = (Boolean) newValue;
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_AIRPLANE_TOGGLE, value);
+            mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_AIRPLANE_TOGGLE, value);
             setAirplaneModeOn(value);
         }
         return true;
diff --git a/src/com/android/settings/BugreportPreference.java b/src/com/android/settings/BugreportPreference.java
index 3aa3b75..e929d3d 100644
--- a/src/com/android/settings/BugreportPreference.java
+++ b/src/com/android/settings/BugreportPreference.java
@@ -21,19 +21,15 @@
 import android.app.AlertDialog.Builder;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.os.Handler;
 import android.os.RemoteException;
-import android.text.format.DateUtils;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.View;
 import android.widget.CheckedTextView;
-import android.widget.RadioButton;
 import android.widget.TextView;
-import android.widget.Toast;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.settings.overlay.FeatureFactory;
 
 public class BugreportPreference extends CustomDialogPreference {
 
@@ -87,11 +83,12 @@
             final Context context = getContext();
             if (mFullTitle.isChecked()) {
                 Log.v(TAG, "Taking full bugreport right away");
-                MetricsLogger.action(context, MetricsEvent.ACTION_BUGREPORT_FROM_SETTINGS_FULL);
+                FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context,
+                        MetricsEvent.ACTION_BUGREPORT_FROM_SETTINGS_FULL);
                 takeBugreport(ActivityManager.BUGREPORT_OPTION_FULL);
             } else {
                 Log.v(TAG, "Taking interactive bugreport right away");
-                MetricsLogger.action(context,
+                FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context,
                         MetricsEvent.ACTION_BUGREPORT_FROM_SETTINGS_INTERACTIVE);
                 takeBugreport(ActivityManager.BUGREPORT_OPTION_INTERACTIVE);
             }
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 33ce5ad..5614767 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -19,11 +19,9 @@
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.UiModeManager;
-import android.app.WallpaperManager;
 import android.app.admin.DevicePolicyManager;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.ComponentName;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -46,7 +44,6 @@
 import android.util.Log;
 
 import com.android.internal.app.NightDisplayController;
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.view.RotationPolicy;
 import com.android.settings.accessibility.ToggleFontSizePreferenceFragment;
@@ -61,13 +58,11 @@
 
 import static android.provider.Settings.Secure.CAMERA_GESTURE_DISABLED;
 import static android.provider.Settings.Secure.DOUBLE_TAP_TO_WAKE;
-import static android.provider.Settings.Secure.DOZE_ENABLED;
 import static android.provider.Settings.Secure.WAKE_GESTURE_ENABLED;
 import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
 import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
 import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
 import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 public class DisplaySettings extends SettingsPreferenceFragment implements
@@ -194,7 +189,7 @@
                 @Override
                 public boolean onPreferenceChange(Preference preference, Object newValue) {
                     final boolean locked = Integer.parseInt((String) newValue) != 0;
-                    MetricsLogger.action(getActivity(), MetricsEvent.ACTION_ROTATION_LOCK,
+                    mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_ROTATION_LOCK,
                             locked);
                     RotationPolicy.setRotationLock(activity, locked);
                     return true;
@@ -437,7 +432,7 @@
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         if (preference == mDozePreference) {
-            MetricsLogger.action(getActivity(), MetricsEvent.ACTION_AMBIENT_DISPLAY);
+            mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_AMBIENT_DISPLAY);
         }
         return super.onPreferenceTreeClick(preference);
     }
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 28230a9..5cc4011 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -50,7 +50,6 @@
 import com.android.settingslib.HelpUtils;
 
 import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Base class for Settings fragments, with some helper functions and dialog management.
diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/WifiCallingSettings.java
index 8d8f046..f1a2fef 100644
--- a/src/com/android/settings/WifiCallingSettings.java
+++ b/src/com/android/settings/WifiCallingSettings.java
@@ -39,7 +39,6 @@
 
 import com.android.ims.ImsConfig;
 import com.android.ims.ImsManager;
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.telephony.Phone;
 import com.android.settings.widget.SwitchBar;
@@ -335,9 +334,9 @@
         int wfcMode = ImsManager.getWfcMode(context);
         updateButtonWfcMode(context, wfcEnabled, wfcMode);
         if (wfcEnabled) {
-            MetricsLogger.action(getActivity(), getMetricsCategory(), wfcMode);
+            mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), wfcMode);
         } else {
-            MetricsLogger.action(getActivity(), getMetricsCategory(), -1);
+            mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), -1);
         }
     }
 
@@ -390,7 +389,7 @@
             if (buttonMode != currentMode) {
                 ImsManager.setWfcMode(context, buttonMode);
                 mButtonWfcMode.setSummary(getWfcModeSummary(context, buttonMode));
-                MetricsLogger.action(getActivity(), getMetricsCategory(), buttonMode);
+                mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
             }
         }
         return true;
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 4017068..fc572fb 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -234,7 +234,8 @@
         RestrictedPreference androidBeam = (RestrictedPreference) findPreference(
                 KEY_ANDROID_BEAM_SETTINGS);
 
-        mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
+        mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference,
+                mMetricsFeatureProvider);
         mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
 
         mButtonWfc = (PreferenceScreen) findPreference(KEY_WFC_SETTINGS);
diff --git a/src/com/android/settings/accessibility/FontSizePreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/FontSizePreferenceFragmentForSetupWizard.java
index fec3d37..0b64e96 100644
--- a/src/com/android/settings/accessibility/FontSizePreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/FontSizePreferenceFragmentForSetupWizard.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.accessibility;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 
 public class FontSizePreferenceFragmentForSetupWizard
@@ -31,7 +30,7 @@
     public void onStop() {
         // Log the final choice in value if it's different from the previous value.
         if (mCurrentIndex != mInitialIndex) {
-            MetricsLogger.action(getContext(), MetricsEvent.SUW_ACCESSIBILITY_FONT_SIZE,
+            mMetricsFeatureProvider.action(getContext(), MetricsEvent.SUW_ACCESSIBILITY_FONT_SIZE,
                     mCurrentIndex);
         }
 
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java
index c424c1e..5798319 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java
@@ -41,7 +41,7 @@
     public void onStop() {
         // Log the final choice in value if it's different from the previous value.
         if (mToggleSwitch.isChecked() != mToggleSwitchWasInitiallyChecked) {
-            MetricsLogger.action(getContext(),
+            mMetricsFeatureProvider.action(getContext(),
                     MetricsEvent.SUW_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION,
                     mToggleSwitch.isChecked());
         }
diff --git a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
index 1ccae03..f96219b 100644
--- a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
@@ -18,7 +18,6 @@
 
 import android.os.Bundle;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 
 public class ToggleScreenReaderPreferenceFragmentForSetupWizard
@@ -41,7 +40,7 @@
     public void onStop() {
         // Log the final choice in value if it's different from the previous value.
         if (mToggleSwitch.isChecked() != mToggleSwitchWasInitiallyChecked) {
-            MetricsLogger.action(getContext(),
+            mMetricsFeatureProvider.action(getContext(),
                     MetricsEvent.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER, mToggleSwitch.isChecked());
         }
 
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index d9de56d..18e3ed0 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -24,13 +24,12 @@
 import android.os.Handler;
 import android.os.Message;
 import android.provider.Settings;
-import android.util.Log;
 import android.widget.Switch;
 import android.widget.Toast;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.search.Index;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.WirelessUtils;
@@ -43,9 +42,10 @@
  * preference reflects the current state.
  */
 public final class BluetoothEnabler implements SwitchBar.OnSwitchChangeListener {
+    private final Switch mSwitch;
+    private final SwitchBar mSwitchBar;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
     private Context mContext;
-    private Switch mSwitch;
-    private SwitchBar mSwitchBar;
     private boolean mValidListener;
     private final LocalBluetoothAdapter mLocalAdapter;
     private final IntentFilter mIntentFilter;
@@ -76,8 +76,10 @@
         }
     };
 
-    public BluetoothEnabler(Context context, SwitchBar switchBar) {
+    public BluetoothEnabler(Context context, SwitchBar switchBar,
+            MetricsFeatureProvider metricsFeatureProvider) {
         mContext = context;
+        mMetricsFeatureProvider = metricsFeatureProvider;
         mSwitchBar = switchBar;
         mSwitch = switchBar.getSwitch();
         mValidListener = false;
@@ -187,7 +189,7 @@
             switchView.setChecked(false);
         }
 
-        MetricsLogger.action(mContext, MetricsEvent.ACTION_BLUETOOTH_TOGGLE, isChecked);
+        mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_BLUETOOTH_TOGGLE, isChecked);
 
         if (mLocalAdapter != null) {
             boolean status = mLocalAdapter.setBluetoothEnabled(isChecked);
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 99a2700..3dfcfc7 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -40,7 +40,7 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.TextView;
-import com.android.internal.logging.MetricsLogger;
+
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.LinkifyUtils;
 import com.android.settings.R;
@@ -146,7 +146,7 @@
         final SettingsActivity activity = (SettingsActivity) getActivity();
         mSwitchBar = activity.getSwitchBar();
 
-        mBluetoothEnabler = new BluetoothEnabler(activity, mSwitchBar);
+        mBluetoothEnabler = new BluetoothEnabler(activity, mSwitchBar, mMetricsFeatureProvider);
         mBluetoothEnabler.setupSwitchBar();
     }
 
@@ -248,19 +248,22 @@
         switch (item.getItemId()) {
             case MENU_ID_SCAN:
                 if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON) {
-                    MetricsLogger.action(getActivity(), MetricsEvent.ACTION_BLUETOOTH_SCAN);
+                    mMetricsFeatureProvider.action(getActivity(),
+                            MetricsEvent.ACTION_BLUETOOTH_SCAN);
                     startScanning();
                 }
                 return true;
 
             case MENU_ID_RENAME_DEVICE:
-                MetricsLogger.action(getActivity(), MetricsEvent.ACTION_BLUETOOTH_RENAME);
+                mMetricsFeatureProvider.action(getActivity(),
+                        MetricsEvent.ACTION_BLUETOOTH_RENAME);
                 new BluetoothNameDialogFragment().show(
                         getFragmentManager(), "rename device");
                 return true;
 
             case MENU_ID_SHOW_RECEIVED:
-                MetricsLogger.action(getActivity(), MetricsEvent.ACTION_BLUETOOTH_FILES);
+                mMetricsFeatureProvider.action(getActivity(),
+                        MetricsEvent.ACTION_BLUETOOTH_FILES);
                 Intent intent = new Intent(BTOPP_ACTION_OPEN_RECEIVED_FILES);
                 getActivity().sendBroadcast(intent);
                 return true;
diff --git a/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java b/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
index f0a3fed..dd3c1cc 100644
--- a/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
+++ b/src/com/android/settings/core/instrumentation/InstrumentedDialogFragment.java
@@ -15,14 +15,18 @@
  */
 package com.android.settings.core.instrumentation;
 
+import android.content.Context;
+
 import com.android.settings.DialogCreatable;
 import com.android.settings.core.lifecycle.ObservableDialogFragment;
+import com.android.settings.overlay.FeatureFactory;
 
 public abstract class InstrumentedDialogFragment extends ObservableDialogFragment
         implements Instrumentable {
 
     protected final DialogCreatable mDialogCreatable;
     protected int mDialogId;
+    protected MetricsFeatureProvider mMetricsFeatureProvider;
 
     public InstrumentedDialogFragment() {
         this(null /* parentFragment */, 0 /* dialogId */);
@@ -37,4 +41,10 @@
         mLifecycle.addObserver(new VisibilityLoggerMixin(getMetricsCategory()));
     }
 
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
+    }
 }
diff --git a/src/com/android/settings/dashboard/DashboardContainerFragment.java b/src/com/android/settings/dashboard/DashboardContainerFragment.java
index 2b5e67e..3477d90 100644
--- a/src/com/android/settings/dashboard/DashboardContainerFragment.java
+++ b/src/com/android/settings/dashboard/DashboardContainerFragment.java
@@ -27,11 +27,11 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto;
 import com.android.settings.core.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.overlay.SupportFeatureProvider;
 import com.android.settings.widget.RtlCompatibleViewPager;
@@ -73,7 +73,7 @@
                 getChildFragmentManager(), mViewPager);
         mViewPager.setAdapter(mPagerAdapter);
         mViewPager.addOnPageChangeListener(
-                new TabChangeListener((SettingsActivity) getActivity()));
+                new TabChangeListener((SettingsActivity) getActivity(), mMetricsFeatureProvider));
 
         // check if support tab needs to be selected
         final String selectedTab = getArguments().
@@ -157,9 +157,12 @@
             implements RtlCompatibleViewPager.OnPageChangeListener {
 
         private final SettingsActivity mActivity;
+        private final MetricsFeatureProvider mMetricsFeatureProvider;
 
-        public TabChangeListener(SettingsActivity activity) {
+        public TabChangeListener(SettingsActivity activity,
+                MetricsFeatureProvider metricsFeatureProvider) {
             mActivity = activity;
+            mMetricsFeatureProvider = metricsFeatureProvider;
         }
 
         @Override
@@ -176,12 +179,12 @@
         public void onPageSelected(int position) {
             switch (position) {
                 case INDEX_SUMMARY_FRAGMENT:
-                    MetricsLogger.action(
+                    mMetricsFeatureProvider.action(
                             mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUMMARY);
                     mActivity.setDisplaySearchMenu(true);
                     break;
                 case INDEX_SUPPORT_FRAGMENT:
-                    MetricsLogger.action(
+                    mMetricsFeatureProvider.action(
                             mActivity, MetricsProto.MetricsEvent.ACTION_SELECT_SUPPORT_FRAGMENT);
                     mActivity.setDisplaySearchMenu(false);
                     break;
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 4ca84a1..fb8c959 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -31,12 +31,10 @@
 import com.android.settings.Settings;
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.InstrumentedFragment;
-import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.dashboard.conditional.Condition;
 import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
 import com.android.settings.dashboard.conditional.ConditionManager;
 import com.android.settings.dashboard.conditional.FocusRecyclerView;
-import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.SuggestionParser;
 import com.android.settingslib.drawer.DashboardCategory;
 import com.android.settingslib.drawer.SettingsDrawerActivity;
diff --git a/src/com/android/settings/datausage/CellDataPreference.java b/src/com/android/settings/datausage/CellDataPreference.java
index b6daa4a..aa4001d 100644
--- a/src/com/android/settings/datausage/CellDataPreference.java
+++ b/src/com/android/settings/datausage/CellDataPreference.java
@@ -33,11 +33,12 @@
 import android.util.Log;
 import android.view.View;
 import android.widget.Checkable;
-import com.android.internal.logging.MetricsLogger;
+
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.CustomDialogPreference;
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.overlay.FeatureFactory;
 
 import java.util.List;
 
@@ -110,7 +111,9 @@
 
     @Override
     protected void performClick(View view) {
-        MetricsLogger.action(getContext(), MetricsEvent.ACTION_CELL_DATA_TOGGLE, !mChecked);
+        final Context context = getContext();
+        FeatureFactory.getFactory(context).getMetricsFeatureProvider()
+                .action(context, MetricsEvent.ACTION_CELL_DATA_TOGGLE, !mChecked);
         if (mChecked) {
             final SubscriptionInfo currentSir = mSubscriptionManager.getActiveSubscriptionInfo(
                     mSubId);
diff --git a/src/com/android/settings/datausage/DataSaverBackend.java b/src/com/android/settings/datausage/DataSaverBackend.java
index 977f0a0..3b3ff9c 100644
--- a/src/com/android/settings/datausage/DataSaverBackend.java
+++ b/src/com/android/settings/datausage/DataSaverBackend.java
@@ -19,12 +19,11 @@
 import android.net.NetworkPolicyManager;
 import android.os.Handler;
 import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.util.Log;
 import android.util.SparseIntArray;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
 
 import java.util.ArrayList;
 
@@ -37,6 +36,7 @@
     private static final String TAG = "DataSaverBackend";
 
     private final Context mContext;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
 
     private final Handler mHandler = new Handler();
     private final NetworkPolicyManager mPolicyManager;
@@ -48,6 +48,7 @@
     // TODO: Staticize into only one.
     public DataSaverBackend(Context context) {
         mContext = context;
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
         mPolicyManager = NetworkPolicyManager.from(context);
     }
 
@@ -72,7 +73,8 @@
 
     public void setDataSaverEnabled(boolean enabled) {
         mPolicyManager.setRestrictBackground(enabled);
-        MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_MODE, enabled ? 1 : 0);
+        mMetricsFeatureProvider.action(
+                mContext, MetricsEvent.ACTION_DATA_SAVER_MODE, enabled ? 1 : 0);
     }
 
     public void refreshWhitelist() {
@@ -84,7 +86,8 @@
         mPolicyManager.setUidPolicy(uid, policy);
         mUidPolicies.put(uid, policy);
         if (whitelisted) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_WHITELIST, packageName);
+            mMetricsFeatureProvider.action(
+                    mContext, MetricsEvent.ACTION_DATA_SAVER_WHITELIST, packageName);
         }
     }
 
@@ -122,7 +125,8 @@
         mPolicyManager.setUidPolicy(uid, policy);
         mUidPolicies.put(uid, policy);
         if (blacklisted) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_DATA_SAVER_BLACKLIST, packageName);
+            mMetricsFeatureProvider.action(
+                    mContext, MetricsEvent.ACTION_DATA_SAVER_BLACKLIST, packageName);
         }
     }
 
diff --git a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java
index aa223fa..bfe4a77 100644
--- a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.display;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 
 public class ScreenZoomPreferenceFragmentForSetupWizard
@@ -31,8 +30,8 @@
     public void onStop() {
         // Log the final choice in value if it's different from the previous value.
         if (mCurrentIndex != mInitialIndex) {
-            MetricsLogger.action(getContext(), MetricsEvent.SUW_ACCESSIBILITY_DISPLAY_SIZE,
-                    mCurrentIndex);
+            mMetricsFeatureProvider.action(
+                    getContext(), MetricsEvent.SUW_ACCESSIBILITY_DISPLAY_SIZE, mCurrentIndex);
         }
 
         super.onStop();
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 5bb0856..b044ce3 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -21,7 +21,6 @@
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.app.admin.DevicePolicyManager;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
@@ -40,8 +39,8 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.support.v7.preference.PreferenceGroup;
 import android.support.v7.preference.PreferenceScreen;
 import android.support.v7.preference.PreferenceViewHolder;
@@ -60,16 +59,15 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.ChooseLockGeneric;
 import com.android.settings.ChooseLockSettingsHelper;
-import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settingslib.HelpUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.SubSettings;
 import com.android.settings.Utils;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settingslib.HelpUtils;
 import com.android.settingslib.RestrictedLockUtils;
 
 import java.util.List;
@@ -594,7 +592,7 @@
                                             if (DEBUG) {
                                                 Log.v(TAG, "rename " + name + " to " + newName);
                                             }
-                                            MetricsLogger.action(getContext(),
+                                            mMetricsFeatureProvider.action(getContext(),
                                                     MetricsEvent.ACTION_FINGERPRINT_RENAME,
                                                     mFp.getFingerId());
                                             FingerprintSettingsFragment parent
@@ -639,7 +637,7 @@
 
             private void onDeleteClick(DialogInterface dialog) {
                 if (DEBUG) Log.v(TAG, "Removing fpId=" + mFp.getFingerId());
-                MetricsLogger.action(getContext(), MetricsEvent.ACTION_FINGERPRINT_DELETE,
+                mMetricsFeatureProvider.action(getContext(), MetricsEvent.ACTION_FINGERPRINT_DELETE,
                         mFp.getFingerId());
                 FingerprintSettingsFragment parent
                         = (FingerprintSettingsFragment) getTargetFragment();
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index dbead5a..f897733 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -39,7 +39,6 @@
 import android.support.v7.preference.PreferenceViewHolder;
 import android.view.View;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.utils.ManagedServiceSettings.Config;
@@ -109,7 +108,7 @@
         new ZenRuleNameDialog(mContext, null) {
             @Override
             public void onOk(String ruleName) {
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ADD_RULE_OK);
+                mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ADD_RULE_OK);
                 AutomaticZenRule rule = new AutomaticZenRule(ruleName, ri.serviceComponent,
                         ri.defaultConditionId, NotificationManager.INTERRUPTION_FILTER_PRIORITY,
                         true);
@@ -129,7 +128,8 @@
                         new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
-                        MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_DELETE_RULE_OK);
+                        mMetricsFeatureProvider.action(mContext,
+                                MetricsEvent.ACTION_ZEN_DELETE_RULE_OK);
                         removeZenRule(ruleId);
                     }
                 })
@@ -173,7 +173,7 @@
         p.setOnPreferenceClickListener(new OnPreferenceClickListener() {
             @Override
             public boolean onPreferenceClick(Preference preference) {
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ADD_RULE);
+                mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ADD_RULE);
                 showAddRuleDialog();
                 return true;
             }
diff --git a/src/com/android/settings/notification/ZenModePrioritySettings.java b/src/com/android/settings/notification/ZenModePrioritySettings.java
index 4705d4d..cfac1f5 100644
--- a/src/com/android/settings/notification/ZenModePrioritySettings.java
+++ b/src/com/android/settings/notification/ZenModePrioritySettings.java
@@ -27,7 +27,6 @@
 import android.support.v7.preference.PreferenceScreen;
 import android.util.Log;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.search.Indexable;
@@ -64,7 +63,8 @@
             public boolean onPreferenceChange(Preference preference, Object newValue) {
                 if (mDisableListeners) return true;
                 final boolean val = (Boolean) newValue;
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_REMINDERS, val);
+                mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_REMINDERS,
+                        val);
                 if (DEBUG) Log.d(TAG, "onPrefChange allowReminders=" + val);
                 savePolicy(getNewPriorityCategories(val, Policy.PRIORITY_CATEGORY_REMINDERS),
                         mPolicy.priorityCallSenders, mPolicy.priorityMessageSenders,
@@ -79,7 +79,7 @@
             public boolean onPreferenceChange(Preference preference, Object newValue) {
                 if (mDisableListeners) return true;
                 final boolean val = (Boolean) newValue;
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_EVENTS, val);
+                mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_EVENTS, val);
                 if (DEBUG) Log.d(TAG, "onPrefChange allowEvents=" + val);
                 savePolicy(getNewPriorityCategories(val, Policy.PRIORITY_CATEGORY_EVENTS),
                         mPolicy.priorityCallSenders, mPolicy.priorityMessageSenders,
@@ -98,7 +98,7 @@
                 final boolean allowMessages = val != SOURCE_NONE;
                 final int allowMessagesFrom =
                         val == SOURCE_NONE ? mPolicy.priorityMessageSenders : val;
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_MESSAGES, val);
+                mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_MESSAGES, val);
                 if (DEBUG) Log.d(TAG, "onPrefChange allowMessages=" + allowMessages
                         + " allowMessagesFrom=" + ZenModeConfig.sourceToString(allowMessagesFrom));
                 savePolicy(
@@ -118,7 +118,7 @@
                 final int val = Integer.parseInt((String) newValue);
                 final boolean allowCalls = val != SOURCE_NONE;
                 final int allowCallsFrom = val == SOURCE_NONE ? mPolicy.priorityCallSenders : val;
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_CALLS, val);
+                mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_CALLS, val);
                 if (DEBUG) Log.d(TAG, "onPrefChange allowCalls=" + allowCalls
                         + " allowCallsFrom=" + ZenModeConfig.sourceToString(allowCallsFrom));
                 savePolicy(getNewPriorityCategories(allowCalls, Policy.PRIORITY_CATEGORY_CALLS),
@@ -137,7 +137,8 @@
             public boolean onPreferenceChange(Preference preference, Object newValue) {
                 if (mDisableListeners) return true;
                 final boolean val = (Boolean) newValue;
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_REPEAT_CALLS, val);
+                mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_REPEAT_CALLS,
+                        val);
                 if (DEBUG) Log.d(TAG, "onPrefChange allowRepeatCallers=" + val);
                 int priorityCategories = getNewPriorityCategories(val,
                         NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS);
diff --git a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
index d251580..8ebb4dc 100644
--- a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
+++ b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
@@ -39,7 +39,6 @@
 import android.widget.Switch;
 import android.widget.Toast;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
@@ -163,7 +162,7 @@
         if (mDisableListeners) return;
         final boolean enabled = isChecked;
         if (enabled == mRule.isEnabled()) return;
-        MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ENABLE_RULE, enabled);
+        mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ENABLE_RULE, enabled);
         if (DEBUG) Log.d(TAG, "onSwitchChanged enabled=" + enabled);
         mRule.setEnabled(enabled);
         setZenRule(mId, mRule);
@@ -207,7 +206,7 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         if (DEBUG) Log.d(TAG, "onOptionsItemSelected " + item.getItemId());
         if (item.getItemId() == R.id.delete) {
-            MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_DELETE_RULE);
+            mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_DELETE_RULE);
             showDeleteRuleDialog();
             return true;
         }
@@ -241,7 +240,8 @@
                 .setPositiveButton(R.string.zen_mode_delete_rule_button, new OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
-                        MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_DELETE_RULE_OK);
+                        mMetricsFeatureProvider.action(mContext,
+                                MetricsEvent.ACTION_ZEN_DELETE_RULE_OK);
                         mDeleting = true;
                         removeZenRule(mId);
                     }
diff --git a/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java b/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
index 35f3ab6..016e381 100644
--- a/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
+++ b/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
@@ -18,23 +18,15 @@
 
 import android.app.NotificationManager;
 import android.app.NotificationManager.Policy;
-import android.content.Context;
 import android.os.Bundle;
-import android.provider.SearchIndexableResource;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
 import android.util.Log;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
 import com.android.settings.R;
 
-import java.util.Arrays;
-import java.util.List;
-
 public class ZenModeVisualInterruptionSettings extends ZenModeSettingsBase {
 
     private static final String KEY_SCREEN_OFF = "screenOff";
@@ -64,7 +56,8 @@
             public boolean onPreferenceChange(Preference preference, Object newValue) {
                 if (mDisableListeners) return true;
                 final boolean val = (Boolean) newValue;
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_WHEN_SCREEN_OFF, val);
+                mMetricsFeatureProvider.action(mContext,
+                        MetricsEvent.ACTION_ZEN_ALLOW_WHEN_SCREEN_OFF, val);
                 if (DEBUG) Log.d(TAG, "onPrefChange suppressWhenScreenOff=" + val);
                 savePolicy(getNewSuppressedEffects(val, Policy.SUPPRESSED_EFFECT_SCREEN_OFF));
                 return true;
@@ -77,7 +70,8 @@
             public boolean onPreferenceChange(Preference preference, Object newValue) {
                 if (mDisableListeners) return true;
                 final boolean val = (Boolean) newValue;
-                MetricsLogger.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_WHEN_SCREEN_ON, val);
+                mMetricsFeatureProvider.action(mContext,
+                        MetricsEvent.ACTION_ZEN_ALLOW_WHEN_SCREEN_ON, val);
                 if (DEBUG) Log.d(TAG, "onPrefChange suppressWhenScreenOn=" + val);
                 savePolicy(getNewSuppressedEffects(val, Policy.SUPPRESSED_EFFECT_SCREEN_ON));
                 return true;
diff --git a/src/com/android/settings/support/SupportDisclaimerDialogFragment.java b/src/com/android/settings/support/SupportDisclaimerDialogFragment.java
index dc2b983..2d9dd8b 100644
--- a/src/com/android/settings/support/SupportDisclaimerDialogFragment.java
+++ b/src/com/android/settings/support/SupportDisclaimerDialogFragment.java
@@ -32,7 +32,6 @@
 import android.widget.CheckBox;
 import android.widget.TextView;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
@@ -78,7 +77,7 @@
     @Override
     public void onClick(DialogInterface dialog, int which) {
         if (which == Dialog.BUTTON_NEGATIVE) {
-            MetricsLogger.action(getContext(),
+            mMetricsFeatureProvider.action(getContext(),
                     MetricsProto.MetricsEvent.ACTION_SUPPORT_DISCLAIMER_CANCEL);
             return;
         }
@@ -89,7 +88,8 @@
                 FeatureFactory.getFactory(activity).getSupportFeatureProvider(activity);
         supportFeatureProvider.setShouldShowDisclaimerDialog(getContext(), !doNotShow.isChecked());
         final Bundle bundle = getArguments();
-        MetricsLogger.action(activity, MetricsProto.MetricsEvent.ACTION_SUPPORT_DISCLAIMER_OK);
+        mMetricsFeatureProvider.action(activity,
+                MetricsProto.MetricsEvent.ACTION_SUPPORT_DISCLAIMER_OK);
         supportFeatureProvider.startSupport(getActivity(),
                 bundle.getParcelable(EXTRA_ACCOUNT), bundle.getInt(EXTRA_TYPE));
     }
@@ -97,7 +97,7 @@
     @Override
     public void onCancel(DialogInterface dialog) {
         super.onCancel(dialog);
-        MetricsLogger.action(getContext(),
+        mMetricsFeatureProvider.action(getContext(),
                 MetricsProto.MetricsEvent.ACTION_SUPPORT_DISCLAIMER_CANCEL);
     }
 
diff --git a/src/com/android/settings/support/SupportPhoneDialogFragment.java b/src/com/android/settings/support/SupportPhoneDialogFragment.java
index 4b2a9ce..c15070b 100644
--- a/src/com/android/settings/support/SupportPhoneDialogFragment.java
+++ b/src/com/android/settings/support/SupportPhoneDialogFragment.java
@@ -24,7 +24,6 @@
 import android.view.View;
 import android.widget.TextView;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
@@ -76,7 +75,7 @@
                 .queryIntentActivities(intent, 0)
                 .isEmpty();
         if (canDial) {
-            MetricsLogger.action(getActivity(),
+            mMetricsFeatureProvider.action(getActivity(),
                     MetricsProto.MetricsEvent.ACTION_SUPPORT_DIAL_TOLLED);
             getActivity().startActivity(intent);
         }
diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index 240c062..e998e79 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -34,14 +34,15 @@
 import android.widget.Switch;
 import android.widget.TextView;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.RestrictedLockUtils;
 
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
 import java.util.ArrayList;
 
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
 public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedChangeListener,
         View.OnClickListener {
 
@@ -55,6 +56,7 @@
         void onSwitchChanged(Switch switchView, boolean isChecked);
     }
 
+    private MetricsFeatureProvider mMetricsFeatureProvider;
     private final TextAppearanceSpan mSummarySpan;
 
     private ToggleSwitch mSwitch;
@@ -130,6 +132,8 @@
 
         // Default is hide
         setVisibility(View.GONE);
+
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     public void setMetricsTag(String tag) {
@@ -230,7 +234,7 @@
     @Override
     public void onClick(View v) {
         if (mDisabledByAdmin) {
-            MetricsLogger.count(mContext, mMetricsTag + "/switch_bar|restricted", 1);
+            mMetricsFeatureProvider.count(mContext, mMetricsTag + "/switch_bar|restricted", 1);
             RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, mEnforcedAdmin);
         } else {
             final boolean isChecked = !mSwitch.isChecked();
@@ -248,7 +252,7 @@
     @Override
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if (mLoggingIntialized) {
-            MetricsLogger.count(mContext, mMetricsTag + "/switch_bar|" + isChecked, 1);
+            mMetricsFeatureProvider.count(mContext, mMetricsTag + "/switch_bar|" + isChecked, 1);
         }
         mLoggingIntialized = true;
         propagateChecked(isChecked);
diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java
index f064050..4a02197 100644
--- a/src/com/android/settings/wifi/WifiEnabler.java
+++ b/src/com/android/settings/wifi/WifiEnabler.java
@@ -32,9 +32,9 @@
 import android.widget.Switch;
 import android.widget.Toast;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.search.Index;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.RestrictedLockUtils;
@@ -44,12 +44,16 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 
 public class WifiEnabler implements SwitchBar.OnSwitchChangeListener  {
+
+    private final SwitchBar mSwitchBar;
+    private final WifiManager mWifiManager;
+    private final MetricsFeatureProvider mMetricsFeatureProvider;
+
     private Context mContext;
-    private SwitchBar mSwitchBar;
     private boolean mListeningToOnSwitchChange = false;
     private AtomicBoolean mConnected = new AtomicBoolean(false);
 
-    private final WifiManager mWifiManager;
+
     private boolean mStateMachineEvent;
     private final IntentFilter mIntentFilter;
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@@ -89,10 +93,11 @@
         }
     };
 
-    public WifiEnabler(Context context, SwitchBar switchBar) {
+    public WifiEnabler(Context context, SwitchBar switchBar,
+            MetricsFeatureProvider metricsFeatureProvider) {
         mContext = context;
         mSwitchBar = switchBar;
-
+        mMetricsFeatureProvider = metricsFeatureProvider;
         mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
 
         mIntentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
@@ -226,7 +231,7 @@
         if (mayDisableTethering(isChecked)) {
             mWifiManager.setWifiApEnabled(null, false);
         }
-        MetricsLogger.action(mContext,
+        mMetricsFeatureProvider.action(mContext,
                 isChecked ? MetricsEvent.ACTION_WIFI_ON : MetricsEvent.ACTION_WIFI_OFF);
         if (!mWifiManager.setWifiEnabled(isChecked)) {
             // Error
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 782ff13..dacd481 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -57,7 +57,6 @@
 import android.widget.TextView.BufferType;
 import android.widget.Toast;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.LinkifyUtils;
 import com.android.settings.R;
@@ -308,7 +307,7 @@
      */
     /* package */ WifiEnabler createWifiEnabler() {
         final SettingsActivity activity = (SettingsActivity) getActivity();
-        return new WifiEnabler(activity, activity.getSwitchBar());
+        return new WifiEnabler(activity, activity.getSwitchBar(), mMetricsFeatureProvider);
     }
 
     @Override
@@ -411,7 +410,7 @@
                 showDialog(WPS_PIN_DIALOG_ID);
                 return true;
             case MENU_ID_SCAN:
-                MetricsLogger.action(getActivity(), MetricsEvent.ACTION_WIFI_FORCE_SCAN);
+                mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_WIFI_FORCE_SCAN);
                 mWifiTracker.forceScan();
                 return true;
             case MENU_ID_ADVANCED:
@@ -847,7 +846,7 @@
     }
 
     /* package */ void forget() {
-        MetricsLogger.action(getActivity(), MetricsEvent.ACTION_WIFI_FORGET);
+        mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_WIFI_FORGET);
         if (!mSelectedAccessPoint.isSaved()) {
             if (mSelectedAccessPoint.getNetworkInfo() != null &&
                     mSelectedAccessPoint.getNetworkInfo().getState() != State.DISCONNECTED) {
@@ -870,12 +869,12 @@
     }
 
     protected void connect(final WifiConfiguration config) {
-        MetricsLogger.action(getActivity(), MetricsEvent.ACTION_WIFI_CONNECT);
+        mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_WIFI_CONNECT);
         mWifiManager.connect(config, mConnectListener);
     }
 
     protected void connect(final int networkId) {
-        MetricsLogger.action(getActivity(), MetricsEvent.ACTION_WIFI_CONNECT);
+        mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_WIFI_CONNECT);
         mWifiManager.connect(networkId, mConnectListener);
     }
 
@@ -883,7 +882,7 @@
      * Called when "add network" button is pressed.
      */
     /* package */ void onAddNetworkPressed() {
-        MetricsLogger.action(getActivity(), MetricsEvent.ACTION_WIFI_ADD_NETWORK);
+        mMetricsFeatureProvider.action(getActivity(), MetricsEvent.ACTION_WIFI_ADD_NETWORK);
         // No exact access point is selected.
         mSelectedAccessPoint = null;
         showDialog(null, WifiConfigUiBase.MODE_CONNECT);