Change preference value changed metrics log format

- Pass metric category into SharedPreferenceLogger
- Update MainSwitchBar metric log format

Bug: 246483846
Test: Robotest

Change-Id: I91c7b89ee35ae4922aea0d8c998f7d0e33365da2
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 1553a54..076d0e1 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -24,6 +24,7 @@
 
 import android.app.ActionBar;
 import android.app.ActivityManager;
+import android.app.settings.SettingsEnums;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
@@ -230,11 +231,32 @@
 
     @Override
     public SharedPreferences getSharedPreferences(String name, int mode) {
-        if (name.equals(getPackageName() + "_preferences")) {
-            return new SharedPreferencesLogger(this, getMetricsTag(),
-                    FeatureFactory.getFactory(this).getMetricsFeatureProvider());
+        if (!TextUtils.equals(name, getPackageName() + "_preferences")) {
+            return super.getSharedPreferences(name, mode);
         }
-        return super.getSharedPreferences(name, mode);
+
+        String tag = getMetricsTag();
+
+        return new SharedPreferencesLogger(this, tag,
+                FeatureFactory.getFactory(this).getMetricsFeatureProvider(),
+                lookupMetricsCategory());
+    }
+
+    private int lookupMetricsCategory() {
+        int category = SettingsEnums.PAGE_UNKNOWN;
+        Bundle args = null;
+        if (getIntent() != null) {
+            args = getIntent().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
+        }
+
+        Fragment fragment = Utils.getTargetFragment(this, getMetricsTag(), args);
+
+        if (fragment instanceof Instrumentable) {
+            category = ((Instrumentable) fragment).getMetricsCategory();
+        }
+        Log.d(LOG_TAG, "MetricsCategory is " + category);
+
+        return category;
     }
 
     private String getMetricsTag() {
@@ -242,13 +264,11 @@
         if (getIntent() != null && getIntent().hasExtra(EXTRA_SHOW_FRAGMENT)) {
             tag = getInitialFragmentName(getIntent());
         }
+
         if (TextUtils.isEmpty(tag)) {
             Log.w(LOG_TAG, "MetricsTag is invalid " + tag);
             tag = getClass().getName();
         }
-        if (tag.startsWith("com.android.settings.")) {
-            tag = tag.replace("com.android.settings.", "");
-        }
         return tag;
     }
 
@@ -320,7 +340,7 @@
         }
         mMainSwitch = findViewById(R.id.switch_bar);
         if (mMainSwitch != null) {
-            mMainSwitch.setMetricsTag(getMetricsTag());
+            mMainSwitch.setMetricsCategory(lookupMetricsCategory());
             mMainSwitch.setTranslationZ(findViewById(R.id.main_content).getTranslationZ() + 1);
         }
 
diff --git a/src/com/android/settings/core/instrumentation/SettingsEventLogWriter.java b/src/com/android/settings/core/instrumentation/SettingsEventLogWriter.java
index f165897..e85576b 100644
--- a/src/com/android/settings/core/instrumentation/SettingsEventLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/SettingsEventLogWriter.java
@@ -41,6 +41,22 @@
     }
 
     @Override
+    public void clicked(int sourceCategory, String key) {
+        if (shouldDisableGenericEventLogging()) {
+            return;
+        }
+        super.clicked(sourceCategory, key);
+    }
+
+    @Override
+    public void changed(int category, String key, int value) {
+        if (shouldDisableGenericEventLogging()) {
+            return;
+        }
+        super.changed(category, key, value);
+    }
+
+    @Override
     public void action(Context context, int category, String pkg) {
         if (shouldDisableGenericEventLogging()) {
             return;
diff --git a/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java b/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java
index 8dfa095..86ee3d6 100644
--- a/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/SettingsIntelligenceLogWriter.java
@@ -85,6 +85,10 @@
     }
 
     @Override
+    public void changed(int category, String key, int value) {
+    }
+
+    @Override
     public void action(Context context, int action, Pair<Integer, Object>... taggedData) {
         action(SettingsEnums.PAGE_UNKNOWN /* attribution */,
                 action,
diff --git a/src/com/android/settings/core/instrumentation/StatsLogWriter.java b/src/com/android/settings/core/instrumentation/StatsLogWriter.java
index 15b589f..7b5915a 100644
--- a/src/com/android/settings/core/instrumentation/StatsLogWriter.java
+++ b/src/com/android/settings/core/instrumentation/StatsLogWriter.java
@@ -55,6 +55,16 @@
     }
 
     @Override
+    public void changed(int sourceCategory, String key, int value) {
+        SettingsStatsLog.write(SettingsStatsLog.SETTINGS_UI_CHANGED /* Atom name */,
+                sourceCategory /* attribution */,
+                SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE /* action */,
+                SettingsEnums.PAGE_UNKNOWN /* pageId */,
+                key /* changedPreferenceKey */,
+                value /* changedPreferenceIntValue */);
+    }
+
+    @Override
     public void action(Context context, int action, Pair<Integer, Object>... taggedData) {
         action(SettingsEnums.PAGE_UNKNOWN /* attribution */,
                 action,
diff --git a/src/com/android/settings/widget/SettingsMainSwitchBar.java b/src/com/android/settings/widget/SettingsMainSwitchBar.java
index 5f752f9..5ad16d7 100644
--- a/src/com/android/settings/widget/SettingsMainSwitchBar.java
+++ b/src/com/android/settings/widget/SettingsMainSwitchBar.java
@@ -18,7 +18,6 @@
 
 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
-import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.View;
@@ -55,7 +54,7 @@
     private final MetricsFeatureProvider mMetricsFeatureProvider;
     private OnBeforeCheckedChangeListener mOnBeforeListener;
 
-    private String mMetricsTag;
+    private int mMetricsCategory;
 
     public SettingsMainSwitchBar(Context context) {
         this(context, null);
@@ -125,12 +124,7 @@
     }
 
     protected void onRestrictedIconClick() {
-        mMetricsFeatureProvider.action(
-                SettingsEnums.PAGE_UNKNOWN,
-                SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE,
-                SettingsEnums.PAGE_UNKNOWN,
-                mMetricsTag + "/switch_bar|restricted",
-                1);
+        mMetricsFeatureProvider.clicked(mMetricsCategory, "switch_bar|restricted");
     }
 
     @Override
@@ -159,8 +153,8 @@
     /**
      * Set the metrics tag.
      */
-    public void setMetricsTag(String tag) {
-        mMetricsTag = tag;
+    public void setMetricsCategory(int category) {
+        mMetricsCategory = category;
     }
 
     private View getDelegatingView() {
@@ -168,11 +162,6 @@
     }
 
     private void logMetrics(boolean isChecked) {
-        mMetricsFeatureProvider.action(
-                SettingsEnums.PAGE_UNKNOWN,
-                SettingsEnums.ACTION_SETTINGS_PREFERENCE_CHANGE,
-                SettingsEnums.PAGE_UNKNOWN,
-                mMetricsTag + "/switch_bar",
-                isChecked ? 1 : 0);
+        mMetricsFeatureProvider.changed(mMetricsCategory, "switch_bar", isChecked ? 1 : 0);
     }
 }