Add locale souce metrics
Bug: 284094665 Test: atest SettingsRoboTests:com.android.settings.localepicker Change-Id: I174e31fb185e859dd70b6277e23fab759c495e80
This commit is contained in:
@@ -23,6 +23,7 @@ import android.app.LocaleManager;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
@@ -45,12 +46,18 @@ import com.android.settings.R;
|
||||
import com.android.settings.applications.AppLocaleUtil;
|
||||
import com.android.settings.applications.appinfo.AppLocaleDetails;
|
||||
import com.android.settings.core.SettingsBaseActivity;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
|
||||
public class AppLocalePickerActivity extends SettingsBaseActivity
|
||||
implements LocalePickerWithRegion.LocaleSelectedListener, MenuItem.OnActionExpandListener {
|
||||
private static final String TAG = AppLocalePickerActivity.class.getSimpleName();
|
||||
private static final String CHANNEL_ID_SUGGESTION = "suggestion";
|
||||
private static final String CHANNEL_ID_SUGGESTION_TO_USER = "Locale suggestion";
|
||||
private static final int SIM_LOCALE = 1 << 0;
|
||||
private static final int SYSTEM_LOCALE = 1 << 1;
|
||||
private static final int APP_LOCALE = 1 << 2;
|
||||
private static final int IME_LOCALE = 1 << 3;
|
||||
static final String EXTRA_APP_LOCALE = "app_locale";
|
||||
static final String EXTRA_NOTIFICATION_ID = "notification_id";
|
||||
|
||||
@@ -59,6 +66,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
|
||||
private AppLocaleDetails mAppLocaleDetails;
|
||||
private View mAppLocaleDetailContainer;
|
||||
private NotificationController mNotificationController;
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
@@ -84,6 +92,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
|
||||
|
||||
setTitle(R.string.app_locale_picker_title);
|
||||
getActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
|
||||
mNotificationController = NotificationController.getInstance(this);
|
||||
|
||||
mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker(
|
||||
@@ -113,6 +122,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
|
||||
if (localeInfo == null || localeInfo.getLocale() == null || localeInfo.isSystemLocale()) {
|
||||
setAppDefaultLocale("");
|
||||
} else {
|
||||
logLocaleSource(localeInfo);
|
||||
setAppDefaultLocale(localeInfo.getLocale().toLanguageTag());
|
||||
broadcastAppLocaleChange(localeInfo);
|
||||
}
|
||||
@@ -268,4 +278,32 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void logLocaleSource(LocaleStore.LocaleInfo localeInfo) {
|
||||
if (!localeInfo.isSuggested() || localeInfo.isAppCurrentLocale()) {
|
||||
return;
|
||||
}
|
||||
int localeSource = 0;
|
||||
if (hasSuggestionType(localeInfo,
|
||||
LocaleStore.LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE)) {
|
||||
localeSource |= SYSTEM_LOCALE;
|
||||
}
|
||||
if (hasSuggestionType(localeInfo,
|
||||
LocaleStore.LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE)) {
|
||||
localeSource |= APP_LOCALE;
|
||||
}
|
||||
if (hasSuggestionType(localeInfo, LocaleStore.LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE)) {
|
||||
localeSource |= IME_LOCALE;
|
||||
}
|
||||
if (hasSuggestionType(localeInfo, LocaleStore.LocaleInfo.SUGGESTION_TYPE_SIM)) {
|
||||
localeSource |= SIM_LOCALE;
|
||||
}
|
||||
mMetricsFeatureProvider.action(this,
|
||||
SettingsEnums.ACTION_CHANGE_APP_LANGUAGE_FROM_SUGGESTED, localeSource);
|
||||
}
|
||||
|
||||
private static boolean hasSuggestionType(LocaleStore.LocaleInfo localeInfo,
|
||||
int suggestionType) {
|
||||
return localeInfo.isSuggestionOfType(suggestionType);
|
||||
}
|
||||
}
|
||||
|
@@ -18,6 +18,8 @@ package com.android.settings.localepicker;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
@@ -27,6 +29,7 @@ import static org.mockito.Mockito.when;
|
||||
import android.app.Activity;
|
||||
import android.app.ApplicationPackageManager;
|
||||
import android.app.LocaleConfig;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
@@ -51,6 +54,7 @@ import com.android.internal.app.LocaleStore;
|
||||
import com.android.settings.applications.AppInfoBase;
|
||||
import com.android.settings.applications.AppLocaleUtil;
|
||||
import com.android.settings.flags.Flags;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -91,6 +95,7 @@ public class AppLocalePickerActivityTest {
|
||||
private static final String EN_US = "en-US";
|
||||
private static int sUid;
|
||||
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private LocaleNotificationDataManager mDataManager;
|
||||
private AppLocalePickerActivity mActivity;
|
||||
|
||||
@@ -117,6 +122,7 @@ public class AppLocalePickerActivityTest {
|
||||
when(mLocaleConfig.getSupportedLocales()).thenReturn(LocaleList.forLanguageTags("en-US"));
|
||||
ReflectionHelpers.setStaticField(AppLocaleUtil.class, "sLocaleConfig", mLocaleConfig);
|
||||
sUid = Process.myUid();
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -228,6 +234,37 @@ public class AppLocalePickerActivityTest {
|
||||
assertThat(controller.get().isFinishing()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onLocaleSelected_logLocaleSource() {
|
||||
ActivityController<TestAppLocalePickerActivity> controller =
|
||||
initActivityController(true);
|
||||
LocaleList.setDefault(LocaleList.forLanguageTags("ja-JP,en-CA,en-US"));
|
||||
Locale locale = new Locale("en", "US");
|
||||
when(mLocaleInfo.getLocale()).thenReturn(locale);
|
||||
when(mLocaleInfo.isSystemLocale()).thenReturn(false);
|
||||
when(mLocaleInfo.isSuggested()).thenReturn(true);
|
||||
when(mLocaleInfo.isSuggestionOfType(LocaleStore.LocaleInfo.SUGGESTION_TYPE_SIM)).thenReturn(
|
||||
true);
|
||||
when(mLocaleInfo.isSuggestionOfType(
|
||||
LocaleStore.LocaleInfo.SUGGESTION_TYPE_SYSTEM_AVAILABLE_LANGUAGE)).thenReturn(
|
||||
true);
|
||||
when(mLocaleInfo.isSuggestionOfType(
|
||||
LocaleStore.LocaleInfo.SUGGESTION_TYPE_OTHER_APP_LANGUAGE)).thenReturn(
|
||||
true);
|
||||
when(mLocaleInfo.isSuggestionOfType(
|
||||
LocaleStore.LocaleInfo.SUGGESTION_TYPE_IME_LANGUAGE)).thenReturn(
|
||||
true);
|
||||
|
||||
controller.create();
|
||||
AppLocalePickerActivity mActivity = controller.get();
|
||||
mActivity.onLocaleSelected(mLocaleInfo);
|
||||
|
||||
int localeSource = 15; // SIM_LOCALE | SYSTEM_LOCALE |IME_LOCALE|APP_LOCALE
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
any(), eq(SettingsEnums.ACTION_CHANGE_APP_LANGUAGE_FROM_SUGGESTED),
|
||||
eq(localeSource));
|
||||
}
|
||||
|
||||
@Test
|
||||
@RequiresFlagsEnabled(Flags.FLAG_LOCALE_NOTIFICATION_ENABLED)
|
||||
public void onLocaleSelected_evaluateNotification_simpleLocaleUpdate_localeCreatedWithUid()
|
||||
|
Reference in New Issue
Block a user