From cfaa13442cee95625b5b75804ab25a58b4bfcfbc Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Mon, 24 Apr 2023 12:26:04 +0000 Subject: [PATCH] [Settings] UI part: Add metrics for language Bug: 279915462 Test: atest Change-Id: Ie13c57b2b398beb48dfe0ac289ec336483575445 --- .../settings/localepicker/LocaleDialogFragment.java | 9 +++++++++ .../localepicker/LocaleHelperPreferenceController.java | 7 +++++++ .../settings/localepicker/LocaleDialogFragmentTest.java | 7 +++++++ .../LocaleHelperPreferenceControllerTest.java | 8 ++++++++ 4 files changed, 31 insertions(+) diff --git a/src/com/android/settings/localepicker/LocaleDialogFragment.java b/src/com/android/settings/localepicker/LocaleDialogFragment.java index 2ee2e8bb9d7..9e274d6bee0 100644 --- a/src/com/android/settings/localepicker/LocaleDialogFragment.java +++ b/src/com/android/settings/localepicker/LocaleDialogFragment.java @@ -37,6 +37,8 @@ import com.android.internal.app.LocaleStore; import com.android.settings.R; import com.android.settings.RestrictedSettingsFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; /** * Create a dialog for system locale events. @@ -143,6 +145,7 @@ public class LocaleDialogFragment extends InstrumentedDialogFragment { private final int mDialogType; private final LocaleStore.LocaleInfo mLocaleInfo; private final ResultReceiver mResultReceiver; + private final MetricsFeatureProvider mMetricsFeatureProvider; LocaleDialogController( @NonNull Context context, @NonNull LocaleDialogFragment dialogFragment) { @@ -152,6 +155,8 @@ public class LocaleDialogFragment extends InstrumentedDialogFragment { mLocaleInfo = (LocaleStore.LocaleInfo) arguments.getSerializable( ARG_TARGET_LOCALE); mResultReceiver = (ResultReceiver) arguments.getParcelable(ARG_RESULT_RECEIVER); + mMetricsFeatureProvider = FeatureFactory.getFactory( + mContext).getMetricsFeatureProvider(); } LocaleDialogController(@NonNull LocaleDialogFragment dialogFragment) { @@ -163,11 +168,15 @@ public class LocaleDialogFragment extends InstrumentedDialogFragment { if (mResultReceiver != null && mDialogType == DIALOG_CONFIRM_SYSTEM_DEFAULT) { Bundle bundle = new Bundle(); bundle.putInt(ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT); + boolean changed = false; if (which == DialogInterface.BUTTON_POSITIVE) { + changed = true; mResultReceiver.send(Activity.RESULT_OK, bundle); } else if (which == DialogInterface.BUTTON_NEGATIVE) { mResultReceiver.send(Activity.RESULT_CANCELED, bundle); } + mMetricsFeatureProvider.action(mContext, + SettingsEnums.ACTION_CHANGE_LANGUAGE, changed); } } diff --git a/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java b/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java index a639c9d297a..1227683ce73 100644 --- a/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java +++ b/src/com/android/settings/localepicker/LocaleHelperPreferenceController.java @@ -16,6 +16,7 @@ package com.android.settings.localepicker; +import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; import android.util.Log; @@ -24,8 +25,10 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceScreen; import com.android.settings.R; +import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.HelpUtils; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.widget.FooterPreference; /** @@ -36,8 +39,11 @@ public class LocaleHelperPreferenceController extends AbstractPreferenceControll private static final String KEY_FOOTER_LANGUAGE_PICKER = "footer_languages_picker"; + private final MetricsFeatureProvider mMetricsFeatureProvider; + public LocaleHelperPreferenceController(Context context) { super(context); + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -72,6 +78,7 @@ public class LocaleHelperPreferenceController extends AbstractPreferenceControll mContext.getString(R.string.link_locale_picker_footer_learn_more), mContext.getClass().getName()); if (intent != null) { + mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_LANGUAGES_LEARN_MORE); mContext.startActivity(intent); } else { Log.w(TAG, "HelpIntent is null"); diff --git a/tests/unit/src/com/android/settings/localepicker/LocaleDialogFragmentTest.java b/tests/unit/src/com/android/settings/localepicker/LocaleDialogFragmentTest.java index 5b10adf0ff6..b0998c023a6 100644 --- a/tests/unit/src/com/android/settings/localepicker/LocaleDialogFragmentTest.java +++ b/tests/unit/src/com/android/settings/localepicker/LocaleDialogFragmentTest.java @@ -38,6 +38,7 @@ import androidx.test.annotation.UiThreadTest; import androidx.test.core.app.ApplicationProvider; import com.android.internal.app.LocaleStore; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.ResourcesUtils; import org.junit.Before; @@ -55,11 +56,13 @@ public class LocaleDialogFragmentTest { private Context mContext; private LocaleDialogFragment mDialogFragment; + private FakeFeatureFactory mFeatureFactory; @Before public void setUp() throws Exception { mContext = ApplicationProvider.getApplicationContext(); mDialogFragment = new LocaleDialogFragment(); + mFeatureFactory = FakeFeatureFactory.setupForTest(); } private void setArgument( @@ -112,6 +115,8 @@ public class LocaleDialogFragmentTest { controller.onClick(null, DialogInterface.BUTTON_POSITIVE); verify(resultReceiver).send(eq(Activity.RESULT_OK), any()); + verify(mFeatureFactory.metricsFeatureProvider).action( + mContext, SettingsEnums.ACTION_CHANGE_LANGUAGE, true); } @Test @@ -124,6 +129,8 @@ public class LocaleDialogFragmentTest { controller.onClick(null, DialogInterface.BUTTON_NEGATIVE); verify(resultReceiver).send(eq(Activity.RESULT_CANCELED), any()); + verify(mFeatureFactory.metricsFeatureProvider).action( + mContext, SettingsEnums.ACTION_CHANGE_LANGUAGE, false); } @Test diff --git a/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java b/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java index 31b8e794480..5ac367e35b2 100644 --- a/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/localepicker/LocaleHelperPreferenceControllerTest.java @@ -19,12 +19,14 @@ package com.android.settings.localepicker; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.verify; +import android.app.settings.SettingsEnums; import android.content.Context; import android.os.Looper; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settingslib.widget.FooterPreference; import org.junit.Before; @@ -37,6 +39,7 @@ import org.mockito.MockitoAnnotations; public class LocaleHelperPreferenceControllerTest { private Context mContext; private LocaleHelperPreferenceController mLocaleHelperPreferenceController; + private FakeFeatureFactory mFeatureFactory; @Mock private FooterPreference mMockFooterPreference; @@ -49,11 +52,16 @@ public class LocaleHelperPreferenceControllerTest { } mContext = ApplicationProvider.getApplicationContext(); mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(mContext); + mFeatureFactory = FakeFeatureFactory.setupForTest(); } @Test public void updateFooterPreference_setFooterPreference_hasClickAction() { mLocaleHelperPreferenceController.updateFooterPreference(mMockFooterPreference); verify(mMockFooterPreference).setLearnMoreText(anyString()); + mMockFooterPreference.setLearnMoreAction(v -> { + verify(mFeatureFactory.metricsFeatureProvider).action( + mContext, SettingsEnums.ACTION_LANGUAGES_LEARN_MORE); + }); } }