diff --git a/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java b/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java index b7bf3dc34f9..54369011153 100644 --- a/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java +++ b/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java @@ -20,6 +20,7 @@ import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.pm.PackageManager; import android.support.v7.preference.Preference; +import android.text.BidiFormatter; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; @@ -76,12 +77,15 @@ public class VirtualKeyboardPreferenceController extends PreferenceController { return; } + final BidiFormatter bidiFormatter = BidiFormatter.getInstance(); + String summary = null; for (String label : labels) { if (summary == null) { - summary = label; + summary = bidiFormatter.unicodeWrap(label); } else { - summary = mContext.getString(R.string.join_many_items_middle, summary, label); + summary = mContext.getString(R.string.join_many_items_middle, summary, + bidiFormatter.unicodeWrap(label)); } } preference.setSummary(summary); diff --git a/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java index 3256950c923..13324458e14 100644 --- a/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java @@ -18,6 +18,8 @@ package com.android.settings.inputmethod; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -26,6 +28,7 @@ import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; +import android.support.v4.text.BidiFormatter; import android.support.v7.preference.Preference; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; @@ -39,6 +42,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; @@ -96,4 +100,35 @@ public class VirtualKeyboardPreferenceControllerTest { verify(mPreference).setSummary("label"); } + + @Test + public void updateState_multiImeWithMixedLocale_setImeLabelToSummary() { + final BidiFormatter formatter = BidiFormatter.getInstance(); + final ComponentName componentName = new ComponentName("pkg", "cls"); + final List imis = new ArrayList<>(); + final String label1 = "label"; + final String label2 = "Keyboard מִקְלֶדֶת"; + imis.add(mock(InputMethodInfo.class)); + imis.add(mock(InputMethodInfo.class)); + + when(mDpm.getPermittedInputMethodsForCurrentUser()).thenReturn(null); + when(mImm.getEnabledInputMethodList()).thenReturn(imis); + when(imis.get(0).getPackageName()).thenReturn(componentName.getPackageName()); + when(imis.get(0).loadLabel(mPm)).thenReturn(label1); + when(imis.get(1).getPackageName()).thenReturn(componentName.getPackageName()); + when(imis.get(1).loadLabel(mPm)).thenReturn(label2); + when(mContext.getString(eq(R.string.join_many_items_middle), anyString(), anyString())) + .thenAnswer(invocation -> { + final Object[] args = invocation.getArguments(); + final String str1 = (String) args[1]; + final String str2 = (String) args[2]; + return RuntimeEnvironment.application.getString(R.string.join_many_items_middle, + str1, str2); + }); + + mController.updateState(mPreference); + + verify(mPreference).setSummary( + formatter.unicodeWrap(label1) + ", " + formatter.unicodeWrap(label2)); + } }