diff --git a/src/com/android/settings/nfc/NfcForegroundPreferenceController.java b/src/com/android/settings/nfc/NfcForegroundPreferenceController.java
index 7f8d084..b0c9168 100644
--- a/src/com/android/settings/nfc/NfcForegroundPreferenceController.java
+++ b/src/com/android/settings/nfc/NfcForegroundPreferenceController.java
@@ -13,6 +13,7 @@
  */
 package com.android.settings.nfc;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.text.TextUtils;
@@ -23,6 +24,8 @@
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -35,9 +38,11 @@
 
     private DropDownPreference mPreference;
     private PaymentBackend mPaymentBackend;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     public NfcForegroundPreferenceController(Context context, String key) {
         super(context, key);
+        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
     }
 
     public void setPaymentBackend(PaymentBackend backend) {
@@ -115,7 +120,11 @@
         final DropDownPreference pref = (DropDownPreference) preference;
         final String newValueString = (String) newValue;
         pref.setSummary(pref.getEntries()[pref.findIndexOfValue(newValueString)]);
-        mPaymentBackend.setForegroundMode(Integer.parseInt(newValueString) != 0);
+        final boolean foregroundMode = Integer.parseInt(newValueString) != 0;
+        mPaymentBackend.setForegroundMode(foregroundMode);
+        mMetricsFeatureProvider.action(mContext,
+                foregroundMode ? SettingsEnums.ACTION_NFC_PAYMENT_FOREGROUND_SETTING
+                               : SettingsEnums.ACTION_NFC_PAYMENT_ALWAYS_SETTING);
         return true;
     }
 
diff --git a/tests/robotests/src/com/android/settings/nfc/NfcForegroundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/nfc/NfcForegroundPreferenceControllerTest.java
index b8e3a33..4c2195c 100644
--- a/tests/robotests/src/com/android/settings/nfc/NfcForegroundPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/nfc/NfcForegroundPreferenceControllerTest.java
@@ -22,6 +22,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.pm.PackageManager;
 
@@ -29,6 +30,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -37,6 +39,7 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
 
@@ -55,12 +58,14 @@
     private Context mContext;
     private DropDownPreference mPreference;
     private NfcForegroundPreferenceController mController;
+    private FakeFeatureFactory mFakeFeatureFactory;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         when(mContext.getPackageManager()).thenReturn(mManager);
+        mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
         mController = new NfcForegroundPreferenceController(mContext, PREF_KEY);
         mPreference = new DropDownPreference(mContext);
         when(mScreen.findPreference(PREF_KEY)).thenReturn(mPreference);
@@ -156,4 +161,23 @@
         assertThat(mPreference.getEntry()).isEqualTo(favorDefault);
         assertThat(mPreference.getSummary()).isEqualTo(favorDefault);
     }
+
+    @Test
+    public void changeOptions_checkMetrics() {
+        initPaymentApps();
+        mController.displayPreference(mScreen);
+        mController.onPaymentAppsChanged();
+
+        mPreference.setValueIndex(0);
+        mPreference.callChangeListener(mPreference.getEntryValues()[0]);
+        verify(mPaymentBackend).setForegroundMode(true);
+        verify(mFakeFeatureFactory.metricsFeatureProvider).action(mContext,
+                SettingsEnums.ACTION_NFC_PAYMENT_FOREGROUND_SETTING);
+
+        mPreference.setValueIndex(1);
+        mPreference.callChangeListener(mPreference.getEntryValues()[1]);
+        verify(mPaymentBackend).setForegroundMode(false);
+        verify(mFakeFeatureFactory.metricsFeatureProvider).action(mContext,
+                SettingsEnums.ACTION_NFC_PAYMENT_ALWAYS_SETTING);
+    }
 }
\ No newline at end of file
