Loading src/com/android/settings/localepicker/AppLocalePickerActivity.java +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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) { Loading @@ -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( Loading Loading @@ -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); } Loading Loading @@ -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); } } tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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() Loading Loading
src/com/android/settings/localepicker/AppLocalePickerActivity.java +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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) { Loading @@ -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( Loading Loading @@ -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); } Loading Loading @@ -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); } }
tests/robotests/src/com/android/settings/localepicker/AppLocalePickerActivityTest.java +37 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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() Loading