diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 41ec0fa..8f3f74e 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -400,6 +400,7 @@
         <!-- hiding for now.
         <Preference
                 android:key="background_check"
+                android:fragment="com.android.settings.applications.BackgroundCheckSummary"
                 android:title="@string/background_check_pref" />
         -->
 
@@ -410,7 +411,8 @@
 
         <Preference
                 android:key="inactive_apps"
-                android:title="@string/inactive_apps_title" />
+                android:title="@string/inactive_apps_title"
+                android:fragment="com.android.settings.fuelgauge.InactiveApps"/>
 
         <SwitchPreference
             android:key="force_allow_on_external"
diff --git a/src/com/android/settings/AppHeader.java b/src/com/android/settings/AppHeader.java
index 2b3e6c4..f5700b5 100644
--- a/src/com/android/settings/AppHeader.java
+++ b/src/com/android/settings/AppHeader.java
@@ -28,6 +28,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.applications.InstalledAppDetails;
 
@@ -88,7 +89,7 @@
                     if (includeAppInfo) {
                         AppInfoBase.startAppInfoFragment(InstalledAppDetails.class,
                                 R.string.application_info_label, pkgName, uid, activity,
-                                INSTALLED_APP_DETAILS);
+                                INSTALLED_APP_DETAILS, MetricsProto.MetricsEvent.VIEW_UNKNOWN);
                     } else {
                         activity.finish();
                     }
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index b90466e..f8870ca 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -567,7 +567,8 @@
     void addDashboardCategoryPreferences() {
         final PreferenceScreen screen = getPreferenceScreen();
         final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
-                getActivity(), getPrefContext(), CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
+                getActivity(), getPrefContext(), getMetricsCategory(),
+                CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
         if (tilePrefs != null) {
             for (Preference preference : tilePrefs) {
                 screen.addPreference(preference);
@@ -2469,10 +2470,6 @@
             writeUSBAudioOptions();
         } else if (preference == mForceResizable) {
             writeForceResizableOptions();
-        } else if (INACTIVE_APPS_KEY.equals(preference.getKey())) {
-            startInactiveAppsFragment();
-        } else if (BACKGROUND_CHECK_KEY.equals(preference.getKey())) {
-            startBackgroundCheckFragment();
         } else if (preference == mBluetoothDisableAbsVolume) {
             writeBluetoothDisableAbsVolumeOptions();
         } else if (preference == mWebViewMultiprocess) {
@@ -2486,18 +2483,6 @@
         return false;
     }
 
-    private void startInactiveAppsFragment() {
-        ((SettingsActivity) getActivity()).startPreferencePanel(
-                InactiveApps.class.getName(),
-                null, R.string.inactive_apps_title, null, null, 0);
-    }
-
-    private void startBackgroundCheckFragment() {
-        ((SettingsActivity) getActivity()).startPreferencePanel(
-                BackgroundCheckSummary.class.getName(),
-                null, R.string.background_check_title, null, null, 0);
-    }
-
     private boolean showKeyguardConfirmation(Resources resources, int requestCode) {
         return new ChooseLockSettingsHelper(getActivity(), this).launchConfirmationActivity(
                 requestCode, resources.getString(R.string.oem_unlock_enable));
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 5fd4f46..fa9410d 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -118,7 +118,8 @@
     private void showFinalConfirmation() {
         Bundle args = new Bundle();
         args.putBoolean(ERASE_EXTERNAL_EXTRA, mExternalStorage.isChecked());
-        ((SettingsActivity) getActivity()).startPreferencePanel(MasterClearConfirm.class.getName(),
+        ((SettingsActivity) getActivity()).startPreferencePanel(
+                this, MasterClearConfirm.class.getName(),
                 args, R.string.master_clear_confirm_title, null, null, 0);
     }
 
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index 8ac11cd..45490ab 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -98,7 +98,8 @@
             SubscriptionInfo subscription = mSubscriptions.get(selectedIndex);
             args.putInt(PhoneConstants.SUBSCRIPTION_KEY, subscription.getSubscriptionId());
         }
-        ((SettingsActivity) getActivity()).startPreferencePanel(ResetNetworkConfirm.class.getName(),
+        ((SettingsActivity) getActivity()).startPreferencePanel(
+                this, ResetNetworkConfirm.class.getName(),
                 args, R.string.reset_network_confirm_title, null, null, 0);
     }
 
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index b66f2f5..04b2413 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -414,7 +414,8 @@
                 (PreferenceGroup) root.findPreference(KEY_SECURITY_STATUS);
         if (mDashboardFeatureProvider.isEnabled()) {
             final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
-                    getActivity(), getPrefContext(), CategoryKey.CATEGORY_SECURITY);
+                    getActivity(), getPrefContext(), getMetricsCategory(),
+                    CategoryKey.CATEGORY_SECURITY);
             int numSecurityStatusPrefs = 0;
             if (tilePrefs != null && !tilePrefs.isEmpty()) {
                 for (Preference preference : tilePrefs) {
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 9168ead..0435d03 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -56,6 +56,7 @@
 import com.android.settings.Settings.WifiSettingsActivity;
 import com.android.settings.backup.BackupSettingsActivity;
 import com.android.settings.core.gateway.SettingsGateway;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.core.instrumentation.SharedPreferencesLogger;
 import com.android.settings.dashboard.DashboardContainerFragment;
 import com.android.settings.dashboard.DashboardFeatureProvider;
@@ -101,6 +102,11 @@
     public static final String EXTRA_SHOW_FRAGMENT = ":settings:show_fragment";
 
     /**
+     * The metrics category constant for logging source when a setting fragment is opened.
+     */
+    public static final String EXTRA_SOURCE_METRICS_CATEGORY = ":settings:source_metrics";
+
+    /**
      * When starting this activity and using {@link #EXTRA_SHOW_FRAGMENT},
      * this extra can also be specified to supply a Bundle of arguments to pass
      * to that fragment when it is instantiated during the initial creation
@@ -220,6 +226,7 @@
     private boolean mSearchMenuItemExpanded = false;
     private SearchResultsSummary mSearchResultsFragment;
     private SearchFeatureProvider mSearchFeatureProvider;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     // Categories
     private ArrayList<DashboardCategory> mCategories = new ArrayList<>();
@@ -239,7 +246,7 @@
 
     @Override
     public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) {
-        startPreferencePanel(pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
+        startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
                 null, 0);
         return true;
     }
@@ -350,6 +357,7 @@
 
         mDashboardFeatureProvider = factory.getDashboardFeatureProvider(this);
         mSearchFeatureProvider = factory.getSearchFeatureProvider();
+        mMetricsFeatureProvider = factory.getMetricsFeatureProvider();
 
         // Should happen before any call to getIntent()
         getMetaData();
@@ -748,8 +756,8 @@
      * @param resultRequestCode If resultTo is non-null, this is the caller's
      * request code to be received with the result.
      */
-    public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
-            CharSequence titleText, Fragment resultTo, int resultRequestCode) {
+    public void startPreferencePanel(Fragment caller, String fragmentClass, Bundle args,
+            int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode) {
         String title = null;
         if (titleRes < 0) {
             if (titleText != null) {
@@ -760,7 +768,7 @@
             }
         }
         Utils.startWithFragment(this, fragmentClass, args, resultTo, resultRequestCode,
-                titleRes, title, mIsShortcut);
+                titleRes, title, mIsShortcut, mMetricsFeatureProvider.getMetricsCategory(caller));
     }
 
     /**
@@ -775,8 +783,8 @@
      * @param titleText Optional text of the title of this fragment.
      * @param userHandle The user for which the panel has to be started.
      */
-    public void startPreferencePanelAsUser(String fragmentClass, Bundle args, int titleRes,
-            CharSequence titleText, UserHandle userHandle) {
+    public void startPreferencePanelAsUser(Fragment caller, String fragmentClass,
+            Bundle args, int titleRes, CharSequence titleText, UserHandle userHandle) {
         // This is a workaround.
         //
         // Calling startWithFragmentAsUser() without specifying FLAG_ACTIVITY_NEW_TASK to the intent
@@ -788,7 +796,7 @@
         // another check here to call startPreferencePanel() instead of startWithFragmentAsUser()
         // when we're calling it as the same user.
         if (userHandle.getIdentifier() == UserHandle.myUserId()) {
-            startPreferencePanel(fragmentClass, args, titleRes, titleText, null, 0);
+            startPreferencePanel(caller, fragmentClass, args, titleRes, titleText, null, 0);
         } else {
             String title = null;
             if (titleRes < 0) {
@@ -799,8 +807,8 @@
                     title = "";
                 }
             }
-            Utils.startWithFragmentAsUser(this, fragmentClass, args,
-                    titleRes, title, mIsShortcut, userHandle);
+            Utils.startWithFragmentAsUser(this, fragmentClass, args, titleRes, title,
+                    mIsShortcut, mMetricsFeatureProvider.getMetricsCategory(caller), userHandle);
         }
     }
 
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 3bad5f3..70743e2 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -732,7 +732,8 @@
         final Activity activity = getActivity();
         if (activity instanceof SettingsActivity) {
             SettingsActivity sa = (SettingsActivity) activity;
-            sa.startPreferencePanel(fragmentClass, extras, titleRes, null, caller, requestCode);
+            sa.startPreferencePanel(
+                    caller, fragmentClass, extras, titleRes, null, caller, requestCode);
             return true;
         } else {
             Log.w(TAG,
diff --git a/src/com/android/settings/UserDictionarySettings.java b/src/com/android/settings/UserDictionarySettings.java
index 313e737..5571c2d 100644
--- a/src/com/android/settings/UserDictionarySettings.java
+++ b/src/com/android/settings/UserDictionarySettings.java
@@ -215,7 +215,7 @@
         args.putString(UserDictionaryAddWordContents.EXTRA_SHORTCUT, editingShortcut);
         args.putString(UserDictionaryAddWordContents.EXTRA_LOCALE, mLocale);
         SettingsActivity sa = (SettingsActivity) getActivity();
-        sa.startPreferencePanel(
+        sa.startPreferencePanel(this,
                 com.android.settings.inputmethod.UserDictionaryAddWordFragment.class.getName(),
                 args, R.string.user_dict_settings_add_dialog_title, null, null, 0);
     }
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index b1c3ab3..0ac5c6a 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -252,7 +252,6 @@
     /**
      * Returns the default link's IP addresses, if any, taking into account IPv4 and IPv6 style
      * addresses.
-     * @param context the application context
      * @return the formatted and newline-separated IP addresses, or null if none.
      */
     public static String getDefaultIpAddresses(ConnectivityManager cm) {
@@ -496,12 +495,14 @@
      * @param titleResId resource id for the String to display for the title of this set
      *                   of preferences.
      * @param title String to display for the title of this set of preferences.
+     * @param metricsCategory The current metricsCategory for logging source when fragment starts
      */
     public static void startWithFragment(Context context, String fragmentName, Bundle args,
             Fragment resultTo, int resultRequestCode, int titleResId,
-            CharSequence title) {
+            CharSequence title, int metricsCategory) {
         startWithFragment(context, fragmentName, args, resultTo, resultRequestCode,
-                null /* titleResPackageName */, titleResId, title, false /* not a shortcut */);
+                null /* titleResPackageName */, titleResId, title, false /* not a shortcut */,
+                metricsCategory);
     }
 
     /**
@@ -519,19 +520,21 @@
      * @param titleResId resource id for the String to display for the title of this set
      *                   of preferences.
      * @param title String to display for the title of this set of preferences.
+     * @param metricsCategory The current metricsCategory for logging source when fragment starts
      */
     public static void startWithFragment(Context context, String fragmentName, Bundle args,
             Fragment resultTo, int resultRequestCode, String titleResPackageName, int titleResId,
-            CharSequence title) {
+            CharSequence title, int metricsCategory) {
         startWithFragment(context, fragmentName, args, resultTo, resultRequestCode,
-                titleResPackageName, titleResId, title, false /* not a shortcut */);
+                titleResPackageName, titleResId, title, false /* not a shortcut */,
+                metricsCategory);
     }
 
     public static void startWithFragment(Context context, String fragmentName, Bundle args,
             Fragment resultTo, int resultRequestCode, int titleResId,
-            CharSequence title, boolean isShortcut) {
+            CharSequence title, boolean isShortcut, int metricsCategory) {
         Intent intent = onBuildStartFragmentIntent(context, fragmentName, args,
-                null /* titleResPackageName */, titleResId, title, isShortcut);
+                null /* titleResPackageName */, titleResId, title, isShortcut, metricsCategory);
         if (resultTo == null) {
             context.startActivity(intent);
         } else {
@@ -541,9 +544,9 @@
 
     public static void startWithFragment(Context context, String fragmentName, Bundle args,
             Fragment resultTo, int resultRequestCode, String titleResPackageName, int titleResId,
-            CharSequence title, boolean isShortcut) {
+            CharSequence title, boolean isShortcut, int metricsCategory) {
         Intent intent = onBuildStartFragmentIntent(context, fragmentName, args, titleResPackageName,
-                titleResId, title, isShortcut);
+                titleResId, title, isShortcut, metricsCategory);
         if (resultTo == null) {
             context.startActivity(intent);
         } else {
@@ -552,30 +555,15 @@
     }
 
     public static void startWithFragmentAsUser(Context context, String fragmentName, Bundle args,
-            int titleResId, CharSequence title, boolean isShortcut,
+            int titleResId, CharSequence title, boolean isShortcut, int metricsCategory,
             UserHandle userHandle) {
         // workaround to avoid crash in b/17523189
         if (userHandle.getIdentifier() == UserHandle.myUserId()) {
-            startWithFragment(context, fragmentName, args, null, 0, titleResId, title, isShortcut);
+            startWithFragment(context, fragmentName, args, null, 0, titleResId, title, isShortcut,
+                    metricsCategory);
         } else {
             Intent intent = onBuildStartFragmentIntent(context, fragmentName, args,
-                    null /* titleResPackageName */, titleResId, title, isShortcut);
-            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
-            context.startActivityAsUser(intent, userHandle);
-        }
-    }
-
-    public static void startWithFragmentAsUser(Context context, String fragmentName, Bundle args,
-            String titleResPackageName, int titleResId, CharSequence title, boolean isShortcut,
-            UserHandle userHandle) {
-        // workaround to avoid crash in b/17523189
-        if (userHandle.getIdentifier() == UserHandle.myUserId()) {
-            startWithFragment(context, fragmentName, args, null, 0, titleResPackageName, titleResId,
-                    title, isShortcut);
-        } else {
-            Intent intent = onBuildStartFragmentIntent(context, fragmentName, args,
-                    titleResPackageName, titleResId, title, isShortcut);
+                    null /* titleResPackageName */, titleResId, title, isShortcut, metricsCategory);
             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
             context.startActivityAsUser(intent, userHandle);
@@ -595,12 +583,13 @@
      * @param titleResId Optional title resource id to show for this item.
      * @param title Optional title to show for this item.
      * @param isShortcut  tell if this is a Launcher Shortcut or not
+     * @param sourceMetricsCategory The context (source) from which an action is performed
      * @return Returns an Intent that can be launched to display the given
      * fragment.
      */
     public static Intent onBuildStartFragmentIntent(Context context, String fragmentName,
             Bundle args, String titleResPackageName, int titleResId, CharSequence title,
-            boolean isShortcut) {
+            boolean isShortcut, int sourceMetricsCategory) {
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.setClass(context, SubSettings.class);
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentName);
@@ -610,6 +599,7 @@
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, titleResId);
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, title);
         intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, isShortcut);
+        intent.putExtra(SettingsActivity.EXTRA_SOURCE_METRICS_CATEGORY, sourceMetricsCategory);
         return intent;
     }
 
@@ -1197,15 +1187,6 @@
         return null;
     }
 
-    public static boolean isPackageEnabled(Context context, String packageName) {
-        try {
-            return context.getPackageManager().getApplicationInfo(packageName, 0).enabled;
-        } catch (NameNotFoundException e) {
-            // Thrown by PackageManager.getApplicationInfo if the package does not exist
-        }
-        return false;
-    }
-
     public static boolean isPackageDirectBootAware(Context context, String packageName) {
         try {
             final ApplicationInfo ai = context.getPackageManager().getApplicationInfo(
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index 0ccf6d8..cf72383 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -85,8 +85,8 @@
     }
 
     @Override
-    public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
-            CharSequence titleText, Fragment resultTo, int resultRequestCode) {
+    public void startPreferencePanel(Fragment caller, String fragmentClass, Bundle args,
+            int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode) {
         // Set the title.
         if (!TextUtils.isEmpty(titleText)) {
             setTitle(titleText);
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index c08c924..635f440 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -45,6 +45,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceController;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.core.lifecycle.LifecycleObserver;
 import com.android.settings.core.lifecycle.events.OnPause;
 import com.android.settings.core.lifecycle.events.OnResume;
@@ -89,6 +90,7 @@
     private int mAccountProfileOrder = ORDER_ACCOUNT_PROFILES;
     private AccountRestrictionHelper mHelper;
     private DashboardFeatureProvider mDashboardFeatureProvider;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     /**
      * Holds data related to the accounts belonging to one profile.
@@ -135,8 +137,9 @@
         if (mAuthorities != null) {
             mAuthoritiesCount = mAuthorities.length;
         }
-        mDashboardFeatureProvider =
-            FeatureFactory.getFactory(mContext).getDashboardFeatureProvider(mContext);
+        final FeatureFactory featureFactory = FeatureFactory.getFactory(mContext);
+        mDashboardFeatureProvider = featureFactory.getDashboardFeatureProvider(mContext);
+        mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
         mIAEnabled = mDashboardFeatureProvider.isEnabled();
         mHelper = helper;
     }
@@ -235,7 +238,7 @@
             if (preference == profileData.managedProfilePreference) {
                 Bundle arguments = new Bundle();
                 arguments.putParcelable(Intent.EXTRA_USER, profileData.userInfo.getUserHandle());
-                ((SettingsActivity) mParent.getActivity()).startPreferencePanel(
+                ((SettingsActivity) mParent.getActivity()).startPreferencePanel(mParent,
                         ManagedProfileSettings.class.getName(), arguments,
                         R.string.managed_profile_settings_title, null, null, 0);
                 return true;
@@ -446,7 +449,7 @@
             UserHandle userHandle) {
         final String[] accountTypes = helper.getEnabledAccountTypes();
         final ArrayList<AccountTypePreference> accountTypePreferences =
-                new ArrayList<AccountTypePreference>(accountTypes.length);
+                new ArrayList<>(accountTypes.length);
 
         for (int i = 0; i < accountTypes.length; i++) {
             final String accountType = accountTypes[i];
@@ -489,7 +492,8 @@
                         titleResId);
                     fragmentArguments.putParcelable(EXTRA_USER, userHandle);
                     accountTypePreferences.add(new AccountTypePreference(
-                        prefContext, account.name, titleResPackageName, titleResId, label,
+                        prefContext, mMetricsFeatureProvider.getMetricsCategory(mParent),
+                            account.name, titleResPackageName, titleResId, label,
                         AccountDetailDashboardFragment.class.getName(), fragmentArguments, icon));
                 }
             } else if (skipToAccount) {
@@ -499,8 +503,9 @@
                 fragmentArguments.putParcelable(EXTRA_USER, userHandle);
 
                 accountTypePreferences.add(new AccountTypePreference(
-                        prefContext, label, titleResPackageName,
-                    titleResId, AccountSyncSettings.class.getName(), fragmentArguments, icon));
+                        prefContext, mMetricsFeatureProvider.getMetricsCategory(mParent),
+                        label, titleResPackageName, titleResId, AccountSyncSettings.class.getName(),
+                        fragmentArguments, icon));
             } else {
                 final Bundle fragmentArguments = new Bundle();
                 fragmentArguments.putString(ManageAccountsSettings.KEY_ACCOUNT_TYPE, accountType);
@@ -509,9 +514,9 @@
                 fragmentArguments.putParcelable(EXTRA_USER, userHandle);
 
                 accountTypePreferences.add(new AccountTypePreference(
-
-                        prefContext, label, titleResPackageName,
-                    titleResId, ManageAccountsSettings.class.getName(), fragmentArguments, icon));
+                        prefContext, mMetricsFeatureProvider.getMetricsCategory(mParent), label,
+                        titleResPackageName, titleResId, ManageAccountsSettings.class.getName(),
+                        fragmentArguments, icon));
             }
             helper.preloadDrawableForType(mContext, accountType);
         }
diff --git a/src/com/android/settings/accounts/AccountSyncPreferenceController.java b/src/com/android/settings/accounts/AccountSyncPreferenceController.java
index 76750b3..57d317b 100644
--- a/src/com/android/settings/accounts/AccountSyncPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountSyncPreferenceController.java
@@ -24,6 +24,7 @@
 import android.os.UserHandle;
 import android.support.v7.preference.Preference;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.Utils;
 import com.android.settings.core.PreferenceController;
 
@@ -53,7 +54,7 @@
         args.putParcelable(AccountSyncSettings.ACCOUNT_KEY, mAccount);
         args.putParcelable(EXTRA_USER, mUserHandle);
         Utils.startWithFragment(mContext, AccountSyncSettings.class.getName(), args, null, 0, -1,
-            mAccount.name);
+            mAccount.name, MetricsProto.MetricsEvent.ACCOUNT);
         return true;
     }
 
diff --git a/src/com/android/settings/accounts/AccountTypePreference.java b/src/com/android/settings/accounts/AccountTypePreference.java
index bf3b9f5..0abfb50 100644
--- a/src/com/android/settings/accounts/AccountTypePreference.java
+++ b/src/com/android/settings/accounts/AccountTypePreference.java
@@ -65,15 +65,18 @@
      */
     private final Bundle mFragmentArguments;
 
-    public AccountTypePreference(Context context, CharSequence title, String titleResPackageName,
-        int titleResId, String fragment, Bundle fragmentArguments, Drawable icon) {
-        this(context, title, titleResPackageName, titleResId, null, fragment, fragmentArguments,
-            icon);
+    private final int mMetricsCategory;
+
+    public AccountTypePreference(Context context, int metricsCategory, CharSequence title,
+            String titleResPackageName, int titleResId, String fragment, Bundle fragmentArguments,
+            Drawable icon) {
+        this(context, metricsCategory, title, titleResPackageName, titleResId, null, fragment,
+                fragmentArguments, icon);
     }
 
-    public AccountTypePreference(Context context, CharSequence title, String titleResPackageName,
-        int titleResId, CharSequence summary, String fragment, Bundle fragmentArguments,
-        Drawable icon) {
+    public AccountTypePreference(Context context, int metricsCategory, CharSequence title,
+            String titleResPackageName, int titleResId, CharSequence summary, String fragment,
+            Bundle fragmentArguments, Drawable icon) {
         super(context);
         mTitle = title;
         mTitleResPackageName = titleResPackageName;
@@ -81,6 +84,7 @@
         mSummary = summary;
         mFragment = fragment;
         mFragmentArguments = fragmentArguments;
+        mMetricsCategory = metricsCategory;
         setWidgetLayoutResource(R.layout.account_type_preference);
 
         setTitle(title);
@@ -105,7 +109,7 @@
             }
             Utils.startWithFragment(getContext(), mFragment, mFragmentArguments,
                 null /* resultTo */, 0 /* resultRequestCode */, mTitleResPackageName,
-                mTitleResId, null /* title */);
+                mTitleResId, null /* title */, mMetricsCategory);
             return true;
         }
         return false;
diff --git a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
index 87f9c77..87aec14 100644
--- a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
+++ b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java
@@ -229,7 +229,7 @@
 
         @Override
         public boolean onPreferenceClick(Preference preference) {
-            ((SettingsActivity) mFragment.getActivity()).startPreferencePanel(
+            ((SettingsActivity) mFragment.getActivity()).startPreferencePanel(mFragment,
                 mClass, null, mTitleRes, null, null, 0);
             // Hack: announce that the Google account preferences page is launching the location
             // settings
diff --git a/src/com/android/settings/accounts/ManageAccountsSettings.java b/src/com/android/settings/accounts/ManageAccountsSettings.java
index 7c5ee00..f93fe09 100644
--- a/src/com/android/settings/accounts/ManageAccountsSettings.java
+++ b/src/com/android/settings/accounts/ManageAccountsSettings.java
@@ -158,7 +158,7 @@
         Bundle args = new Bundle();
         args.putParcelable(AccountSyncSettings.ACCOUNT_KEY, acctPref.getAccount());
         args.putParcelable(EXTRA_USER, mUserHandle);
-        ((SettingsActivity) getActivity()).startPreferencePanel(
+        ((SettingsActivity) getActivity()).startPreferencePanel(this,
                 AccountSyncSettings.class.getCanonicalName(), args,
                 R.string.account_sync_settings_title, acctPref.getAccount().name,
                 this, REQUEST_SHOW_SYNC_SETTINGS);
diff --git a/src/com/android/settings/applications/AppHeaderController.java b/src/com/android/settings/applications/AppHeaderController.java
index daafc18..01d5fc7 100644
--- a/src/com/android/settings/applications/AppHeaderController.java
+++ b/src/com/android/settings/applications/AppHeaderController.java
@@ -38,6 +38,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.applications.instantapps.InstantAppDetails;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.applications.ApplicationsState;
 
 import java.lang.annotation.Retention;
@@ -65,6 +66,7 @@
 
     private final Context mContext;
     private final Fragment mFragment;
+    private final int mMetricsCategory;
     private final View mAppHeader;
 
     private Drawable mIcon;
@@ -84,6 +86,8 @@
     public AppHeaderController(Context context, Fragment fragment, View appHeader) {
         mContext = context;
         mFragment = fragment;
+        mMetricsCategory = FeatureFactory.getFactory(context).getMetricsFeatureProvider()
+                .getMetricsCategory(fragment);
         if (appHeader != null) {
             mAppHeader = appHeader;
         } else {
@@ -266,7 +270,7 @@
                     button.setImageResource(com.android.settings.R.drawable.ic_info);
                     button.setOnClickListener(v -> AppInfoBase.startAppInfoFragment(
                             InstalledAppDetails.class, R.string.application_info_label,
-                            mPackageName, mUid, mFragment, 0));
+                            mPackageName, mUid, mFragment, 0 /* request */, mMetricsCategory));
                     button.setVisibility(View.VISIBLE);
                 }
                 return;
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index 015347d..b86f2f4 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -215,18 +215,19 @@
     }
 
     public static void startAppInfoFragment(Class<?> fragment, int titleRes,
-            String pkg, int uid, Fragment source, int request) {
-        startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request);
+            String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
+        startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request,
+                sourceMetricsCategory);
     }
 
     public static void startAppInfoFragment(Class<?> fragment, int titleRes,
-            String pkg, int uid, Activity source, int request) {
+            String pkg, int uid, Activity source, int request, int sourceMetricsCategory) {
         Bundle args = new Bundle();
         args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
         args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);
 
         Intent intent = Utils.onBuildStartFragmentIntent(source, fragment.getName(),
-                args, null, titleRes, null, false);
+                args, null, titleRes, null, false, sourceMetricsCategory);
         source.startActivityForResultAsUser(intent, request,
                 new UserHandle(UserHandle.getUserId(uid)));
     }
diff --git a/src/com/android/settings/applications/AppOpsCategory.java b/src/com/android/settings/applications/AppOpsCategory.java
index 4b54891..e27e05b 100644
--- a/src/com/android/settings/applications/AppOpsCategory.java
+++ b/src/com/android/settings/applications/AppOpsCategory.java
@@ -358,10 +358,10 @@
         args.putString(AppOpsDetails.ARG_PACKAGE_NAME, mCurrentPkgName);
 
         SettingsActivity sa = (SettingsActivity) getActivity();
-        sa.startPreferencePanel(AppOpsDetails.class.getName(), args,
+        sa.startPreferencePanel(this, AppOpsDetails.class.getName(), args,
                 R.string.app_ops_settings, null, this, RESULT_APP_DETAILS);
     }
-    
+
     @Override public void onListItemClick(ListView l, View v, int position, long id) {
         AppOpEntry entry = mAdapter.getItem(position);
         if (entry != null) {
diff --git a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
index 2d2bce0..31d26ed 100644
--- a/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
+++ b/src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
@@ -19,11 +19,8 @@
 import android.app.Fragment;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.ActivityInfo;
 import android.content.pm.ComponentInfo;
-import android.content.pm.ProviderInfo;
 import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
 import android.content.pm.UserInfo;
 import android.os.RemoteException;
 import android.os.UserHandle;
diff --git a/src/com/android/settings/applications/ConvertToFbe.java b/src/com/android/settings/applications/ConvertToFbe.java
index da5f90d..be3c371 100644
--- a/src/com/android/settings/applications/ConvertToFbe.java
+++ b/src/com/android/settings/applications/ConvertToFbe.java
@@ -79,7 +79,7 @@
 
     private void convert() {
         SettingsActivity sa = (SettingsActivity) getActivity();
-        sa.startPreferencePanel(ConfirmConvertToFbe.class.getName(), null,
+        sa.startPreferencePanel(this, ConfirmConvertToFbe.class.getName(), null,
                                 R.string.convert_to_file_encryption, null, null, 0);
     }
 
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 73164e4..4d27bb6 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -811,7 +811,8 @@
         args.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, true);
 
         SettingsActivity sa = (SettingsActivity) caller.getActivity();
-        sa.startPreferencePanel(fragment.getName(), args, -1, title, caller, SUB_INFO_FRAGMENT);
+        sa.startPreferencePanel(caller, fragment.getName(), args, -1, title, caller,
+                SUB_INFO_FRAGMENT);
     }
 
     /*
@@ -896,7 +897,7 @@
             startAppInfoFragment(AppDataUsage.class, getString(R.string.app_data_usage));
         } else if (preference == mBatteryPreference) {
             BatteryEntry entry = new BatteryEntry(getActivity(), null, mUserManager, mSipper);
-            PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
+            PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), this,
                     mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, true, false);
         } else {
             return false;
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index d5f7f78..22f1627 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -17,7 +17,6 @@
 package com.android.settings.applications;
 
 import android.app.Activity;
-import android.app.usage.StorageStatsManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -33,7 +32,6 @@
 import android.os.UserManager;
 import android.preference.PreferenceFrameLayout;
 import android.text.TextUtils;
-import android.text.format.Formatter;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -564,7 +562,7 @@
 
     private void startAppInfoFragment(Class<?> fragment, int titleRes) {
         AppInfoBase.startAppInfoFragment(fragment, titleRes, mCurrentPkgName, mCurrentUid, this,
-                INSTALLED_APP_DETAILS);
+                INSTALLED_APP_DETAILS, getMetricsCategory());
     }
 
     @Override
@@ -631,11 +629,11 @@
                 return true;
             case R.id.advanced:
                 if (mListType == LIST_TYPE_NOTIFICATION) {
-                    ((SettingsActivity) getActivity()).startPreferencePanel(
+                    ((SettingsActivity) getActivity()).startPreferencePanel(this,
                             ConfigureNotificationSettings.class.getName(), null,
                             R.string.configure_notification_settings, null, this, ADVANCED_SETTINGS);
                 } else {
-                    ((SettingsActivity) getActivity()).startPreferencePanel(
+                    ((SettingsActivity) getActivity()).startPreferencePanel(this,
                             AdvancedAppSettings.class.getName(), null, R.string.configure_apps,
                             null, this, ADVANCED_SETTINGS);
                 }
diff --git a/src/com/android/settings/applications/ManageDomainUrls.java b/src/com/android/settings/applications/ManageDomainUrls.java
index 4a64900..b09a089 100644
--- a/src/com/android/settings/applications/ManageDomainUrls.java
+++ b/src/com/android/settings/applications/ManageDomainUrls.java
@@ -206,7 +206,7 @@
             ApplicationsState.AppEntry entry = ((DomainAppPreference) preference).mEntry;
             AppInfoBase.startAppInfoFragment(AppLaunchSettings.class, R.string.auto_launch_label,
                     entry.info.packageName, entry.info.uid, this,
-                    INSTALLED_APP_DETAILS);
+                    INSTALLED_APP_DETAILS, getMetricsCategory());
             return true;
         }
         return false;
diff --git a/src/com/android/settings/applications/ProcessStatsBase.java b/src/com/android/settings/applications/ProcessStatsBase.java
index 6b21916..7aa3cc7 100644
--- a/src/com/android/settings/applications/ProcessStatsBase.java
+++ b/src/com/android/settings/applications/ProcessStatsBase.java
@@ -139,7 +139,7 @@
                 memInfo.usedWeight * memInfo.weightToRam);
         args.putDouble(ProcessStatsDetail.EXTRA_TOTAL_SCALE, memInfo.totalScale);
         args.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, !includeAppInfo);
-        activity.startPreferencePanel(ProcessStatsDetail.class.getName(), args,
+        activity.startPreferencePanel(null, ProcessStatsDetail.class.getName(), args,
                 R.string.memory_usage, null, null, 0);
     }
 }
diff --git a/src/com/android/settings/applications/RunningProcessesView.java b/src/com/android/settings/applications/RunningProcessesView.java
index 917d3ab..dcb6f9e 100644
--- a/src/com/android/settings/applications/RunningProcessesView.java
+++ b/src/com/android/settings/applications/RunningProcessesView.java
@@ -411,7 +411,7 @@
             args.putBoolean(RunningServiceDetails.KEY_BACKGROUND, mAdapter.mShowBackground);
 
             SettingsActivity sa = (SettingsActivity) mOwner.getActivity();
-            sa.startPreferencePanel(RunningServiceDetails.class.getName(), args,
+            sa.startPreferencePanel(null, RunningServiceDetails.class.getName(), args,
                     R.string.runningservicedetails_settings_title, null, null, 0);
         }
     }
diff --git a/src/com/android/settings/applications/ShortcutPreference.java b/src/com/android/settings/applications/ShortcutPreference.java
index e3db57a..91b41b7 100644
--- a/src/com/android/settings/applications/ShortcutPreference.java
+++ b/src/com/android/settings/applications/ShortcutPreference.java
@@ -17,6 +17,8 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.support.v7.preference.Preference;
+
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 
@@ -42,6 +44,6 @@
         Bundle bundle = new Bundle();
         bundle.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, mPrefKey);
         Utils.startWithFragment(getContext(), mTarget.getName(), bundle, null, 0,
-                mTitle, null);
+                mTitle, null, MetricsProto.MetricsEvent.VIEW_UNKNOWN);
     }
 }
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 6e7ae47..7a8ff4c 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -423,7 +423,8 @@
                 public void onClick() {
                     final SettingsActivity activity =
                             (SettingsActivity) BluetoothSettings.this.getActivity();
-                    activity.startPreferencePanel(ScanningSettings.class.getName(), null,
+                    activity.startPreferencePanel(BluetoothSettings.this,
+                            ScanningSettings.class.getName(), null,
                             R.string.location_scanning_screen_title, null, null, 0);
                 }
             });
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index ce0daa9..91ef3f1 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -30,8 +30,8 @@
 import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
 import com.android.settings.core.lifecycle.ObservablePreferenceFragment;
 import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.widget.PreferenceDividerDecoration;
 import com.android.settings.survey.SurveyMixin;
+import com.android.settings.widget.PreferenceDividerDecoration;
 
 /**
  * Instrumented fragment that logs visibility state.
@@ -47,9 +47,12 @@
     private final PreferenceDividerDecoration mDividerDecoration =
             new PreferenceDividerDecoration();
 
+    private final VisibilityLoggerMixin mVisibilityLoggerMixin;
+
     public InstrumentedPreferenceFragment() {
         // Mixin that logs visibility change for activity.
-        getLifecycle().addObserver(new VisibilityLoggerMixin(getMetricsCategory()));
+        mVisibilityLoggerMixin = new VisibilityLoggerMixin(getMetricsCategory());
+        getLifecycle().addObserver(mVisibilityLoggerMixin);
         getLifecycle().addObserver(new SurveyMixin(this, getClass().getSimpleName()));
     }
 
@@ -68,6 +71,12 @@
     }
 
     @Override
+    public void onResume() {
+        mVisibilityLoggerMixin.setSourceMetricsCategory(getActivity());
+        super.onResume();
+    }
+
+    @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
     }
 
diff --git a/src/com/android/settings/core/instrumentation/EventLogWriter.java b/src/com/android/settings/core/instrumentation/EventLogWriter.java
index 9304512..0a85649 100644
--- a/src/com/android/settings/core/instrumentation/EventLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/EventLogWriter.java
@@ -27,8 +27,11 @@
  */
 public class EventLogWriter implements LogWriter {
 
-    public void visible(Context context, int category) {
-        MetricsLogger.visible(context, category);
+    public void visible(Context context, int source, int category) {
+        final LogMaker logMaker = new LogMaker(category)
+                .setType(MetricsProto.MetricsEvent.TYPE_OPEN)
+                .addTaggedData(MetricsProto.MetricsEvent.FIELD_CONTEXT, source);
+        MetricsLogger.action(logMaker);
     }
 
     public void hidden(Context context, int category) {
diff --git a/src/com/android/settings/core/instrumentation/LogWriter.java b/src/com/android/settings/core/instrumentation/LogWriter.java
index 4a2fc6c..88dd4df 100644
--- a/src/com/android/settings/core/instrumentation/LogWriter.java
+++ b/src/com/android/settings/core/instrumentation/LogWriter.java
@@ -25,7 +25,7 @@
     /**
      * Logs a visibility event when view becomes visible.
      */
-    void visible(Context context, int category);
+    void visible(Context context, int source, int category);
 
     /**
      * Logs a visibility event when view becomes hidden.
diff --git a/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java b/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java
index 13a4d7e..24c5e8c 100644
--- a/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java
+++ b/src/com/android/settings/core/instrumentation/MetricsFeatureProvider.java
@@ -16,7 +16,8 @@
 package com.android.settings.core.instrumentation;
 
 import android.content.Context;
-import android.metrics.LogMaker;
+
+import com.android.internal.logging.nano.MetricsProto;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -37,9 +38,9 @@
         mLoggerWriters.add(new SettingSuggestionsLogWriter());
     }
 
-    public void visible(Context context, int category) {
+    public void visible(Context context, int source, int category) {
         for (LogWriter writer : mLoggerWriters) {
-            writer.visible(context, category);
+            writer.visible(context, source, category);
         }
     }
 
@@ -90,4 +91,11 @@
             writer.histogram(context, name, bucket);
         }
     }
+
+    public int getMetricsCategory(Object object) {
+        if (object == null || !(object instanceof Instrumentable)) {
+            return MetricsProto.MetricsEvent.VIEW_UNKNOWN;
+        }
+        return ((Instrumentable) object).getMetricsCategory();
+    }
 }
diff --git a/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java b/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java
index 3b94fe7..44d2554 100644
--- a/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/SettingSuggestionsLogWriter.java
@@ -31,7 +31,7 @@
     private EventStore mEventStore;
 
     @Override
-    public void visible(Context context, int category) {
+    public void visible(Context context, int source, int category) {
     }
 
     @Override
diff --git a/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java b/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
index 54183a2..fcd32d1 100644
--- a/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
+++ b/src/com/android/settings/core/instrumentation/VisibilityLoggerMixin.java
@@ -16,8 +16,12 @@
 
 package com.android.settings.core.instrumentation;
 
+import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsActivity;
 import com.android.settings.core.lifecycle.LifecycleObserver;
 import com.android.settings.core.lifecycle.events.OnAttach;
 import com.android.settings.core.lifecycle.events.OnPause;
@@ -31,9 +35,12 @@
  */
 public class VisibilityLoggerMixin implements LifecycleObserver, OnResume, OnPause, OnAttach {
 
+    private static final String TAG = "VisibilityLoggerMixin";
+
     private final int mMetricsCategory;
 
     private MetricsFeatureProvider mMetricsFeature;
+    private int mSourceMetricsCategory = MetricsProto.MetricsEvent.VIEW_UNKNOWN;
 
     public VisibilityLoggerMixin(int metricsCategory) {
         // MetricsFeature will be set during onAttach.
@@ -53,7 +60,7 @@
     @Override
     public void onResume() {
         if (mMetricsFeature != null && mMetricsCategory != METRICS_CATEGORY_UNKNOWN) {
-            mMetricsFeature.visible(null /* context */, mMetricsCategory);
+            mMetricsFeature.visible(null /* context */, mSourceMetricsCategory, mMetricsCategory);
         }
     }
 
@@ -63,4 +70,19 @@
             mMetricsFeature.hidden(null /* context */, mMetricsCategory);
         }
     }
+
+    /**
+     * Sets source metrics category for this logger. Source is the caller that opened this UI.
+     */
+    public void setSourceMetricsCategory(Activity activity) {
+        if (mSourceMetricsCategory != MetricsProto.MetricsEvent.VIEW_UNKNOWN || activity == null) {
+            return;
+        }
+        final Intent intent = activity.getIntent();
+        if (intent == null) {
+            return;
+        }
+        mSourceMetricsCategory = intent.getIntExtra(SettingsActivity.EXTRA_SOURCE_METRICS_CATEGORY,
+                MetricsProto.MetricsEvent.VIEW_UNKNOWN);
+    }
 }
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
index 7f91d16..7845829 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
@@ -16,6 +16,7 @@
 package com.android.settings.dashboard;
 
 import android.app.Activity;
+import android.app.Fragment;
 import android.content.Context;
 import android.support.v7.preference.Preference;
 
@@ -44,13 +45,15 @@
      *
      * @param activity Activity hosting the preference
      * @param context UI context to inflate preference
+     * @param sourceMetricsCategory The context (source) from which an action is performed
      * @param key Value from CategoryKey
      * @deprecated Pages implementing {@code DashboardFragment} should use
      * {@link #getTilesForCategory(String)} instead. Using this method will not get the benefit
      * of auto-ordering, progressive disclosure, auto-refreshing summary text etc.
      */
     @Deprecated
-    List<Preference> getPreferencesForCategory(Activity activity, Context context, String key);
+    List<Preference> getPreferencesForCategory(Activity activity, Context context,
+            int sourceMetricsCategory, String key);
 
     /**
      * Get all tiles, grouped by category.
@@ -58,13 +61,6 @@
     List<DashboardCategory> getAllCategories();
 
     /**
-     * Returns a priority group for tile. priority level is grouped into hundreds. tiles with
-     * priority 100 - 199 belongs to priority level 100, tiles with priority 200 - 299 is in
-     * group 200, and so on.
-     */
-    int getPriorityGroup(Preference preference);
-
-    /**
      * Returns an unique string key for the tile.
      */
     String getDashboardKeyForTile(Tile tile);
@@ -73,14 +69,15 @@
      * Binds preference to data provided by tile.
      *
      * @param activity If tile contains intent to launch, it will be launched from this activity
+     * @param sourceMetricsCategory The context (source) from which an action is performed
      * @param pref The preference to bind data
      * @param tile The binding data
      * @param key They key for preference. If null, we will generate one from tile data
      * @param baseOrder The order offset value. When binding, pref's order is determined by
      * both this value and tile's own priority.
      */
-    void bindPreferenceToTile(Activity activity, Preference pref, Tile tile, String key,
-            int baseOrder);
+    void bindPreferenceToTile(Activity activity, int sourceMetricsCategory, Preference pref,
+            Tile tile, String key, int baseOrder);
 
     /**
      * Returns a {@link ProgressiveDisclosureMixin} for specified fragment.
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 395a8bd..69105b5 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -80,7 +80,7 @@
 
     @Override
     public List<Preference> getPreferencesForCategory(Activity activity, Context context,
-            String key) {
+            int sourceMetricsCategory, String key) {
         if (!isEnabled()) {
             return null;
         }
@@ -97,7 +97,7 @@
         final List<Preference> preferences = new ArrayList<>();
         for (Tile tile : tiles) {
             final Preference pref = new Preference(context);
-            bindPreferenceToTile(activity, pref, tile, null /* key */,
+            bindPreferenceToTile(activity, sourceMetricsCategory, pref, tile, null /* key */,
                     Preference.DEFAULT_ORDER /* baseOrder */);
             preferences.add(pref);
         }
@@ -110,11 +110,6 @@
     }
 
     @Override
-    public int getPriorityGroup(Preference preference) {
-        return preference.getOrder() / 100;
-    }
-
-    @Override
     public String getDashboardKeyForTile(Tile tile) {
         if (tile == null || tile.intent == null) {
             return null;
@@ -129,8 +124,8 @@
     }
 
     @Override
-    public void bindPreferenceToTile(Activity activity, Preference pref, Tile tile, String key,
-            int baseOrder) {
+    public void bindPreferenceToTile(Activity activity, int sourceMetricsCategory, Preference pref,
+            Tile tile, String key, int baseOrder) {
         pref.setTitle(tile.title);
         if (!TextUtils.isEmpty(key)) {
             pref.setKey(key);
@@ -152,6 +147,7 @@
             pref.setFragment(clsName);
         } else if (tile.intent != null) {
             final Intent intent = new Intent(tile.intent);
+            intent.putExtra(SettingsActivity.EXTRA_SOURCE_METRICS_CATEGORY, sourceMetricsCategory);
             if (action != null) {
                 intent.setAction(action);
             }
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index f8a27e0..d650fc7 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -330,13 +330,13 @@
                 // Have the key already, will rebind.
                 final Preference preference = mProgressiveDisclosureMixin.findPreference(
                         screen, key);
-                mDashboardFeatureProvider.bindPreferenceToTile(getActivity(), preference, tile, key,
-                        mPlaceholderPreferenceController.getOrder());
+                mDashboardFeatureProvider.bindPreferenceToTile(getActivity(), getMetricsCategory(),
+                        preference, tile, key, mPlaceholderPreferenceController.getOrder());
             } else {
                 // Don't have this key, add it.
                 final Preference pref = new Preference(getPrefContext());
-                mDashboardFeatureProvider.bindPreferenceToTile(getActivity(), pref, tile, key,
-                        mPlaceholderPreferenceController.getOrder());
+                mDashboardFeatureProvider.bindPreferenceToTile(getActivity(), getMetricsCategory(),
+                        pref, tile, key, mPlaceholderPreferenceController.getOrder());
                 mProgressiveDisclosureMixin.addPreference(screen, pref);
                 mDashboardTilePrefKeys.add(key);
             }
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index a5a4f43..ce1cf65 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -134,9 +134,11 @@
 
         ((SettingsDrawerActivity) getActivity()).addCategoryListener(this);
         mSummaryLoader.setListening(true);
+        final int metricsCategory = getMetricsCategory();
         for (Condition c : mConditionManager.getConditions()) {
             if (c.shouldShow()) {
-                mMetricsFeatureProvider.visible(getContext(), c.getMetricsConstant());
+                mMetricsFeatureProvider.visible(getContext(), metricsCategory,
+                        c.getMetricsConstant());
             }
         }
         if (DEBUG_TIMING) {
diff --git a/src/com/android/settings/dashboard/SearchResultsSummary.java b/src/com/android/settings/dashboard/SearchResultsSummary.java
index ef84f8b..06b71d6 100644
--- a/src/com/android/settings/dashboard/SearchResultsSummary.java
+++ b/src/com/android/settings/dashboard/SearchResultsSummary.java
@@ -194,7 +194,8 @@
                     Bundle args = new Bundle();
                     args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
 
-                    Utils.startWithFragment(sa, className, args, null, 0, -1, screenTitle);
+                    Utils.startWithFragment(sa, className, args, null, 0, -1, screenTitle,
+                            getMetricsCategory());
                 } else {
                     final Intent intent = new Intent(action);
 
diff --git a/src/com/android/settings/dashboard/conditional/BatterySaverCondition.java b/src/com/android/settings/dashboard/conditional/BatterySaverCondition.java
index b3e3504..7feac23 100644
--- a/src/com/android/settings/dashboard/conditional/BatterySaverCondition.java
+++ b/src/com/android/settings/dashboard/conditional/BatterySaverCondition.java
@@ -56,7 +56,7 @@
     @Override
     public void onPrimaryClick() {
         Utils.startWithFragment(mManager.getContext(), BatterySaverSettings.class.getName(), null,
-                null, 0, R.string.battery_saver, null);
+                null, 0, R.string.battery_saver, null, MetricsEvent.DASHBOARD_SUMMARY);
     }
 
     @Override
diff --git a/src/com/android/settings/dashboard/conditional/HotspotCondition.java b/src/com/android/settings/dashboard/conditional/HotspotCondition.java
index 2f25da5..19e0e85 100644
--- a/src/com/android/settings/dashboard/conditional/HotspotCondition.java
+++ b/src/com/android/settings/dashboard/conditional/HotspotCondition.java
@@ -91,7 +91,7 @@
     @Override
     public void onPrimaryClick() {
         Utils.startWithFragment(mManager.getContext(), TetherSettings.class.getName(), null, null,
-                0, R.string.tether_settings_title_all, null);
+                0, R.string.tether_settings_title_all, null, MetricsEvent.DASHBOARD_SUMMARY);
     }
 
     @Override
diff --git a/src/com/android/settings/dashboard/conditional/NightDisplayCondition.java b/src/com/android/settings/dashboard/conditional/NightDisplayCondition.java
index 11d6c0f..bfcab7f 100644
--- a/src/com/android/settings/dashboard/conditional/NightDisplayCondition.java
+++ b/src/com/android/settings/dashboard/conditional/NightDisplayCondition.java
@@ -63,7 +63,7 @@
     @Override
     public void onPrimaryClick() {
         Utils.startWithFragment(mManager.getContext(), NightDisplaySettings.class.getName(), null,
-                null, 0, R.string.night_display_title, null);
+                null, 0, R.string.night_display_title, null, MetricsEvent.DASHBOARD_SUMMARY);
     }
 
     @Override
diff --git a/src/com/android/settings/datausage/BillingCyclePreference.java b/src/com/android/settings/datausage/BillingCyclePreference.java
index 44312b7..8e450df 100644
--- a/src/com/android/settings/datausage/BillingCyclePreference.java
+++ b/src/com/android/settings/datausage/BillingCyclePreference.java
@@ -22,6 +22,8 @@
 import android.os.RemoteException;
 import android.support.v7.preference.Preference;
 import android.util.AttributeSet;
+
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.datausage.CellDataPreference.DataStateListener;
@@ -76,7 +78,7 @@
         Bundle args = new Bundle();
         args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
         return Utils.onBuildStartFragmentIntent(getContext(), BillingCycleSettings.class.getName(),
-                args, null, 0, getTitle(), false);
+                args, null, 0, getTitle(), false, MetricsProto.MetricsEvent.VIEW_UNKNOWN);
     }
 
     private final DataStateListener mListener = new DataStateListener() {
diff --git a/src/com/android/settings/datausage/DataUsagePreference.java b/src/com/android/settings/datausage/DataUsagePreference.java
index bd865b5..0c7b33f 100644
--- a/src/com/android/settings/datausage/DataUsagePreference.java
+++ b/src/com/android/settings/datausage/DataUsagePreference.java
@@ -22,6 +22,8 @@
 import android.telephony.SubscriptionManager;
 import android.text.format.Formatter;
 import android.util.AttributeSet;
+
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.Utils;
 import com.android.settingslib.net.DataUsageController;
 import com.android.settings.R;
@@ -53,6 +55,7 @@
         args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
         args.putInt(DataUsageList.EXTRA_SUB_ID, mSubId);
         return Utils.onBuildStartFragmentIntent(getContext(), DataUsageList.class.getName(), args,
-                getContext().getPackageName(), 0, getTitle(), false);
+                getContext().getPackageName(), 0, getTitle(), false,
+                MetricsProto.MetricsEvent.VIEW_UNKNOWN);
     }
 }
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index ce26c0f..6c3b9e6 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -479,7 +479,7 @@
                 args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
                 intent = Utils.onBuildStartFragmentIntent(getActivity(),
                         ManageApplications.class.getName(), args, null, R.string.apps_storage, null,
-                        false);
+                        false, getMetricsCategory());
 
             } break;
             case R.string.storage_detail_images: {
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index cf70429..31bcc4e 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -235,8 +235,8 @@
             final Bundle args = new Bundle();
             args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
             Intent intent = Utils.onBuildStartFragmentIntent(getActivity(),
-                    StorageDashboardFragment.class.getName(), args, null, R.string.apps_storage, null,
-                    false);
+                    StorageDashboardFragment.class.getName(), args, null, R.string.apps_storage,
+                    null, false, getMetricsCategory());
             intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true);
             getActivity().startActivity(intent);
             finish();
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index 627b877..63c37d8 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -38,6 +38,8 @@
 import com.android.settings.applications.ManageApplications;
 import com.android.settings.applications.PackageManagerWrapperImpl;
 import com.android.settings.core.PreferenceController;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.deviceinfo.StorageMeasurement;
 import com.android.settingslib.deviceinfo.StorageVolumeProvider;
 
