Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1bdf90c authored by Fan Zhang's avatar Fan Zhang
Browse files

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
parent 552fc292
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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);
+35 −0
Original line number Diff line number Diff line
@@ -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<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));
    }
}