Merge "Add metric for Tap & Pay Foreground Setting"
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