@@ -67,6 +69,7 @@
     static final String FILES_KEY = "pref_files";
 
     private final Fragment mFragment;
+    private final  MetricsFeatureProvider mMetricsFeatureProvider;
     private final StorageVolumeProvider mSvp;
     private VolumeInfo mVolume;
     private final int mUserId;
@@ -87,7 +90,7 @@
         mFragment = hostFragment;
         mVolume = volume;
         mSvp = svp;
-
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
         UserManager um = mContext.getSystemService(UserManager.class);
         mUserId = um.getUserHandle();
     }
@@ -213,7 +216,7 @@
         args.putInt(ManageApplications.EXTRA_STORAGE_TYPE, ManageApplications.STORAGE_TYPE_MUSIC);
         return Utils.onBuildStartFragmentIntent(mContext,
                 ManageApplications.class.getName(), args, null, R.string.audio_storage_title, null,
-                false);
+                false, mMetricsFeatureProvider.getMetricsCategory(mFragment));
     }
 
     private Intent getAppsIntent() {
@@ -224,7 +227,7 @@
         args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
         return Utils.onBuildStartFragmentIntent(mContext,
                 ManageApplications.class.getName(), args, null, R.string.apps_storage, null,
-                false);
+                false, mMetricsFeatureProvider.getMetricsCategory(mFragment));
     }
 
     private Intent getGamesIntent() {
@@ -233,7 +236,7 @@
                     Settings.GamesStorageActivity.class.getName());
             return Utils.onBuildStartFragmentIntent(mContext,
                     ManageApplications.class.getName(), args, null, R.string.game_storage_settings,
-                    null, false);
+                    null, false, mMetricsFeatureProvider.getMetricsCategory(mFragment));
     }
 
     private Intent getFilesIntent() {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index dace4da..154a901 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -35,6 +35,7 @@
 import android.os.Process;
 import android.os.UserHandle;
 import android.provider.SearchIndexableResource;
+import android.support.v14.preference.PreferenceFragment;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceClickListener;
 import android.support.v7.preference.PreferenceCategory;
@@ -88,9 +89,9 @@
         R.string.battery_desc_camera,
     };
 
