diff --git a/src/com/android/customization/module/StatsLogUserEventLogger.java b/src/com/android/customization/module/StatsLogUserEventLogger.java
index 8762b20..07d8c1d 100644
--- a/src/com/android/customization/module/StatsLogUserEventLogger.java
+++ b/src/com/android/customization/module/StatsLogUserEventLogger.java
@@ -20,6 +20,7 @@
 
 import androidx.annotation.Nullable;
 
+import com.android.systemui.shared.system.StatsLogCompat;
 import com.android.customization.model.clock.Clockface;
 import com.android.customization.model.grid.GridOption;
 import com.android.customization.model.theme.ThemeBundle;
@@ -41,70 +42,40 @@
 
     @Override
     public void logResumed() {
-        Log.d(TAG, String.format("logResumed: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.ONRESUME,
-                0, 0, 0, 0, 0, 0, 0));
-//        StatsLogCompat.write(StyleEnums.ONRESUME,
-//                0, 0, 0, 0, 0, 0, 0);
+        StatsLogCompat.write(StyleEnums.ONRESUME, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     }
 
     @Override
     public void logStopped() {
-        Log.d(TAG, String.format("logStopped: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.ONSTOP,
-                0, 0, 0, 0, 0, 0, 0));
-//        StatsLogCompat.write(StyleEnums.ONSTOP,
-//                0, 0, 0, 0, 0, 0, 0);
+        StatsLogCompat.write(StyleEnums.ONSTOP, 0, 0, 0, 0, 0, 0, 0, 0, 0);
     }
 
     @Override
     public void logActionClicked(String collectionId, int actionLabelResId) {
-        Log.d(TAG, String.format("logActionClicked: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.WALLPAPER_EXPLORE,
-                0, 0, 0, 0, 0,
-                collectionId.hashCode(),
-                0));
-//        StatsLogCompat.write(StyleEnums.WALLPAPER_EXPLORE,
-//                0, 0, 0, 0, 0,
-//                collectionId.hashCode(),
-//                0));
+        StatsLogCompat.write(StyleEnums.WALLPAPER_EXPLORE, 0, 0, 0, 0, 0, collectionId.hashCode(),
+                0, 0, 0);
     }
 
     @Override
     public void logIndividualWallpaperSelected(String collectionId) {
-        Log.d(TAG, String.format("logIndividualWallpaperSelected: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.WALLPAPER_SELECT,
-                0, 0, 0, 0, 0, 0,
-                collectionId.hashCode()));
-//        StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT,
-//                0, 0, 0, 0, 0, 0,
-//                collectionId.hashCode());
+        StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT, 0, 0, 0, 0, 0, 0,
+                collectionId.hashCode(), 0, 0);
     }
 
     @Override
     public void logCategorySelected(String collectionId) {
-        Log.d(TAG, String.format("logCategorySelected: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.WALLPAPER_SELECT,
+        StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT,
                 0, 0, 0, 0, 0,
                 collectionId.hashCode(),
-                0));
-//        StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT,
-//                0, 0, 0, 0, 0,
-//                collectionId.hashCode(),
-//                0);
+                0, 0, 0);
     }
 
     @Override
     public void logWallpaperSet(String collectionId, @Nullable String wallpaperId) {
-        Log.d(TAG, String.format("logWallpaperSet: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.WALLPAPER_APPLIED,
+        StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT,
                 0, 0, 0, 0, 0,
                 collectionId.hashCode(),
-                Objects.hashCode(wallpaperId)));
-//        StatsLogCompat.write(StyleEnums.WALLPAPER_SELECT,
-//                0, 0, 0, 0, 0,
-//                collectionId.hashCode(),
-//                0);
+                0, 0, 0);
     }
 
     @Nullable
@@ -115,83 +86,51 @@
 
     @Override
     public void logThemeSelected(ThemeBundle theme, boolean isCustomTheme) {
-        Log.d(TAG, String.format("logThemeSelected: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.PICKER_SELECT,
+        StatsLogCompat.write(StyleEnums.PICKER_SELECT,
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)),
                 Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)),
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)),
-                0, 0, 0, 0));
-//        StatsLogCompat.write(StyleEnums.PICKER_SELECT,
-//                Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)),
-//                Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)),
-//                Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)),
-//                0, 0, 0, 0);
+                0, 0, 0, 0, 0, 0);
     }
 
     @Override
     public void logThemeApplied(ThemeBundle theme, boolean isCustomTheme) {
-        Log.d(TAG, String.format("logThemeApplied: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.PICKER_APPLIED,
+        StatsLogCompat.write(StyleEnums.PICKER_APPLIED,
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)),
                 Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)),
                 Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)),
-                0, 0, 0, 0));
-//        StatsLogCompat.write(StyleEnums.PICKER_APPLIED,
-//        Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_COLOR)),
-//        Objects.hashCode(getThemePackage(theme,OVERLAY_CATEGORY_FONT)),
-//        Objects.hashCode(getThemePackage(theme, OVERLAY_CATEGORY_SHAPE)),
-//                0, 0, 0, 0);
+                0, 0, 0, 0, 0, 0);
     }
 
     @Override
     public void logClockSelected(Clockface clock) {
-        Log.d(TAG, String.format("logClockSelected: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.PICKER_SELECT,
+        StatsLogCompat.write(StyleEnums.PICKER_SELECT,
                 0, 0, 0,
                 Objects.hashCode(clock.getId()),
-                0, 0, 0));
-//        StatsLogCompat.write(StyleEnums.PICKER_SELECT,
-//        0, 0, 0,
-//        Objects.hashCode(clock.getId()),
-//        0, 0, 0));
+                0, 0, 0, 0, 0);
     }
 
     @Override
     public void logClockApplied(Clockface clock) {
-        Log.d(TAG, String.format("logClockApplied: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.PICKER_APPLIED,
+        StatsLogCompat.write(StyleEnums.PICKER_APPLIED,
                 0, 0, 0,
                 Objects.hashCode(clock.getId()),
-                0, 0, 0));
-//        StatsLogCompat.write(StyleEnums.PICKER_APPLIED,
-//        0, 0, 0,
-//        Objects.hashCode(clock.getId()),
-//        0, 0, 0));
+                0, 0, 0, 0, 0);
     }
 
     @Override
     public void logGridSelected(GridOption grid) {
-        Log.d(TAG, String.format("logGridSelected: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.PICKER_SELECT,
+        StatsLogCompat.write(StyleEnums.PICKER_SELECT,
                 0, 0, 0, 0,
                 grid.cols,
-                0, 0));
-//        StatsLogCompat.write(StyleEnums.PICKER_SELECT,
-//        0, 0, 0, 0,
-//        Objects.hashCode(clock.getId()),
-//        0, 0));
+                0, 0, 0, 0);
     }
 
     @Override
     public void logGridApplied(GridOption grid) {
-        Log.d(TAG, String.format("logGridApplied: %d, %d, %d, %d, %d, %d, %d, %d",
-                StyleEnums.PICKER_APPLIED,
+        StatsLogCompat.write(StyleEnums.PICKER_APPLIED,
                 0, 0, 0, 0,
                 grid.cols,
-                0, 0));
-//        StatsLogCompat.write(StyleEnums.PICKER_APPLIED,
-//        0, 0, 0, 0,
-//        Objects.hashCode(clock.getId()),
-//        0, 0));
+                0, 0, 0, 0);
     }
 }
