Loading src/com/android/settings/localepicker/AppLocalePickerActivity.java +38 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.localepicker; import android.app.FragmentTransaction; import android.app.LocaleManager; import android.app.settings.SettingsEnums; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; Loading @@ -37,15 +38,22 @@ 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 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; private String mPackageName; private LocalePickerWithRegion mLocalePickerWithRegion; private AppLocaleDetails mAppLocaleDetails; private View mAppLocaleDetailContainer; private MetricsFeatureProvider mMetricsFeatureProvider; @Override public void onCreate(Bundle savedInstanceState) { Loading @@ -71,6 +79,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity setTitle(R.string.app_locale_picker_title); getActionBar().setDisplayHomeAsUpEnabled(true); mMetricsFeatureProvider = FeatureFactory.getFactory(this).getMetricsFeatureProvider(); mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker( this, Loading Loading @@ -99,6 +108,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity if (localeInfo == null || localeInfo.getLocale() == null || localeInfo.isSystemLocale()) { setAppDefaultLocale(""); } else { logLocaleSource(localeInfo); setAppDefaultLocale(localeInfo.getLocale().toLanguageTag()); } finish(); Loading Loading @@ -177,4 +187,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 @@ -45,6 +48,7 @@ import androidx.annotation.ArrayRes; import com.android.internal.app.LocaleStore; import com.android.settings.applications.AppInfoBase; import com.android.settings.applications.AppLocaleUtil; import com.android.settings.testutils.FakeFeatureFactory; import org.junit.After; import org.junit.Before; Loading Loading @@ -79,6 +83,7 @@ import java.util.Locale; public class AppLocalePickerActivityTest { private static final String TEST_PACKAGE_NAME = "com.android.settings"; private static final Uri TEST_PACKAGE_URI = Uri.parse("package:" + TEST_PACKAGE_NAME); private FakeFeatureFactory mFeatureFactory; @Mock LocaleStore.LocaleInfo mLocaleInfo; Loading @@ -99,6 +104,7 @@ public class AppLocalePickerActivityTest { when(mLocaleConfig.getStatus()).thenReturn(LocaleConfig.STATUS_SUCCESS); when(mLocaleConfig.getSupportedLocales()).thenReturn(LocaleList.forLanguageTags("en-US")); ReflectionHelpers.setStaticField(AppLocaleUtil.class, "sLocaleConfig", mLocaleConfig); mFeatureFactory = FakeFeatureFactory.setupForTest(); } @After Loading Loading @@ -210,6 +216,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)); } private ActivityController<TestAppLocalePickerActivity> initActivityController( boolean hasPackageName) { Intent data = new Intent(); Loading Loading
src/com/android/settings/localepicker/AppLocalePickerActivity.java +38 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.localepicker; import android.app.FragmentTransaction; import android.app.LocaleManager; import android.app.settings.SettingsEnums; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; Loading @@ -37,15 +38,22 @@ 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 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; private String mPackageName; private LocalePickerWithRegion mLocalePickerWithRegion; private AppLocaleDetails mAppLocaleDetails; private View mAppLocaleDetailContainer; private MetricsFeatureProvider mMetricsFeatureProvider; @Override public void onCreate(Bundle savedInstanceState) { Loading @@ -71,6 +79,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity setTitle(R.string.app_locale_picker_title); getActionBar().setDisplayHomeAsUpEnabled(true); mMetricsFeatureProvider = FeatureFactory.getFactory(this).getMetricsFeatureProvider(); mLocalePickerWithRegion = LocalePickerWithRegion.createLanguagePicker( this, Loading Loading @@ -99,6 +108,7 @@ public class AppLocalePickerActivity extends SettingsBaseActivity if (localeInfo == null || localeInfo.getLocale() == null || localeInfo.isSystemLocale()) { setAppDefaultLocale(""); } else { logLocaleSource(localeInfo); setAppDefaultLocale(localeInfo.getLocale().toLanguageTag()); } finish(); Loading Loading @@ -177,4 +187,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 @@ -45,6 +48,7 @@ import androidx.annotation.ArrayRes; import com.android.internal.app.LocaleStore; import com.android.settings.applications.AppInfoBase; import com.android.settings.applications.AppLocaleUtil; import com.android.settings.testutils.FakeFeatureFactory; import org.junit.After; import org.junit.Before; Loading Loading @@ -79,6 +83,7 @@ import java.util.Locale; public class AppLocalePickerActivityTest { private static final String TEST_PACKAGE_NAME = "com.android.settings"; private static final Uri TEST_PACKAGE_URI = Uri.parse("package:" + TEST_PACKAGE_NAME); private FakeFeatureFactory mFeatureFactory; @Mock LocaleStore.LocaleInfo mLocaleInfo; Loading @@ -99,6 +104,7 @@ public class AppLocalePickerActivityTest { when(mLocaleConfig.getStatus()).thenReturn(LocaleConfig.STATUS_SUCCESS); when(mLocaleConfig.getSupportedLocales()).thenReturn(LocaleList.forLanguageTags("en-US")); ReflectionHelpers.setStaticField(AppLocaleUtil.class, "sLocaleConfig", mLocaleConfig); mFeatureFactory = FakeFeatureFactory.setupForTest(); } @After Loading Loading @@ -210,6 +216,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)); } private ActivityController<TestAppLocalePickerActivity> initActivityController( boolean hasPackageName) { Intent data = new Intent(); Loading