-    public static void startBatteryDetailPage(
-            SettingsActivity caller, BatteryStatsHelper helper, int statsType, BatteryEntry entry,
-            boolean showLocationButton, boolean includeAppInfo) {
+    public static void startBatteryDetailPage(SettingsActivity caller,
+            PreferenceFragment fragment, BatteryStatsHelper helper, int statsType,
+            BatteryEntry entry, boolean showLocationButton, boolean includeAppInfo) {
         // Initialize mStats if necessary.
         helper.getStats();
 
@@ -283,7 +284,7 @@
         args.putIntArray(PowerUsageDetail.EXTRA_DETAIL_TYPES, types);
         args.putDoubleArray(PowerUsageDetail.EXTRA_DETAIL_VALUES, values);
 
-        caller.startPreferencePanelAsUser(PowerUsageDetail.class.getName(), args,
+        caller.startPreferencePanelAsUser(fragment, PowerUsageDetail.class.getName(), args,
                 R.string.details_title, null, new UserHandle(userId));
     }
 
@@ -550,7 +551,7 @@
         args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mPackages[0]);
 
         SettingsActivity sa = (SettingsActivity) getActivity();
-        sa.startPreferencePanel(InstalledAppDetails.class.getName(), args,
+        sa.startPreferencePanel(this, InstalledAppDetails.class.getName(), args,
                 R.string.application_info_label, null, null, 0);
     }
 
@@ -558,26 +559,26 @@
         SettingsActivity sa = (SettingsActivity)getActivity();
         switch (action) {
             case ACTION_DISPLAY_SETTINGS:
-                sa.startPreferencePanel(DisplaySettings.class.getName(), null,
+                sa.startPreferencePanel(this, DisplaySettings.class.getName(), null,
                         R.string.display_settings_title, null, null, 0);
                 break;
             case ACTION_WIFI_SETTINGS:
-                sa.startPreferencePanel(WifiSettings.class.getName(), null,
+                sa.startPreferencePanel(this, WifiSettings.class.getName(), null,
                         R.string.wifi_settings, null, null, 0);
                 break;
             case ACTION_BLUETOOTH_SETTINGS:
-                sa.startPreferencePanel(BluetoothSettings.class.getName(), null,
+                sa.startPreferencePanel(this, BluetoothSettings.class.getName(), null,
                         R.string.bluetooth_settings, null, null, 0);
                 break;
             case ACTION_WIRELESS_SETTINGS:
-                sa.startPreferencePanel(WirelessSettings.class.getName(), null,
+                sa.startPreferencePanel(this, WirelessSettings.class.getName(), null,
                         R.string.radio_controls_title, null, null, 0);
                 break;
             case ACTION_APP_DETAILS:
                 startApplicationDetailsActivity();
                 break;
             case ACTION_LOCATION_SETTINGS:
-                sa.startPreferencePanel(LocationSettings.class.getName(), null,
+                sa.startPreferencePanel(this, LocationSettings.class.getName(), null,
                         R.string.location_settings_title, null, null, 0);
                 break;
             case ACTION_FORCE_STOP:
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 7b64ddf..75787d5 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -40,7 +40,7 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.TextView;
-import android.widget.Toast;
+
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatterySipper.DrainType;
@@ -141,8 +141,8 @@
         }
         PowerGaugePreference pgp = (PowerGaugePreference) preference;
         BatteryEntry entry = pgp.getInfo();
-        PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), mStatsHelper,
-                mStatsType, entry, true, true);
+        PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), this,
+                mStatsHelper, mStatsType, entry, true, true);
         return super.onPreferenceTreeClick(preference);
     }
 
@@ -206,7 +206,7 @@
                 Bundle args = new Bundle();
                 args.putString(ManageApplications.EXTRA_CLASSNAME,
                         HighPowerApplicationsActivity.class.getName());
-                sa.startPreferencePanel(ManageApplications.class.getName(), args,
+                sa.startPreferencePanel(this, ManageApplications.class.getName(), args,
                         R.string.high_power_apps, null, null, 0);
                 return true;
             case MENU_ADDITIONAL_BATTERY_INFO:
@@ -237,7 +237,7 @@
 
         if (featureProvider.isAdvancedUiEnabled()) {
             Utils.startWithFragment(getContext(), PowerUsageAdvanced.class.getName(), null,
-                    null, 0, R.string.advanced_battery_title, null);
+                    null, 0, R.string.advanced_battery_title, null, getMetricsCategory());
         } else {
             mStatsHelper.storeStatsHistoryInFile(BatteryHistoryDetail.BATTERY_HISTORY_FILE);
             Bundle args = new Bundle(2);
@@ -246,7 +246,7 @@
             args.putParcelable(BatteryHistoryDetail.EXTRA_BROADCAST,
                     mStatsHelper.getBatteryBroadcast());
             Utils.startWithFragment(getContext(), BatteryHistoryDetail.class.getName(), args,
-                    null, 0, R.string.history_details_title, null);
+                    null, 0, R.string.history_details_title, null, getMetricsCategory());
         }
     }
 
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 4177afb..72d54b8 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -194,6 +194,7 @@
                     @Override
                     public boolean onPreferenceClick(Preference preference) {
                         activity.startPreferencePanel(
+                                LocationSettings.this,
                                 LocationMode.class.getName(), null,
                                 R.string.location_mode_screen_title, null, LocationSettings.this,
                                 0);
@@ -348,6 +349,7 @@
         switch (item.getItemId()) {
             case MENU_SCANNING:
                 activity.startPreferencePanel(
+                        this,
                         ScanningSettings.class.getName(), null,
                         R.string.location_scanning_screen_title, null, LocationSettings.this,
                         0);
@@ -467,6 +469,7 @@
             Bundle args = new Bundle();
             args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mPackage);
             ((SettingsActivity) getActivity()).startPreferencePanelAsUser(
+                    LocationSettings.this,
                     InstalledAppDetails.class.getName(), args,
                     R.string.application_info_label, null, mUserHandle);
             return true;
diff --git a/src/com/android/settings/network/NetworkResetActionMenuController.java b/src/com/android/settings/network/NetworkResetActionMenuController.java
index 67c37a4..d5065d1 100644
--- a/src/com/android/settings/network/NetworkResetActionMenuController.java
+++ b/src/com/android/settings/network/NetworkResetActionMenuController.java
@@ -23,6 +23,7 @@
 import android.view.Menu;
 import android.view.MenuItem;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
 import com.android.settings.ResetNetwork;
 import com.android.settings.Utils;
@@ -45,7 +46,8 @@
         if (item != null) {
             item.setOnMenuItemClickListener(target -> {
                 Utils.startWithFragment(mContext, ResetNetwork.class.getName(), null, null,
-                        0, R.string.reset_network_title, null);
+                        0, R.string.reset_network_title, null,
+                        MetricsProto.MetricsEvent.SETTINGS_NETWORK_CATEGORY);
                 return true;
             });
         }
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index 0d7fb93..d0f6f2e 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -198,7 +198,7 @@
                         channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
                         Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(),
                                 ChannelNotificationSettings.class.getName(),
