Bidi wrap keyboard names before displaying them.
This is needed because keyboard names can contain characters from mixed locale. Without Bidi wrapping the labels will be garbled and not readable. Change-Id: I47668a65d7bef8828ad0424097834929ec12700d Fix: 37353900 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -20,6 +20,7 @@ import android.app.admin.DevicePolicyManager;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
|
import android.text.BidiFormatter;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
|
||||||
@@ -76,12 +77,15 @@ public class VirtualKeyboardPreferenceController extends PreferenceController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
|
||||||
|
|
||||||
String summary = null;
|
String summary = null;
|
||||||
for (String label : labels) {
|
for (String label : labels) {
|
||||||
if (summary == null) {
|
if (summary == null) {
|
||||||
summary = label;
|
summary = bidiFormatter.unicodeWrap(label);
|
||||||
} else {
|
} 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);
|
preference.setSummary(summary);
|
||||||
|
@@ -18,6 +18,8 @@ package com.android.settings.inputmethod;
|
|||||||
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -26,6 +28,7 @@ import android.app.admin.DevicePolicyManager;
|
|||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
import android.support.v4.text.BidiFormatter;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.view.inputmethod.InputMethodInfo;
|
import android.view.inputmethod.InputMethodInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
@@ -39,6 +42,7 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -96,4 +100,35 @@ public class VirtualKeyboardPreferenceControllerTest {
|
|||||||
|
|
||||||
verify(mPreference).setSummary("label");
|
verify(mPreference).setSummary("label");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateState_multiImeWithMixedLocale_setImeLabelToSummary() {
|
||||||
|
final BidiFormatter formatter = BidiFormatter.getInstance();
|
||||||
|
final ComponentName componentName = new ComponentName("pkg", "cls");
|
||||||
|
final List<InputMethodInfo> 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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user