diff --git a/src/com/android/settings/nfc/NfcForegroundPreferenceController.java b/src/com/android/settings/nfc/NfcForegroundPreferenceController.java index 7f8d0849770..b0c9168a350 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 androidx.preference.PreferenceScreen; 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 @@ public class NfcForegroundPreferenceController extends BasePreferenceController 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 @@ public class NfcForegroundPreferenceController extends BasePreferenceController 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 b8e3a338d6e..4c2195c50e9 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.spy; 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.DropDownPreference; 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.Mock; 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 @@ public class NfcForegroundPreferenceControllerTest { 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 @@ public class NfcForegroundPreferenceControllerTest { 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