-                                channelArgs, null, 0, null, false);
+                                channelArgs, null, 0, null, false, getMetricsCategory());
                         channelPref.setIntent(channelIntent);
 
                         channelPref.setOnPreferenceChangeListener(
diff --git a/src/com/android/settings/search2/CursorToSearchResultConverter.java b/src/com/android/settings/search2/CursorToSearchResultConverter.java
index 6549c18..bcb2e9d 100644
--- a/src/com/android/settings/search2/CursorToSearchResultConverter.java
+++ b/src/com/android/settings/search2/CursorToSearchResultConverter.java
@@ -29,6 +29,7 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.dashboard.SiteMapManager;
@@ -187,7 +188,8 @@
             final Bundle args = new Bundle();
             args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
             final Intent intent = Utils.onBuildStartFragmentIntent(mContext,
-                    className, args, null, 0, screenTitle, false);
+                    className, args, null, 0, screenTitle, false,
+                    MetricsProto.MetricsEvent.DASHBOARD_SEARCH_RESULTS);
             payload = new IntentPayload(intent);
         } else {
             final Intent intent = new Intent(action);
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index c49aa1d..000ccf5 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -439,7 +439,7 @@
         if (userId == UserPreference.USERID_GUEST_DEFAULTS) {
             Bundle extras = new Bundle();
             extras.putBoolean(UserDetailsSettings.EXTRA_USER_GUEST, true);
-            ((SettingsActivity) getActivity()).startPreferencePanel(
+            ((SettingsActivity) getActivity()).startPreferencePanel(this,
                     UserDetailsSettings.class.getName(),
                     extras, R.string.user_guest, null, null, 0);
             return;
@@ -449,7 +449,7 @@
             Bundle extras = new Bundle();
             extras.putInt(RestrictedProfileSettings.EXTRA_USER_ID, userId);
             extras.putBoolean(RestrictedProfileSettings.EXTRA_NEW_USER, newUser);
-            ((SettingsActivity) getActivity()).startPreferencePanel(
+            ((SettingsActivity) getActivity()).startPreferencePanel(this,
                     RestrictedProfileSettings.class.getName(),
                     extras, R.string.user_restrictions_title, null,
                     null, 0);
@@ -459,7 +459,7 @@
         } else if (mUserCaps.mIsAdmin) {
             Bundle extras = new Bundle();
             extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userId);
-            ((SettingsActivity) getActivity()).startPreferencePanel(
+            ((SettingsActivity) getActivity()).startPreferencePanel(this,
                     UserDetailsSettings.class.getName(),
                     extras,
                     -1, /* No title res id */
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index f86e677..9ef087b 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -100,11 +100,11 @@
         }
     };
 
-    public static void show(Context context, AppPreference pref) {
+    public static void show(Context context, AppPreference pref, int sourceMetricsCategory) {
         Bundle args = new Bundle();
         args.putString(ARG_PACKAGE_NAME, pref.getPackageName());
         Utils.startWithFragmentAsUser(context, AppManagementFragment.class.getName(), args, -1,
-                pref.getLabel(), false, new UserHandle(pref.getUserId()));
+                pref.getLabel(), false, sourceMetricsCategory, new UserHandle(pref.getUserId()));
     }
 
     @Override
diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java
index 2998319..ead2143 100644
--- a/src/com/android/settings/vpn2/VpnSettings.java
+++ b/src/com/android/settings/vpn2/VpnSettings.java
@@ -405,8 +405,8 @@
                 ConfigDialogFragment.show(VpnSettings.this, pref.getProfile(), true /* editing */,
                         true /* exists */);
             } else if (p instanceof AppPreference) {
-                AppPreference pref = (AppPreference) p;;
-                AppManagementFragment.show(getPrefContext(), pref);
+                AppPreference pref = (AppPreference) p;
+                AppManagementFragment.show(getPrefContext(), pref, getMetricsCategory());
             }
         }
     };
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index c4b90c7..a903c09 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -850,8 +850,9 @@
                 @Override
                 public void onClick() {
                     final SettingsActivity activity = (SettingsActivity) getActivity();
-                    activity.startPreferencePanel(ScanningSettings.class.getName(), null,
-                            R.string.location_scanning_screen_title, null, null, 0);
+                    activity.startPreferencePanel(WifiSettings.this,
+                            ScanningSettings.class.getName(),
+                            null, R.string.location_scanning_screen_title, null, null, 0);
                 }
             };
             mStatusMessagePreference.setText(
diff --git a/tests/robotests/src/com/android/settings/DevelopmentSettingsTest.java b/tests/robotests/src/com/android/settings/DevelopmentSettingsTest.java
index e518620..3e7d4ac 100644
--- a/tests/robotests/src/com/android/settings/DevelopmentSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DevelopmentSettingsTest.java
@@ -79,7 +79,8 @@
         doReturn(mActivity).when(mSettings).getActivity();
         when(mPreferenceManager.getContext()).thenReturn(mContext);
         when(mFeatureFactory.dashboardFeatureProvider.getPreferencesForCategory(
-                mActivity, mContext, CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT))
+                mActivity, mContext, mSettings.getMetricsCategory(),
+                CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT))
                 .thenReturn(preferences);
 
         mSettings.onAttach(mContext);
