diff --git a/src/com/android/settings/localepicker/AppLocalePickerActivity.java b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
index 1d27590..491f1a4 100644
--- a/src/com/android/settings/localepicker/AppLocalePickerActivity.java
+++ b/src/com/android/settings/localepicker/AppLocalePickerActivity.java
@@ -18,7 +18,6 @@
 
 import android.app.FragmentTransaction;
 import android.app.LocaleManager;
-import android.app.settings.SettingsEnums;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
@@ -43,8 +42,6 @@
 import com.android.settings.applications.AppLocaleUtil;
 import com.android.settings.applications.appinfo.AppLocaleDetails;
 import com.android.settings.core.SettingsBaseActivity;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import java.util.Locale;
 
@@ -54,16 +51,11 @@
     static final String EXTRA_APP_LOCALE = "app_locale";
     private static final String PROP_SYSTEM_LOCALE_SUGGESTION = "android.system.locale.suggestion";
     private static final boolean ENABLED = false;
-    private static final int SIM_LOCALE = 1 << 0;
-    private static final int SYSTEM_LOCALE = 1 << 1;
-    private static final int APP_LOCALE = 1 << 2;
-    private static final int IME_LOCALE = 1 << 3;
 
     private String mPackageName;
     private LocalePickerWithRegion mLocalePickerWithRegion;
     private AppLocaleDetails mAppLocaleDetails;
     private View mAppLocaleDetailContainer;
-    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -89,7 +81,6 @@
 
         setTitle(R.string.app_locale_picker_title);
         getActionBar().setDisplayHomeAsUpEnabled(true);
-        mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
 
         mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker(
                 this,
@@ -118,7 +109,6 @@
         if (localeInfo == null || localeInfo.getLocale() == null || localeInfo.isSystemLocale()) {
             setAppDefaultLocale("");
         } else {
-            logLocaleSource(localeInfo);
             setAppDefaultLocale(localeInfo.getLocale().toLanguageTag());
             broadcastAppLocaleChange(localeInfo);
         }
@@ -250,32 +240,4 @@
 
         return false;
     }
-
-    private void logLocaleSource(LocaleStore.LocaleInfo localeInfo) {
-        if (!localeInfo.isSuggested() || localeInfo.isAppCurrentLocale()) {
-            return;
-        }
-        int localeSource = 0;
-        if (hasSuggestionType(localeInfo,
-                LocaleStore.LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE)) {
-            localeSource |= SYSTEM_LOCALE;
-        }
-        if (hasSuggestionType(localeInfo,
-                LocaleStore.LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE)) {
-            localeSource |= APP_LOCALE;
-        }
-        if (hasSuggestionType(localeInfo, LocaleStore.LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE)) {
-            localeSource |= IME_LOCALE;
-        }
-        if (hasSuggestionType(localeInfo, LocaleStore.LocaleInfo.SUGGESTION_TYPE_SIM)) {
-            localeSource |= SIM_LOCALE;
-        }
-        mMetricsFeatureProvider.action(this,
-                SettingsEnums.ACTION_CHANGE_APP_LANGUAGE_FROM_SUGGESTED, localeSource);
-    }
-
-    private static boolean hasSuggestionType(LocaleStore.LocaleInfo localeInfo,
-            int suggestionType) {
-        return localeInfo.isSuggestionOfType(suggestionType);
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java b/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java
index 8fb3a5d..48caecd 100644
--- a/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java
+++ b/tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java
@@ -18,8 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
@@ -29,7 +27,6 @@
 import android.app.Activity;
 import android.app.ApplicationPackageManager;
 import android.app.LocaleConfig;
-import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -48,7 +45,6 @@
 import com.android.internal.app.LocaleStore;
 import com.android.settings.applications.AppInfoBase;
 import com.android.settings.applications.AppLocaleUtil;
-import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.After;
 import org.junit.Before;
@@ -83,7 +79,6 @@
 public class AppLocalePickerActivityTest {
     private static final String TEST_PACKAGE_NAME = "com.android.settings";
     private static final Uri TEST_PACKAGE_URI = Uri.parse("package:" + TEST_PACKAGE_NAME);
-    private FakeFeatureFactory mFeatureFactory;
 
     @Mock
     LocaleStore.LocaleInfo mLocaleInfo;
@@ -104,7 +99,6 @@
         when(mLocaleConfig.getStatus()).thenReturn(LocaleConfig.STATUS_SUCCESS);
         when(mLocaleConfig.getSupportedLocales()).thenReturn(LocaleList.forLanguageTags("en-US"));
         ReflectionHelpers.setStaticField(AppLocaleUtil.class, "sLocaleConfig", mLocaleConfig);
-        mFeatureFactory = FakeFeatureFactory.setupForTest();
     }
 
     @After
@@ -216,37 +210,6 @@
         assertThat(controller.get().isFinishing()).isTrue();
     }
 
-    @Test
-    public void onLocaleSelected_logLocaleSource() {
-        ActivityController<TestAppLocalePickerActivity> controller =
-                initActivityController(true);
-        LocaleList.setDefault(LocaleList.forLanguageTags("ja-JP,en-CA,en-US"));
-        Locale locale = new Locale("en", "US");
-        when(mLocaleInfo.getLocale()).thenReturn(locale);
-        when(mLocaleInfo.isSystemLocale()).thenReturn(false);
-        when(mLocaleInfo.isSuggested()).thenReturn(true);
-        when(mLocaleInfo.isSuggestionOfType(LocaleStore.LocaleInfo.SUGGESTION_TYPE_SIM)).thenReturn(
-                true);
-        when(mLocaleInfo.isSuggestionOfType(
-                LocaleStore.LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE)).thenReturn(
-                true);
-        when(mLocaleInfo.isSuggestionOfType(
-                LocaleStore.LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE)).thenReturn(
-                true);
-        when(mLocaleInfo.isSuggestionOfType(
-                LocaleStore.LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE)).thenReturn(
-                true);
-
-        controller.create();
-        AppLocalePickerActivity mActivity = controller.get();
-        mActivity.onLocaleSelected(mLocaleInfo);
-
-        int localeSource = 15; // SIM_LOCALE | SYSTEM_LOCALE |IME_LOCALE|APP_LOCALE
-        verify(mFeatureFactory.metricsFeatureProvider).action(
-                any(), eq(SettingsEnums.ACTION_CHANGE_APP_LANGUAGE_FROM_SUGGESTED),
-                eq(localeSource));
-    }
-
     private ActivityController<TestAppLocalePickerActivity> initActivityController(
             boolean hasPackageName) {
         Intent data = new Intent();
