Add locale recommendation metrics

Bug: 275306065
Test: atest SettingsRoboTests:com.android.settings.localepicker
Change-Id: I7263c292eee51475274585fe4c0864f82fabf7d2
This commit is contained in:
Allen Su
2023-12-25 02:56:30 +00:00
parent b1ab7f0373
commit 30e1bf61b7
7 changed files with 31 additions and 0 deletions

View File

@@ -176,6 +176,8 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
localeInfo.getFullNameNative()), localeInfo.getFullNameNative()),
getString(R.string.desc_system_locale_addition), getString(R.string.desc_system_locale_addition),
localeTag); localeTag);
mMetricsFeatureProvider.action(this,
SettingsEnums.ACTION_NOTIFICATION_FOR_SYSTEM_LOCALE);
} }
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Unable to find info for package: " + mPackageName); Log.e(TAG, "Unable to find info for package: " + mPackageName);

View File

@@ -245,6 +245,7 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
} }
mAdapter.setCacheItemList(); mAdapter.setCacheItemList();
} else if (requestCode == DIALOG_ADD_SYSTEM_LOCALE) { } else if (requestCode == DIALOG_ADD_SYSTEM_LOCALE) {
int action = SettingsEnums.ACTION_CANCEL_SYSTEM_LOCALE_FROM_RECOMMENDATION;
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
localeInfo = (LocaleStore.LocaleInfo) data.getExtras().getSerializable( localeInfo = (LocaleStore.LocaleInfo) data.getExtras().getSerializable(
LocaleDialogFragment.ARG_TARGET_LOCALE); LocaleDialogFragment.ARG_TARGET_LOCALE);
@@ -252,7 +253,9 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
getContext().getContentResolver(), getContext().getContentResolver(),
Settings.System.LOCALE_PREFERENCES); Settings.System.LOCALE_PREFERENCES);
mAdapter.addLocale(mayAppendUnicodeTags(localeInfo, preferencesTags)); mAdapter.addLocale(mayAppendUnicodeTags(localeInfo, preferencesTags));
action = SettingsEnums.ACTION_ADD_SYSTEM_LOCALE_FROM_RECOMMENDATION;
} }
mMetricsFeatureProvider.action(getContext(), action);
} }
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
} }

View File

@@ -21,6 +21,7 @@ import static com.android.settings.localepicker.AppLocalePickerActivity.EXTRA_NO
import static com.android.settings.localepicker.LocaleListEditor.EXTRA_SYSTEM_LOCALE_DIALOG_TYPE; import static com.android.settings.localepicker.LocaleListEditor.EXTRA_SYSTEM_LOCALE_DIALOG_TYPE;
import static com.android.settings.localepicker.LocaleListEditor.LOCALE_SUGGESTION; import static com.android.settings.localepicker.LocaleListEditor.LOCALE_SUGGESTION;
import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@@ -32,6 +33,8 @@ import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.android.settings.overlay.FeatureFactory;
/** /**
* An Activity that launches the system locale settings page. * An Activity that launches the system locale settings page.
*/ */
@@ -60,6 +63,8 @@ public class NotificationActionActivity extends AppCompatActivity {
actionIntent.putExtra(EXTRA_APP_LOCALE, appLocale); actionIntent.putExtra(EXTRA_APP_LOCALE, appLocale);
actionIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); actionIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
getLauncher().launch(actionIntent); getLauncher().launch(actionIntent);
FeatureFactory.getFeatureFactory().getMetricsFeatureProvider().action(this,
SettingsEnums.ACTION_NOTIFICATION_CLICK_FOR_SYSTEM_LOCALE);
finish(); finish();
return; return;
} }

View File