diff --git a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
index 744bc0f..4cc39fb 100644
--- a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
@@ -24,6 +24,7 @@
 import android.support.v7.preference.PreferenceManager;
 import android.support.v7.preference.PreferenceScreen;
 
+import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.FakeFeatureFactory;
@@ -57,18 +58,20 @@
         FakeFeatureFactory.setupForTest(mContext);
 
         mFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
-
+        when(mFactory.metricsFeatureProvider.getMetricsCategory(any(Object.class)))
+                .thenReturn(MetricsProto.MetricsEvent.SETTINGS_APP_NOTIF_CATEGORY);
         mAppInfoWithHeader = new TestFragment();
     }
 
     @Test
     public void testAppHeaderIsAdded() {
+        final AppHeaderController appHeaderController = new AppHeaderController(
+                ShadowApplication.getInstance().getApplicationContext(),
+                mAppInfoWithHeader,
+                null);
         when(mFactory.dashboardFeatureProvider.isEnabled()).thenReturn(true);
         when(mFactory.applicationFeatureProvider.newAppHeaderController(mAppInfoWithHeader, null))
-                .thenReturn(new AppHeaderController(
-                        ShadowApplication.getInstance().getApplicationContext(),
-                        mAppInfoWithHeader,
-                        null));
+                .thenReturn(appHeaderController);
         mAppInfoWithHeader.onActivityCreated(null);
 
         verify(mAppInfoWithHeader.mScreen).addPreference(any(LayoutPreference.class));
diff --git a/tests/robotests/src/com/android/settings/applications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/ManageApplicationsTest.java
index bf1fbb8..8729d84 100644
--- a/tests/robotests/src/com/android/settings/applications/ManageApplicationsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/ManageApplicationsTest.java
@@ -21,9 +21,11 @@
 import com.android.settings.Settings;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+import com.android.settings.core.lifecycle.Lifecycle;
 import com.android.settings.testutils.shadow.ShadowDynamicIndexableContentMonitor;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settings.testutils.shadow.SettingsShadowResources.SettingsShadowTheme;
+import com.android.settings.testutils.shadow.ShadowEventLogWriter;
 import com.android.settingslib.applications.ApplicationsState;
 import org.junit.Before;
 import org.junit.Test;
@@ -46,7 +48,8 @@
         shadows = {
                 SettingsShadowResources.class,
                 SettingsShadowTheme.class,
-                ShadowDynamicIndexableContentMonitor.class
+                ShadowDynamicIndexableContentMonitor.class,
+                ShadowEventLogWriter.class
         })
 public class ManageApplicationsTest {
 
@@ -55,8 +58,8 @@
     @Mock private UserManager mUserManager;
 
     private Looper mBgLooper;
-
     private ManageApplications mFragment;
+
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
@@ -67,6 +70,7 @@
         when(mState.getBackgroundLooper()).thenReturn(mBgLooper);
 
         mFragment = new ManageApplications();
+        ReflectionHelpers.setField(mFragment, "mLifecycle", new Lifecycle());
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java b/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java
index 56fa786..8a555a8 100644
--- a/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java
+++ b/tests/robotests/src/com/android/settings/core/instrumentation/VisibilityLoggerMixinTest.java
@@ -15,9 +15,15 @@
  */
 package com.android.settings.core.instrumentation;
 
+import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -29,9 +35,11 @@
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -54,7 +62,23 @@
         mMixin.onResume();
 
         verify(mMetricsFeature, times(1))
-                .visible(any(Context.class), eq(TestInstrumentable.TEST_METRIC));
+                .visible(any(Context.class), eq(MetricsProto.MetricsEvent.VIEW_UNKNOWN),
+                        eq(TestInstrumentable.TEST_METRIC));
+    }
+
+    @Test
+    public void shouldLogVisibleWithSource() {
+        final Intent sourceIntent = new Intent()
+                .putExtra(SettingsActivity.EXTRA_SOURCE_METRICS_CATEGORY,
+                        MetricsProto.MetricsEvent.SETTINGS_GESTURES);
+        final Activity activity = mock(Activity.class);
+        when(activity.getIntent()).thenReturn(sourceIntent);
+        mMixin.setSourceMetricsCategory(activity);
+        mMixin.onResume();
+
+        verify(mMetricsFeature, times(1))
+                .visible(any(Context.class), eq(MetricsProto.MetricsEvent.SETTINGS_GESTURES),
+                        eq(TestInstrumentable.TEST_METRIC));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index af720cb..834b2ad 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -98,7 +98,8 @@
         tile.metaData = new Bundle();
         tile.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
         tile.priority = 10;
-        mImpl.bindPreferenceToTile(mActivity, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
 
         assertThat(preference.getTitle()).isEqualTo(tile.title);
         assertThat(preference.getSummary()).isEqualTo(tile.summary);
@@ -118,7 +119,8 @@
         tile.intent = new Intent();
         tile.intent.setComponent(new ComponentName("pkg", "class"));
 
-        mImpl.bindPreferenceToTile(mActivity, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
 
         assertThat(preference.getFragment()).isNull();
         assertThat(preference.getOnPreferenceClickListener()).isNotNull();
@@ -140,7 +142,8 @@
         when(mActivity.getSystemService(Context.USER_SERVICE))
                 .thenReturn(mUserManager);
 
-        mImpl.bindPreferenceToTile(mActivity, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
 
         verify(mActivity).getFragmentManager();
@@ -160,7 +163,8 @@
         when(mActivity.getSystemService(Context.USER_SERVICE))
                 .thenReturn(mUserManager);
 
-        mImpl.bindPreferenceToTile(mActivity, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
         verify(mFeatureFactory.metricsFeatureProvider).action(
                 any(Context.class),
@@ -177,8 +181,8 @@
         final Tile tile = new Tile();
         tile.intent = new Intent();
         tile.intent.setComponent(new ComponentName("pkg", "class"));
-        mImpl.bindPreferenceToTile(mActivity, preference, tile, null /* key */
-                , Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
+                preference, tile, null /*key */, Preference.DEFAULT_ORDER);
 
         assertThat(preference.getKey()).isNotNull();
         assertThat(preference.getOrder()).isEqualTo(Preference.DEFAULT_ORDER);
@@ -192,8 +196,8 @@
         tile.key = "key";
         tile.intent = new Intent();
         tile.intent.setComponent(new ComponentName("pkg", "class"));
-        mImpl.bindPreferenceToTile(mActivity, preference, tile, null /* key */
-                , Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
+                preference, tile, null /* key */, Preference.DEFAULT_ORDER);
 
         assertThat(preference.getKey()).isEqualTo(tile.key);
     }
@@ -206,7 +210,8 @@
         final Tile tile = new Tile();
         tile.metaData = new Bundle();
         tile.priority = 10;
-        mImpl.bindPreferenceToTile(mActivity, preference, tile, "123", baseOrder);
+        mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN,
+                preference, tile, "123", baseOrder);
 
         assertThat(preference.getOrder()).isEqualTo(-tile.priority + baseOrder);
     }
@@ -223,12 +228,16 @@
         tile.metaData = new Bundle();
         tile.metaData.putString("com.android.settings.intent.action", "TestAction");
         tile.userHandle = null;
-        mImpl.bindPreferenceToTile(activity, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTile(activity, MetricsProto.MetricsEvent.SETTINGS_GESTURES,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.performClick();
         ShadowActivity shadowActivity = shadowOf(activity);
 
-        assertThat(shadowActivity.getNextStartedActivityForResult().intent.getAction())
+        final Intent launchIntent = shadowActivity.getNextStartedActivityForResult().intent;
+        assertThat(launchIntent.getAction())
                 .isEqualTo("TestAction");
+        assertThat(launchIntent.getIntExtra(SettingsActivity.EXTRA_SOURCE_METRICS_CATEGORY, 0))
+                .isEqualTo(MetricsProto.MetricsEvent.SETTINGS_GESTURES);
     }
 
     @Test
@@ -236,7 +245,8 @@
         final DashboardFeatureProviderImpl mSpy = spy(mImpl);
         when(mSpy.isEnabled()).thenReturn(false);
 
-        assertThat(mSpy.getPreferencesForCategory(null, null, CategoryKey.CATEGORY_HOMEPAGE))
+        assertThat(mSpy.getPreferencesForCategory(null, null,
+                MetricsProto.MetricsEvent.SETTINGS_GESTURES, CategoryKey.CATEGORY_HOMEPAGE))
                 .isNull();
     }
 
@@ -248,7 +258,8 @@
         when(mCategoryManager.getTilesByCategory(mActivity, CategoryKey.CATEGORY_HOMEPAGE))
                 .thenReturn(null);
 
-        assertThat(mSpy.getPreferencesForCategory(null, null, CategoryKey.CATEGORY_HOMEPAGE))
+        assertThat(mSpy.getPreferencesForCategory(null, null,
+                MetricsProto.MetricsEvent.SETTINGS_GESTURES, CategoryKey.CATEGORY_HOMEPAGE))
                 .isNull();
     }
 
@@ -260,7 +271,8 @@
         when(mCategoryManager.getTilesByCategory(mActivity, CategoryKey.CATEGORY_HOMEPAGE))
                 .thenReturn(new DashboardCategory());
 
-        assertThat(mSpy.getPreferencesForCategory(null, null, CategoryKey.CATEGORY_HOMEPAGE))
+        assertThat(mSpy.getPreferencesForCategory(null, null,
+                MetricsProto.MetricsEvent.SETTINGS_GESTURES, CategoryKey.CATEGORY_HOMEPAGE))
                 .isNull();
     }
 
@@ -277,6 +289,7 @@
 
         assertThat(mSpy.getPreferencesForCategory(mActivity,
                 ShadowApplication.getInstance().getApplicationContext(),
+                MetricsProto.MetricsEvent.SETTINGS_GESTURES,
                 CategoryKey.CATEGORY_HOMEPAGE).isEmpty())
                 .isFalse();
     }
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 327575e..31ffad0 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -24,6 +24,7 @@
 import com.android.settings.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.core.PreferenceController;
+import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settingslib.drawer.DashboardCategory;
@@ -37,6 +38,7 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -186,6 +188,8 @@
             mControllers = new ArrayList<>();
 
             when(mPreferenceManager.getContext()).thenReturn(mContext);
+            ReflectionHelpers.setField(
+                    this, "mVisibilityLoggerMixin", mock(VisibilityLoggerMixin.class));
         }
 
         @Override
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowEventLogWriter.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowEventLogWriter.java
new file mode 100644
index 0000000..dcced4e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowEventLogWriter.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.testutils.shadow;
+
+
+import android.content.Context;
+
+import com.android.settings.core.instrumentation.EventLogWriter;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(value = EventLogWriter.class, callThroughByDefault = false)
+public class ShadowEventLogWriter {
+    @Implementation
+    public void visible(Context context, int source, int category) {
+
+    }
+}