@@ -19,6 +19,7 @@ package com.android.settings.localepicker;
import static com.android.settings.localepicker.AppLocalePickerActivity.EXTRA_APP_LOCALE; import static com.android.settings.localepicker.AppLocalePickerActivity.EXTRA_APP_LOCALE;
import static com.android.settings.localepicker.AppLocalePickerActivity.EXTRA_NOTIFICATION_ID; import static com.android.settings.localepicker.AppLocalePickerActivity.EXTRA_NOTIFICATION_ID;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -26,6 +27,8 @@ import android.util.Log;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import com.android.settings.overlay.FeatureFactory;
/** /**
* A Broadcast receiver that handles the locale notification which is swiped away. * A Broadcast receiver that handles the locale notification which is swiped away.
*/ */
@@ -41,6 +44,8 @@ public class NotificationCancelReceiver extends BroadcastReceiver {
Log.i(TAG, "Locale notification is swiped away."); Log.i(TAG, "Locale notification is swiped away.");
if (savedNotificationID == notificationId) { if (savedNotificationID == notificationId) {
getNotificationController(context).incrementDismissCount(appLocale); getNotificationController(context).incrementDismissCount(appLocale);
FeatureFactory.getFeatureFactory().getMetricsFeatureProvider().action(context,
SettingsEnums.ACTION_NOTIFICATION_SWIPE_FOR_SYSTEM_LOCALE);
} }
} }

View File

@@ -314,6 +314,8 @@ public class AppLocalePickerActivityTest {
assertThat(info.getNotificationCount()).isEqualTo(1); assertThat(info.getNotificationCount()).isEqualTo(1);
assertThat(info.getDismissCount()).isEqualTo(0); assertThat(info.getDismissCount()).isEqualTo(0);
assertThat(info.getLastNotificationTimeMs()).isNotEqualTo(0); assertThat(info.getLastNotificationTimeMs()).isNotEqualTo(0);
verify(mFeatureFactory.metricsFeatureProvider).action(
any(), eq(SettingsEnums.ACTION_NOTIFICATION_FOR_SYSTEM_LOCALE));
mDataManager.clearLocaleNotificationMap(); mDataManager.clearLocaleNotificationMap();
} }

View File

@@ -25,10 +25,13 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.app.settings.SettingsEnums;
import android.content.Intent; import android.content.Intent;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -42,6 +45,7 @@ import org.robolectric.android.controller.ActivityController;
public class NotificationActionActivityTest { public class NotificationActionActivityTest {
private NotificationActionActivity mNotificationActivity; private NotificationActionActivity mNotificationActivity;
private ActivityController<NotificationActionActivity> mActivityController; private ActivityController<NotificationActionActivity> mActivityController;
private FakeFeatureFactory mFeatureFactory;
@Mock @Mock
private NotificationController mNotificationController; private NotificationController mNotificationController;
@Mock @Mock
@@ -50,6 +54,7 @@ public class NotificationActionActivityTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mFeatureFactory = FakeFeatureFactory.setupForTest();
} }
@Test @Test
@@ -70,6 +75,8 @@ public class NotificationActionActivityTest {
mNotificationActivity.onCreate(null); mNotificationActivity.onCreate(null);
verify(mLauncher).launch(any(Intent.class)); verify(mLauncher).launch(any(Intent.class));
verify(mFeatureFactory.metricsFeatureProvider).action(
any(), eq(SettingsEnums.ACTION_NOTIFICATION_CLICK_FOR_SYSTEM_LOCALE));
verify(mNotificationActivity).finish(); verify(mNotificationActivity).finish();
} }
} }

View File

@@ -26,9 +26,12 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -43,12 +46,14 @@ public class NotificationCancelReceiverTest {
private NotificationCancelReceiver mReceiver; private NotificationCancelReceiver mReceiver;
@Mock @Mock
private NotificationController mNotificationController; private NotificationController mNotificationController;
private FakeFeatureFactory mFeatureFactory;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mReceiver = spy(new NotificationCancelReceiver()); mReceiver = spy(new NotificationCancelReceiver());
mFeatureFactory = FakeFeatureFactory.setupForTest();
doReturn(mNotificationController).when(mReceiver).getNotificationController(any()); doReturn(mNotificationController).when(mReceiver).getNotificationController(any());
} }
@@ -64,5 +69,7 @@ public class NotificationCancelReceiverTest {
mReceiver.onReceive(mContext, intent); mReceiver.onReceive(mContext, intent);
verify(mNotificationController).incrementDismissCount(eq(locale)); verify(mNotificationController).incrementDismissCount(eq(locale));
verify(mFeatureFactory.metricsFeatureProvider).action(
any(), eq(SettingsEnums.ACTION_NOTIFICATION_SWIPE_FOR_SYSTEM_LOCALE));
} }
} }